ويكاموس
arwiktionary
https://ar.wiktionary.org/wiki/%D9%88%D9%8A%D9%83%D8%A7%D9%85%D9%88%D8%B3:%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9_%D8%A7%D9%84%D8%B1%D8%A6%D9%8A%D8%B3%D9%8A%D8%A9
MediaWiki 1.47.0-wmf.19
case-sensitive
ميديا
خاص
نقاش
مستخدم
نقاش المستخدم
ويكاموس
نقاش ويكاموس
ملف
نقاش الملف
ميدياويكي
نقاش ميدياويكي
قالب
نقاش القالب
مساعدة
نقاش المساعدة
تصنيف
نقاش التصنيف
ملحق
نقاش الملحق
مكنز
نقاش المكنز
نص زمني
نقاش النص الزمني
وحدة
نقاش الوحدة
فعالية
نقاش فعالية
وحدة:ar-verb
828
188226
1158999
1158942
2026-09-10T12:39:05Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1158999
Scribunto
text/plain
local export = {}
--[=[
This module implements {{ar-conj}} and provides the underlying conjugation functions for {{ar-verb}}
(whose actual formatting is done in [[Module:ar-headword]]).
Author: User:Benwing, from an early version (2013-2014) by User:Atitarev, User:ZxxZxxZ.
]=]
--[=[
TERMINOLOGY:
-- "slot" = A particular combination of tense/mood/person/number/etc.
Example slot names for verbs are "past_1s" (past tense first-person singular), "juss_pass_3fp" (non-past jussive
passive third-person feminine plural) "ap" (active participle). Each slot is filled with zero or more forms.
-- "form" = The conjugated Arabic form representing the value of a given slot.
-- "lemma" = The dictionary form of a given Arabic term. For Arabic, normally the third person masculine singular past,
although other forms may be used if this form is missing (e.g. in passive-only verbs or verbs lacking the past).
]=]
--[=[
FIXME:
1. Finish unimplemented conjugation types. Only IX-final-weak left (extremely rare, possibly only one verb اِعْمَايَ
(according to Haywood and Nahmad p. 244, who are very specific about the irregular occurrence of alif + yā instead
of expected اِعْمَيَّ with doubled yā). Not in Hans Wehr. NOTE: Not true about this, cf. form IX اِرْعَوَى "to desist,
to repent, to see the light". Also note form XII اِخْضَوْضَرَ = form IX اِخْضَرَّ "to be or become green".
[DONE except for اِعْمَايَ]
2. Implement irregular verbs as special cases and recognize them, e.g.
-- laysa "to not be"; only exists in the past tense, no non-past, no imperative, no participles, no passive, no
verbal noun. Irregular alternation las-/lays-. [IMPLEMENTABLE USING OVERRIDES]
-- istaḥā yastaḥī "be ashamed of" -- this is complex according to Hans Wehr because there are two verbs, regular
istaḥyā yastaḥyī "to spare (someone)'s life" and irregular istaḥyā yastaḥyī "to be ashamed to face (someone)",
which is irregular because it has the alternate irregular form istaḥā yastaḥī which only applies to this meaning.
Currently we follow Haywood and Nahmad in saying that both varieties can be spelled istaḥyā/istaḥā/istaḥḥā, but we
should instead use a variant= param similar to حَيَّ to distinguish the two possibilities, and maybe not include
istaḥḥā.
-- ʿayya/ʿayiya yaʿayyu/yaʿyā "to not find the right way, be incapable of, stammer, falter, fall ill". This appears
to be a mixture of a geminate and final-weak verb. Unclear what the whole paradigm looks like. Do the
consonant-ending parts in the past follow the final-weak paradigm? Is it the same in the non-past? Or can you
conjugate the non-past fully as either geminate or final-weak?
-- اِنْمَحَى inmaḥā or يمَّحَى immaḥā "to be effaced, obliterated; to disappear, vanish" has irregular assimilation of inm-
to imm- as an alternative. inmalasa "to become smooth; to glide; to slip away; to escape" also has immalasa as an
alternative. The only other form VII verbs in Hans Wehr beginning with -m- are inmalaḵa "to be pulled out, torn
out, wrenched" and inmāʿa "to be melted, to melt, to dissolve", which are not listed with imm- alternatives, but
might have them; if so, we should handle this generally. [DONE]
-- يَرَعَ yaraʕa yariʕu "to be a coward, to be chickenhearted" as an alternative form of يَرِعَ yariʕa yayraʕu (as given in
Wehr). [IMPLEMENTABLE USING OVERRIDES]
3. Implement individual override parameters for each paradigm part. See Module:fro-verb for an example of how to do this
generally. Note that {{temp|ar-conj-I}} and other of the older templates already had such individual override params.
[DONE]
Irregular verbs already implemented:
-- [ḥayya/ḥayiya yaḥyā "live" -- behaves like a normal final-weak verb
(e.g. past first singular ḥayītu) except in the past-tense parts with
vowel-initial endings (all the third person except for the third feminine
plural). The normal singular and dual endings have -yiya- in them, which
compresses to -yya-, with the normal endings the less preferred ones.
In masculine third plural, expected ḥayū is replaced by ḥayyū by
analogy to the -yy- parts, and the regular form is not given as an
alternant in John Mace. Barron's 201 verbs appears to have the regular
ḥayū as the part, however. Note also that final -yā appears with tall
alif. This appears to be a spelling convention of Arabic, also applying
in ḥayyā (form II, "to keep (someone) alive") and 'aḥyā (form IV,
"to animate, revive, give birth to, give new life to").] -- implemented
-- [ittaxadha yattaxidhu "take"] -- implemented
-- [sa'ala yas'alu "ask" with alternative jussive/imperative yasal/sal] -- implemented
-- [ra'ā yarā "see"] -- implemented
-- ['arā yurī "show"] -- implemented
-- ['akala ya'kulu "eat" with imperative kul] -- implemented
-- ['axadha ya'xudhu "take" with imperative xudh] -- implemented
-- ['amara ya'muru "order" with imperative mur] -- implemented
--]=]
local force_cat = false -- set to true for debugging
-- if true, always maintain manual translit during processing, and compare against full translit at the end
local debug_translit = false
local lang = require("Module:languages").getByCode("ar")
local m_links = require("Module:links")
local m_string_utilities = require("Module:string utilities")
local m_table = require("Module:table")
local ar_utilities = require("Module:ar-utilities")
local iut = require("Module:inflection utilities")
local put = require("Module:parse utilities")
local list_to_text = mw.text.listToText
local rfind = m_string_utilities.find
local rsubn = m_string_utilities.gsub
local rmatch = m_string_utilities.match
local rsplit = m_string_utilities.split
local usub = m_string_utilities.sub
local ulen = m_string_utilities.len
local u = m_string_utilities.char
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local dump = mw.dumpObject
-- Within this module, conjugations are the functions that do the actual
-- conjugating by creating the parts of a basic verb.
-- They are defined further down.
local conjugations = {}
-- hamza variants
local HAMZA = u(0x0621) -- hamza on the line (stand-alone hamza) = ء
local HAMZA_ON_ALIF = u(0x0623)
local HAMZA_ON_W = u(0x0624)
local HAMZA_UNDER_ALIF = u(0x0625)
local HAMZA_ON_Y = u(0x0626)
local HAMZA_ANY = "[" .. HAMZA .. HAMZA_ON_ALIF .. HAMZA_UNDER_ALIF .. HAMZA_ON_W .. HAMZA_ON_Y .. "]"
local HAMZA_PH = u(0xFFF0) -- hamza placeholder
local BAD = u(0xFFF1)
local BORDER = u(0xFFF2)
local KEEP_W_PH = u(0xFFF3) -- retained-wāw placeholder; see postprocess_term()
local KEEP_HAMZA_PH = u(0xFFF4) -- quiescent-hamza placeholder; see postprocess_term()
local WAW_SEAT_PH = u(0xFFF5) -- pre-seated hamza-on-wāw placeholder; see postprocess_term()
local NO_MADDA_PH = u(0xFFF6) -- hamza held back from the madda rule; see postprocess_term()
-- diacritics
local A = u(0x064E) -- fatḥa
local AN = u(0x064B) -- fatḥatān (fatḥa tanwīn)
local U = u(0x064F) -- ḍamma
local UN = u(0x064C) -- ḍammatān (ḍamma tanwīn)
local I = u(0x0650) -- kasra
local IN = u(0x064D) -- kasratān (kasra tanwīn)
local SK = u(0x0652) -- sukūn = no vowel
local SH = u(0x0651) -- šadda = gemination of consonants
local DAGGER_ALIF = u(0x0670)
local DIACRITIC_ANY_BUT_SH = "[" .. A .. I .. U .. AN .. IN .. UN .. SK .. DAGGER_ALIF .. "]"
-- Pattern matching short vowels
local AIU = "[" .. A .. I .. U .. "]"
-- Pattern matching short vowels or sukūn
local AIUSK = "[" .. A .. I .. U .. SK .. "]"
-- Pattern matching any diacritics that may be on a consonant
local DIACRITIC = SH .. "?" .. DIACRITIC_ANY_BUT_SH
-- translit_patterns
local vowels = "aeiouāēīōū"
local NV = "[^" .. vowels .. "]"
local dia = {a = A, i = I, u = U}
local undia = {[A] = "a", [I] = "i", [U] = "u", ["-"] = "-"}
-- various letters and signs
local ALIF = u(0x0627) -- ʾalif = ا
local AMAQ = u(0x0649) -- ʾalif maqṣūra = ى
local AMAD = u(0x0622) -- ʾalif madda = آ
local TAM = u(0x0629) -- tāʾ marbūṭa = ة
local T = u(0x062A) -- tāʾ = ت
local HYPHEN = u(0x0640)
local N = u(0x0646) -- nūn = ن
local W = u(0x0648) -- wāw = و
local Y = u(0x064A) -- yāʾ = ي
local S = "س"
local M = "م"
local LRM = u(0x200e) -- left-to-right mark
-- common combinations
local AH = A .. TAM
local AT = A .. T
local AA = A .. ALIF
local AAMAQ = A .. AMAQ
local AAH = AA .. TAM
local AAT = AA .. T
local II = I .. Y
local UU = U .. W
local AY = A .. Y
local AW = A .. W
local AYSK = AY .. SK
local AWSK = AW .. SK
local NA = N .. A
local NI = N .. I
local AAN = AA .. N
local AANI = AA .. NI
local AYNI = AYSK .. NI
local AWNA = AWSK .. NA
local AYNA = AYSK .. NA
local AYAAT = AY .. AAT
local UNU = "[" .. UN .. U .. "]"
local MA = M .. A
local MU = M .. U
local TA = T .. A
local TU = T .. U
local _I = ALIF .. I
local _U = ALIF .. U
--W: Morphological pattern (الوزن الصرفي) to verb form mapping
local MORPHOLOGICAL_PATTERN_TO_FORM = {
["فعَل يفعُل"] = "I/a~u",
["فعَل يفعِل"] = "I/a~i",
["فعَل يفعَل"] = "I/a~a",
["فعُل يفعُل"] = "I/u~u",
["فعِل يفعَل"] = "I/i~a",
["فعِل يفعِل"] = "I/i~i",
["فعّل"] = "II",
["فاعل"] = "III",
["أفعل"] = "IV",
["تفعّل"] = "V",
["تفاعل"] = "VI",
["انفعل"] = "VII",
["افتعل"] = "VIII",
["افعلّ"] = "IX",
["استفعل"] = "X",
["افعالّ"] = "XI",
["افعوعل"] = "XII",
["افعوّل"] = "XIII",
["فعلل"] = "Iq",
["تفعلل"] = "IIq",
["افعنلل"] = "IIIq", -- "XIV" should not be used
["افعللّ"] = "IVq",
}
--W: Create reverse mapping from form to morphological pattern
local FORM_TO_MORPHOLOGICAL_PATTERN = {}
for pattern, form in pairs(MORPHOLOGICAL_PATTERN_TO_FORM) do
FORM_TO_MORPHOLOGICAL_PATTERN[form] = pattern
end
--W:
local MORPHOLOGICAL_PATTERN_TO_BASIC_DERIV = {
["فعَل يفعُل"] = "مُجرَّد",
["فعَل يفعِل"] = "مُجرَّد",
["فعَل يفعَل"] = "مُجرَّد",
["فعُل يفعُل"] = "مُجرَّد",
["فعِل يفعَل"] = "مُجرَّد",
["فعِل يفعِل"] = "مُجرَّد",
["فعّل"] = "مزيد بحرف",
["فاعل"] = "مزيد بحرف",
["أفعل"] = "مزيد بحرف",
["تفعّل"] = "مزيد بحرفين",
["تفاعل"] = "مزيد بحرفين",
["انفعل"] = "مزيد بحرفين",
["افتعل"] = "مزيد بحرفين",
["افعلّ"] = "مزيد بحرفين",
["استفعل"] = "مزيد بثلاثة أحرف",
["افعالّ"] = "مزيد بثلاثة أحرف",
["افعوعل"] = "مزيد بثلاثة أحرف",
["افعوّل"] = "مزيد بثلاثة أحرف",
["فعلل"] = "مُجرَّد",
["تفعلل"] = "مزيد بحرف",
["افعنلل"] = "مزيد بحرفين",
["افعللّ"] = "مزيد بحرفين",
}
local translit_cache = {
-- hamza variants
[HAMZA] = "ʔ",
[HAMZA_ON_ALIF] = "ʔ",
[HAMZA_ON_W] = "ʔ",
[HAMZA_UNDER_ALIF] = "ʔ",
[HAMZA_ON_Y] = "ʔ",
[HAMZA_PH] = "ʔ",
-- diacritics
[A] = "a",
[AN] = "an",
[U] = "u",
[UN] = "un",
[I] = "i",
[IN] = "in",
[SK] = "",
[SH] = "*", -- handled specially
[DAGGER_ALIF] = "ā",
-- various letters and signs
[""] = "",
[ALIF] = BAD, -- we should never be transliterating ALIF by itself, as its translit in isolation is ambiguous
[AMAQ] = BAD,
[AMAD] = "ʔā",
[TAM] = "",
[T] = "t",
[N] = "n",
[W] = "w",
[Y] = "y",
[S] = "s",
[M] = "m",
[LRM] = "",
-- common combinations
[AH] = "a",
[AT] = "at",
[AA] = "ā",
[AAMAQ] = "ā",
[AAH] = "āh",
[AAT] = "āt",
[II] = "ī",
[UU] = "ū",
[AY] = "ay",
[AW] = "aw",
[AYSK] = "ay",
[AWSK] = "aw",
[NA] = "na",
[NI] = "ni",
[AAN] = "ān",
[AANI] = "āni",
[AYNI] = "ayni",
[AWNA] = "awna",
[AYNA] = "ayna",
[AYAAT] = "ayāt",
[MA] = "ma",
[MU] = "mu",
[TA] = "ta",
[TU] = "tu",
[_I] = "i",
[_U] = "u",
}
local function transliterate(text)
local cached = translit_cache[text]
if cached then
if cached == BAD then
error(("Internal error: Unable to transliterate %s because explicitly marked as BAD"):format(text))
end
return cached
end
local tr = (lang:transliterate(text))
if not tr then
error(("Internal error: Unable to transliterate: %s"):format(text))
end
translit_cache[text] = tr
return tr
end
local all_person_number_list = {
"1s",
"2ms",
"2fs",
"3ms",
"3fs",
"2d",
"3md",
"3fd",
"1p",
"2mp",
"2fp",
"3mp",
"3fp"
}
local function make_person_number_slot_accel_list(list)
local slot_accel_list = {}
return slot_accel_list
end
local imp_person_number_list = {}
for _, pn in ipairs(all_person_number_list) do
if pn:find("^2") then
table.insert(imp_person_number_list, pn)
end
end
local passive_types = m_table.listToSet {
"pass", -- verb has both active and passive
"ipass", -- verb is active with impersonal passive
"nopass", -- verb is active-only
"onlypass", -- verb is passive-only
"onlypass-impers", -- verb itself is impersonal, meaning passive-only with impersonal passive
}
local indicator_flags = m_table.listToSet {
"nopast", "no_nonpast", "noimp",
"nocat", -- don't categorize or include annotations about this; useful in suppletive parts of verbs
"reduced", -- verb has assimilation/reduction of initial coronals
"altgem", -- form X with alternative past geminate forms with final-weak endings
}
export.potential_lemma_slots = {"past_3ms", "past_pass_3ms", "ind_3ms", "ind_pass_3ms", "imp_2ms"}
export.unsettable_slots = {}
for _, potential_lemma_slot in ipairs(export.potential_lemma_slots) do
table.insert(export.unsettable_slots, potential_lemma_slot .. "_linked")
end
-- We don't set the active participle directly for form I because we don't want stative verbs (with past vowel i or u)
-- to default to فَاعِل. Instead we set the special slot 'ap1' and later copy it to 'ap' for non-stative verbs. The user
-- meanwhile can explicitly request the فَاعِل form for active participles for stative verbs using `ap:+`.
table.insert(export.unsettable_slots, "ap1") -- primary default فَاعِل for form I active participles
table.insert(export.unsettable_slots, "ap2") -- secondary default فَعِيل for form I active participles (stative I)
table.insert(export.unsettable_slots, "ap3") -- secondary default فَعِل for form I active participles (stative II)
table.insert(export.unsettable_slots, "apcd") -- secondary default أَفْعَل for form I active participles (color/defect)
table.insert(export.unsettable_slots, "apan") -- secondary default فَعْلَان for form I active participles (in -ān)
table.insert(export.unsettable_slots, "pp2") -- secondary default فَعِيل for form I passive participles (same as ap2)
table.insert(export.unsettable_slots, "vn2") -- secondary default فِعَال for form III verbal nouns
export.unsettable_slots_set = m_table.listToSet(export.unsettable_slots)
local default_indicator_to_active_participle_slot = {
["+"] = "ap1",
["++"] = "ap2",
["+++"] = "ap3",
["+cd"] = "apcd",
["+an"] = "apan",
}
local slots_that_may_be_uncertain = {
vn = "verbal noun",
ap = "active participle",
}
-- Initialize all the slots for which we generate forms.
local function add_slots(alternant_multiword_spec)
alternant_multiword_spec.verb_slots = {
{"ap", "act|part"},
{"pp", "pass|part"},
{"vn", "vnoun"},
}
for _, unsettable_slot in ipairs(export.unsettable_slots) do
table.insert(alternant_multiword_spec.verb_slots, {unsettable_slot, "-"})
end
-- Add entries for a slot with person/number variants.
-- `slot_prefix` is the prefix of the slot, typically specifying the tense/aspect.
-- `tag_suffix` is a string listing the set of inflection tags to add after the person/number tags.
-- `person_number_list` is a list of the person/number slot suffixes to add to `slot_prefix`.
local function add_personal_slot(slot_prefix, tag_suffix, person_number_list)
for _, persnum in ipairs(person_number_list) do
local slot = slot_prefix .. "_" .. persnum
local accel = persnum:gsub("(.)", "%1|") .. tag_suffix
table.insert(alternant_multiword_spec.verb_slots, {slot, accel})
end
end
local tenses = {
{"past", "past|%s"},
{"ind", "non-past|%s|ind"},
{"sub", "non-past|%s|sub"},
{"juss", "non-past|%s|juss"},
}
for _, slot_accel in ipairs(tenses) do
local slot, accel = unpack(slot_accel)
for _, voice in ipairs {"act", "pass"} do
add_personal_slot(voice == "act" and slot or slot .. "_pass", accel:format(voice),
all_person_number_list)
end
end
add_personal_slot("imp", "imp", imp_person_number_list)
alternant_multiword_spec.verb_slots_map = {}
for _, slot_accel in ipairs(alternant_multiword_spec.verb_slots) do
local slot, accel = unpack(slot_accel)
alternant_multiword_spec.verb_slots_map[slot] = accel
end
end
local overridable_stems = {}
local slot_override_param_mods = {
footnote = {
item_dest = "footnotes",
store = "insert",
},
alt = {},
t = {
-- [[Module:links]] expects the gloss in "gloss".
item_dest = "gloss",
},
gloss = {},
g = {
-- [[Module:links]] expects the genders in "g". `sublist = true` automatically splits on comma (optionally
-- with surrounding whitespace).
item_dest = "genders",
sublist = true,
},
pos = {},
lit = {},
id = {},
--W: The q/qq/l/ll (qualifier and label) modifiers were removed: rendering them
-- needs [[Module:pron qualifier]], which does not exist on ar.wiktionary, so any
-- use of them raised a script error. Accepting them here again requires importing
-- that module first and restoring the block in generate_link() below.
}
local function generate_obj(formval, parse_err, prefix, is_slot_override)
local val, uncertain = formval:match("^(.*)(%?)$")
val = val or formval
uncertain = not not uncertain
local ar, translit = val:match("^(.*)//(.*)$")
if not ar then
ar = val
end
if ar == "" then
if uncertain then
ar = "?"
else
error(("Can't specify blank value for override for %s override '%s'"):format(
is_slot_override and "slot" or "stem", prefix))
end
end
return {form = ar, translit = translit, uncertain = uncertain}
end
local function parse_inline_modifiers(comma_separated_group, parse_err, prefix, is_slot_override)
local function this_generate_obj(formval, parse_err)
return generate_obj(formval, parse_err, prefix, is_slot_override)
end
return put.parse_inline_modifiers_from_segments {
group = comma_separated_group,
props = {
param_mods = slot_override_param_mods,
parse_err = parse_err,
generate_obj = this_generate_obj,
pre_normalize_modifiers = function(data)
local modtext = data.modtext
modtext = modtext:match("^(%[.*%])$")
if modtext then
return ("<footnote:%s>"):format(modtext)
end
return data.modtext
end,
},
}
end
local function allow_multiple_values_for_override(comma_separated_groups, data, is_slot_override)
local retvals = {}
for _, comma_separated_group in ipairs(comma_separated_groups) do
local retval
if is_slot_override then
--W: pass `prefix` and `is_slot_override` through; without them the error
-- raised for a blank override value formatted a nil prefix, which is a
-- crash on Lua 5.1 rather than the intended message. Reachable from e.g.
-- <I/a~u.vn:[[كتابة]]>, where the [[...]] is consumed as a footnote and
-- leaves the value empty.
retval = parse_inline_modifiers(comma_separated_group, data.parse_err, data.prefix,
is_slot_override)
else
retval = generate_obj(comma_separated_group[1], data.parse_err, data.prefix, is_slot_override)
retval.footnotes = data.fetch_footnotes(comma_separated_group)
end
table.insert(retvals, retval)
end
for _, form in ipairs(retvals) do
if form.form == "+" or default_indicator_to_active_participle_slot[form.form] then
if form.form ~= "+" and default_indicator_to_active_participle_slot[form.form] and not is_slot_override then
error(("Stem override '%s' cannot use %s to request a secondary default"):format(
data.prefix, form.form))
end
data.base.slot_override_uses_default[data.prefix] = true
end
end
for _, form in ipairs(retvals) do
if form.form == "-" then
data.base.slot_explicitly_missing[data.prefix] = true
break
end
end
if data.base.slot_explicitly_missing[data.prefix] then
for _, form in ipairs(retvals) do
if form.form ~= "-" then
data.parse_err(("For slot or stem '%s', saw both - and a value other than -, which isn't allowed"):
format(data.prefix))
end
end
return nil
end
return retvals
end
local function simple_choice(choices)
return function(separated_groups, data)
if #separated_groups > 1 then
data.parse_err("For spec '" .. data.prefix .. ":', only one value currently allowed")
end
if #separated_groups[1] > 1 then
data.parse_err("For spec '" .. data.prefix .. ":', no footnotes currently allowed")
end
local choice = separated_groups[1][1]
if not m_table.contains(choices, choice) then
data.parse_err("For spec '" .. data.prefix .. ":', saw value '" .. choice .. "' but expected one of '" ..
table.concat(choices, "،") .. "'")
end
return choice
end
end
for _, overridable_stem in ipairs {
"past",
"past_v",
"past_c",
"past_pass",
"past_pass_v",
"past_pass_c",
"nonpast",
"nonpast_v",
"nonpast_c",
"nonpast_pass",
"nonpast_pass_v",
"nonpast_pass_c",
"imp",
"imp_v",
"imp_c",
} do
overridable_stems[overridable_stem] = allow_multiple_values_for_override
end
overridable_stems.past_final_weak_vowel = simple_choice { "ay", "aw", "ī", "ū" }
overridable_stems.past_pass_final_weak_vowel = simple_choice { "ay", "aw", "ī", "ū" }
overridable_stems.nonpast_final_weak_vowel = simple_choice { "ā", "ī", "ū" }
overridable_stems.nonpast_pass_final_weak_vowel = simple_choice { "ā", "ī", "ū" }
-------------------------------------------------------------------------------
-- Utility functions --
-------------------------------------------------------------------------------
-- version of rsubn() that discards all but the first return value
local function rsub(term, foo, bar)
return (rsubn(term, foo, bar))
end
-- version of rsubn() that returns a 2nd argument boolean indicating whether a substitution was made.
local function rsubb(term, foo, bar)
local retval, nsubs = rsubn(term, foo, bar)
return retval, nsubs > 0
end
-- Concatenate one or more strings or form objects.
local function q(...)
local not_all_strings = debug_translit
local has_manual_translit = debug_translit
for i = 1, select("#", ...) do
local argt = select(i, ...)
if not argt then
error(("Internal error: Saw nil at index %s: %s"):format(i, dump({...})))
end
if type(argt) ~= "string" then
not_all_strings = true
if argt.translit then
has_manual_translit = true
break
end
end
end
if not not_all_strings then
-- just strings, concatenate directly
return table.concat({...})
end
local formvals = {}
local translit = has_manual_translit and {} or nil
local footnotes
for i = 1, select("#", ...) do
local argt = select(i, ...)
if type(argt) == "string" then
formvals[i] = argt
if has_manual_translit then
translit[i] = transliterate(argt)
end
else
formvals[i] = argt.form
if has_manual_translit then
translit[i] = argt.translit or transliterate(argt.form)
end
footnotes = iut.combine_footnotes(footnotes, argt.footnotes)
end
end
-- FIXME: Do we want to support other properties?
return {
form = table.concat(formvals),
translit = has_manual_translit and table.concat(translit) or nil,
footnotes = footnotes,
}
end
-- Return the formval associated with `rad` (a radical or past/non-past vowel, either a string or form object).
local function rget(rad)
if type(rad) == "string" then
return rad
elseif type(rad) == "table" then
return rad.form
else
error(("Internal error: Unexpected type for radical or past/non-past vowel: %s"):format(dump(rad)))
end
end
export.rget = rget -- for use in [[Module:ar-headword]]
-- Return the footnotes associated with `rad` (a radical or past/non-past vowel, either a string or form object).
local function rget_footnotes(rad)
if type(rad) == "string" then
return nil
elseif type(rad) == "table" then
return rad.footnotes
else
error(("Internal error: Unexpected type for radical or past/non-past vowel: %s"):format(dump(rad)))
end
end
-- Return true if the formval associated with `rad` (a radical or past/non-past vowel, either a string or form object)
-- is `val`.
local function req(rad, val)
return rget(rad) == val
end
-- True if a form-I verb whose first radical is wāw elides that wāw in the non-past (يَعِدُ for
-- *يَوْعِدُ) rather than keeping it (يَوْجَلُ). The elision belongs to the kasra non-past -- a~i
-- وَعَدَ يَعِدُ, i~i وَرِثَ يَرِثُ -- and to the fatḥa non-past that is a throat-letter lowering of
-- that same underlying kasra: a~a وَضَعَ يَضَعُ, وَهَبَ يَهَبُ. Everywhere else the wāw stays:
-- i~a وَجِلَ يَوْجَلُ، وَنِيَ يَوْنَى (a fatḥa non-past that is the regular partner of a kasra past,
-- not a lowered kasra)
-- *~u وَجَلَ يَوْجُلُ، وَجُهَ يَوْجُهُ (a ḍamma non-past is never a lowered kasra)
-- The two elided-anyway lexemes with a kasra past (وَسِعَ يَسَعُ, وَطِئَ يَطَأُ) are lexical and are
-- what the explicit `I-assimilated` weakness exists to express -- see the comment on it in
-- detect_indicator_spec().
--
-- The u-non-past half of this is attested directly: أنطوان الدحداح، معجم تصريف الأفعال العربية
-- prints يَوْجُلُ/اُوْجُلْ for وَجَلَ (ص136) and says so in the page's own note -- "لا تُحذَفُ واوُ
-- الفعلِ في المُضارعِ ولا تُقلَبُ في الأمرِ" -- and يَوْنَى/اِوْنَ for وَنِيَ (ص230).
--
-- Returns true when the vowels aren't known, which keeps the historical default for callers
-- that have radicals but no vowel pattern.
--W: Lexical exceptions to the rule below, keyed root..":"..past..nonpast so that a
-- listed verb is listed for the measure its source attests and no other. Both
-- directions occur and the vowels do not predict either:
--
-- وَطِئَ ـَ the i~a pattern normally keeps the wāw (وَجِلَ ـَ / يَوْجَلُ) and this
-- one drops it -- يَطَأُ, طَأْ, printed through both columns of نموذج ١٥٥.
-- Upstream's own commentary on this function names the verb: "there are
-- naturally exceptions, e.g. waṭiʔa~yaṭaʔu 'to tread, to trample'".
-- وَبَأَ ـَ the a~a pattern normally drops it (وَضَعَ / يَضَعُ) and this one keeps
-- it -- يَوْبَأُ, يَوْبَآنِ, يَوْبَؤُونَ, إِيبَأْ, printed through نموذج ١٣٥.
--
-- Same instrument as GEMINATE_ITBAA_ROOTS and for the same reason: the fact is about
-- the lexeme, so listing it is the only honest way to hold it, and listing keeps every
-- other root of the same shape exactly where it was.
local FORM_I_W_ASSIMILATION = {
["وطء:ia"] = true, -- وَطِئَ ـَ / يَطَأُ / طَأْ: الدحداح، نموذج ١٥٥
["وبء:aa"] = false, -- وَبَأَ ـَ / يَوْبَأُ / إِيبَأْ: الدحداح، نموذج ١٣٥
}
local function vowel_letter(v)
return req(v, A) and "a" or req(v, I) and "i" or req(v, U) and "u" or "?"
end
local function form_i_w_assimilated(past_vowel, nonpast_vowel, rad1, rad2, rad3)
if not past_vowel or not nonpast_vowel then
return true
end
if rad1 and rad2 and rad3 then
local listed = FORM_I_W_ASSIMILATION[rad1 .. rad2 .. rad3 .. ":" ..
vowel_letter(past_vowel) .. vowel_letter(nonpast_vowel)]
if listed ~= nil then
return listed
end
end
return req(nonpast_vowel, I) or req(nonpast_vowel, A) and req(past_vowel, A)
end
--W: Geminate form-I roots whose degemination vowel follows the مضارع by إتباع.
-- When gemination breaks under a consonant-initial suffix, the vowel that surfaces on the
-- second radical (مَدَدْتَ's second د) is normally the verb's own past vowel, which the وزن
-- fixes at one value per measure: فتح for فعَل يفعُل (مَدَدْتَ، فَرَرْتَ، عَضَضْتَ), كسر for
-- فعِل يفعَل (ظَلِلْتَ). Classical grammar also attests a minority إتباع variant on the
-- فعَل يفعُل measure, where that vowel instead follows the مضارع's own ضمة (هَمُمْتَ). Which
-- of the two a given verb takes is a fact about the lexeme, not about its وزن -- هَمَّ and
-- مَدَّ share the measure and differ here -- so it cannot be derived from جذر + وزن and is
-- listed, the same way SOUND_FORM_I_UU_ROOTS lists هَيُؤَ. Keyed rad1..rad2..rad3 and gated
-- on the a~u pattern, so a listed root still degeminates normally under any other pattern.
local GEMINATE_ITBAA_ROOTS = {
["همم"] = true, -- هَمَّ ـُ: أنطوان الدحداح، معجم تصريف الأفعال العربية، ص192
-- The Template-B page of the same model number, which prints two more of them:
["عشش"] = true, -- عَشَّ ـُ / عَشُشْتُ: الدحداح، نموذج ١٤١
["فكك"] = true, -- فَكَّ ـُ / فَكُكْتُ: الدحداح، نموذج ١٤١
}
-- The vowel that surfaces on the second radical of a geminate form-I verb once gemination
-- breaks. `past_vowel` unless the root is an attested إتباع lexeme; see GEMINATE_ITBAA_ROOTS.
local function geminate_degemination_vowel(rad1, rad2, rad3, past_vowel, nonpast_vowel)
if past_vowel and nonpast_vowel and req(past_vowel, A) and req(nonpast_vowel, U)
and GEMINATE_ITBAA_ROOTS[rad1 .. rad2 .. rad3] then
return nonpast_vowel
end
return past_vowel
end
--W: Form-I final-weak roots that keep rad3 as a consonant in the 2fs non-past and
-- imperative (تَسْهُوِينَ، اُسْهُوِي) instead of contracting it away (تَسْهِينَ، اِسْهِي).
--
-- This was briefly gated on the فعُل يفعُل measure alone, then narrowed to a root table,
-- then widened back to the measure -- and the middle step is why. The argument for the
-- measure was always that the measure is what keeps rad3 consonantal in the first place
-- (its past 3ms is سَهُوَ, not the سَها an a~u root like دَعَا gives), but at the time the
-- corpus held exactly one فعُل يفعُل final-weak page, so there was no second paradigm to
-- check it against and the rule it displaces -- contract before the 2fs -ī, as دَعَا does --
-- was the one the module had applied for years. Generalising an unverified reading over a
-- whole class of live entries is the wrong direction to be wrong in, so it went back to
-- listing سهو alone, keyed and gated exactly like SOUND_FORM_I_UU_ROOTS.
--
-- Checkpoint 4 supplied the second page, and it answers the question. p222 (model 147)
-- prints TWO فعُل يفعُل final-weak paradigms, حَلُوَ and سَرُوَ, and both retain rad3 in both
-- eligible slots: تَحْلُوِينَ / اُحْلُوِي and تَسْرُوِينَ / اُسْرُوِي, the wāw carrying its kasra
-- under it, all four read at 6x off the strip against the same columns' يَحْلُونَ / يَسْرُونَ.
-- Two independent roots, one page, agreeing with سهو on p204 -- and سَرُوَ is precisely the
-- root the narrowing had put back to تَسْرِينَ, so the cautious reading is the one the ink
-- refutes. So the gate is the vowel pattern after all and the table is gone.
local function final_weak_uu_retains_rad3(rad1, rad2, rad3, past_ending_vowel, nonpast_ending_vowel)
return past_ending_vowel == "ū" and nonpast_ending_vowel == "ū"
end
-- Map `vow` (a past/non-past vowel, either a string or form object without translit) by passing the formval through
-- `fn`. Don't call this on radicals because they may have manual translit and it isn't clear how to handle that.
local function map_vowel(vow, fn)
if type(vow) == "string" then
return fn(vow)
elseif type(vow) == "table" then
return {form = fn(vow.form), footnotes = vow.footnotes}
else
error(("Internal error: Unexpected type for past/non-past vowel: %s"):format(dump(vow)))
end
end
local function get_radicals_3(vowel_spec)
return vowel_spec.rad1, vowel_spec.rad2, vowel_spec.rad3, vowel_spec.past, vowel_spec.nonpast
end
local function get_radicals_4(vowel_spec)
return vowel_spec.rad1, vowel_spec.rad2, vowel_spec.rad3, vowel_spec.rad4
end
local function is_final_weak(base, vowel_spec)
return vowel_spec.weakness == "final-weak" or base.form == "XV"
end
--W: Create a simple link
local function link_term_simple(text)
return "[[" .. text .. "]]"
end
local function link_term(text, face, id)
return m_links.full_link({lang = lang, term = text, tr = "-", id = id}, face)
end
local function tag_text(text, tag, class)
return m_links.full_link({lang = lang, alt = text, tr = "-"})
end
local function track(page)
require("Module:debug/track")("ar-verb/" .. page)
return true
end
local function track_if_ar_conj(base, page)
if base.alternant_multiword_spec.source_template == "ar-conj" then
require("Module:debug/track")("ar-verb/" .. page)
end
return true
end
local function reorder_shadda(word)
-- shadda+short-vowel (including tanwīn vowels, i.e. -an -in -un) gets
-- replaced with short-vowel+shadda during NFC normalisation, which
-- MediaWiki does for all Unicode strings; however, it makes various
-- processes inconvenient, so undo it.
word = rsub(word, "(" .. DIACRITIC_ANY_BUT_SH .. ")" .. SH, SH .. "%1")
return word
end
local function apply_nfc_shadda(word)
-- Apply NFC-style normalization: reorder shadda+vowel to vowel+shadda
-- to match MediaWiki's automatic NFC normalization. This reverses the
-- internal shadda+vowel format used during processing.
word = rsub(word, SH .. "(" .. DIACRITIC_ANY_BUT_SH .. ")", "%1" .. SH)
return word
end
-------------------------------------------------------------------------------
-- Basic functions to inflect tenses --
-------------------------------------------------------------------------------
local function skip_slot(base, slot, allow_overrides)
if base.slot_explicitly_missing[slot] then
return true
end
if not allow_overrides and base.slot_overrides[slot] and not base.slot_override_uses_default[slot] then
-- Skip any slots for which there are overrides, except those that request the default value using +, ++, etc.
return true
end
if base.passive == "nopass" and (slot == "pp" or slot:find("_pass")) then
return true
elseif base.passive == "onlypass" and slot ~= "pp" and slot ~= "vn" and not slot:find("_pass") then
return true
elseif base.passive == "ipass" and slot:find("_pass") and not slot:find("3ms") then
return true
elseif base.passive == "onlypass-impers" and slot ~= "pp" and slot ~= "vn" and (not slot:find("_pass") or
slot:find("_pass") and not slot:find("3ms")) then
return true
end
if base.nopast and slot:find("^past_") then
return true
end
if base.noimp and slot:find("^imp_") then
return true
end
if base.no_nonpast and (slot:find("^ind_") or slot:find("^sub_") or slot:find("^juss")) then
return true
end
return false
end
local function basic_combine_stem_ending(stem, ending)
return stem .. ending
end
local function basic_combine_stem_ending_tr(stem, ending)
return stem .. ending
end
-- Concatenate `prefixes`, `stems` and `endings` (any of which may be an abbreviate form list, i.e. strings, form
-- objects or lists of strings or form objects) and store into `slot`. If a user-supplied override exists for the slot,
-- nothing will happen unless `allow_overrides` is provided.
local function add3(base, slot, prefixes, stems, endings, allow_overrides)
if skip_slot(base, slot, allow_overrides) then
return
end
-- Optimization since the prefixes are almost always single strings.
if type(prefixes) == "string" then
local function do_combine_stem_ending(stem, ending)
return prefixes .. stem .. ending
end
local function do_combine_stem_ending_tr(stem, ending)
return transliterate(prefixes) .. stem .. ending
end
iut.add_forms(base.forms, slot, stems, endings, do_combine_stem_ending, transliterate,
do_combine_stem_ending_tr, base.form_footnotes)
else
iut.add_multiple_forms(base.forms, slot, {prefixes, stems, endings}, basic_combine_stem_ending, transliterate,
basic_combine_stem_ending_tr, base.form_footnotes)
end
end
-- Insert one or more forms in `form_or_forms` into `slot`. `form_or_forms` is an abbreviated form list (see comment at
-- top of [[Module:inflection utilities]]). If a user-supplied override exists for the slot, nothing will happen unless
-- `allow_overrides` is provided. BEWARE: One form object should never occur in two different slots, or twice in a given
-- slot; if taking a form object from an existing slot, make sure to shallowCopy() it.
local function insert_form_or_forms(base, slot, form_or_forms, allow_overrides, uncertain)
if not skip_slot(base, slot, allow_overrides) then
-- Some optimizations of the most common case of inserting a single string.
if type(form_or_forms) == "string" and not base.form_footnotes then
form_or_forms = {form = form_or_forms, uncertain = uncertain}
iut.insert_form(base.forms, slot, form_or_forms)
else
local list = iut.convert_to_general_list_form(form_or_forms, base.form_footnotes)
if uncertain then
for _, formobj in ipairs(list) do
formobj.uncertain = true
end
end
iut.insert_forms(base.forms, slot, list)
end
end
end
-- Insert `string_or_form` into both the ap2 and pp2 slots, shallowCopying a form object to make sure no form objects
-- occur in two slots.
local function insert_ap2_pp2(base, string_or_form)
insert_form_or_forms(base, "ap2", string_or_form)
if type(string_or_form) == "table" then
string_or_form = m_table.shallowCopy(string_or_form)
end
insert_form_or_forms(base, "pp2", string_or_form)
end
-- Convert `stemforms` (a string, a form object, or a list of strings and/or form objects) into "general form" (a list
-- of form objects) and map `fn` over the list of objects. `fn` is passed two arguments (form value and translit) and
-- should likewise return the new form value and translit. Footnotes will be preserved. FIXME: Preserve other metadata.
local function map_general(stemforms, fn)
return iut.map_forms(iut.convert_to_general_list_form(stemforms), fn)
end
-- Similar to map_general() except that `fn` should return a single value (one or more strings or form objects), instead
-- of two values (form value and translit), and the resulting value(s) from all calls to `fn` will be flattened to
-- construct the overall return value. Footnotes will be preserved. FIXME: Preserve other metadata.
local function flatmap_general(stemforms, fn)
return iut.flatmap_forms(iut.convert_to_general_list_form(stemforms), fn)
end
-- Given user-supplied stem overrides in `base`, construct any derived stem overrides (e.g. vowel-specific or
-- consonant-specific variants), and truncate initial y-/ي- in any non-past overrides.
local function construct_stems(base)
local stems = base.stem_overrides
stems.past_v = stems.past_v or stems.past
stems.past_c = stems.past_c or stems.past
stems.past_pass_v = stems.past_pass_v or stems.past_pass
stems.past_pass_c = stems.past_pass_c or stems.past_pass
stems.nonpast_v = stems.nonpast_v or stems.nonpast
stems.nonpast_c = stems.nonpast_c or stems.nonpast
stems.nonpast_pass_v = stems.nonpast_pass_v or stems.nonpast_pass
stems.nonpast_pass_c = stems.nonpast_pass_c or stems.nonpast_pass
stems.imp_v = stems.imp_v or stems.imp
stems.imp_c = stems.imp_c or stems.imp
local function truncate_nonpast_initial_cons(stem_type, form, translit)
if form == "+" then
return form, translit
end
if not form:find("^" .. Y) then
error(("Form value %s for stem type '%s' should begin with ي"):format(form, stem_type))
end
form = form:gsub("^" .. Y, "")
if translit then
if not translit:find("^y") then
error(("Translit value %s for stem type '%s' should begin with y"):format(translit, stem_type))
end
translit = translit:gsub("^y", "")
end
return form, translit
end
for _, nonpast_stem_type in ipairs { "nonpast_v", "nonpast_c", "nonpast_pass_v", "nonpast_pass_c" } do
if stems[nonpast_stem_type] then
stems[nonpast_stem_type] = map_general(stems[nonpast_stem_type], function(form, translit)
return truncate_nonpast_initial_cons(nonpast_stem_type, form, translit)
end)
end
end
end
-- Given user-specified overrides for stem `stemname`, return overrides with occurrences of + replaced by
-- `default_stem`. If no overrides, return `default_stem`, or {} if no default.
local function override_stem_if_needed(base, stemname, default_stem)
local overrides = base.stem_overrides[stemname]
if not overrides then
return default_stem or {}
end
return map_general(overrides, function(form, translit)
if form ~= "+" and default_indicator_to_active_participle_slot[form] then
error(("Stem overrides cannot use secondary default indicators but saw %s in stem override '%s'"):format(
form, stemname))
end
if form == "+" then
if translit then
error(("Cannot supply manual translit along with + for stem override '%s'"):format(stemname))
end
if not default_stem then
error(("Cannot use + for stem override '%s' because no default is available"):format(stemname))
end
if type(default_stem) ~= "string" then
error(("Internal error: Default stem for '%s' is not a string: %s"):format(stemname, dump(default_stem)))
end
return default_stem
end
return form, translit
end)
end
-------------------------------------------------------------------------------
-- Properties of different verbal forms --
-------------------------------------------------------------------------------
local allowed_vforms = {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX",
"X", "XI", "XII", "XIII", "XIV", "XV", "Iq", "IIq", "IIIq", "IVq"}
local allowed_vforms_set = m_table.listToSet(allowed_vforms)
local allowed_vforms_with_weakness = m_table.shallowCopy(allowed_vforms)
-- The user needs to be able to explicitly specify that a form-I verb (specifically one whose initial radical is و) is
-- sound. Cf. wajiʕa yawjaʕu (not #yajaʕu) "to ache, to hurt". In general, i~a and u~u verbs whose initial radical is و
-- seem to not assimilate the first radical; cf. وقح "to be shameless", variously waqaḥa~yaqiḥu, waquḥa~yawquḥu and
-- waqiḥa~yawqaḥu, whereas a~i verbs (wafaḍa~yafiḍu "to rush"), i~i verbs (wafiqa~yafiqu "to be proper, to be suitable")
-- and a~a verbs (waḍaʕa~yaḍaʕu "to set down, to place") do assimilate. But there are naturally exceptions, e.g.
-- waṭiʔa~yaṭaʔu "to tread, to trample"; wasiʕa~yasaʕu "to be spacious; to be well-off"; waṯiʔa~yaṯaʔu "to get bruised,
-- to be sprained". Also beware of waniya~yawnā "to be faint; to languish", which is sound in the first radical and
-- final-weak in the last radical. Nonetheless, the regularity of the patterns mentioned above suggest we should provide
-- them as defaults.
-- Note that there are other cases of unexpectedly sound verbs, e.g. izdawaja~yazdawiju "to be in pairs", layisa~yalyasu
-- "to be valiant, to be brave", ʔaḥwaja~yuḥwiju "to need", istahwana~yastahwinu "to consider easy", sawisa~yaswasu "to
-- be or become moth-eaten or worm-eaten" (vs. sāsa~yasūsu "to govern, to rule" from the same radicals), ʕawira~yaʕwaru
-- "to be one-eyed", istajwaba~yastajwibu "to interrogate", etc. But in these cases there is no need for explicit user
-- specification as the lemma itself specifies the unexpected soundness.
for _, form_with_weakness in ipairs { "I-sound", "I-assimilated", "none-sound", "none-hollow", "none-geminate",
"none-final-weak" } do
table.insert(allowed_vforms_with_weakness, form_with_weakness)
end
local allowed_vforms_with_weakness_set = m_table.listToSet(allowed_vforms_with_weakness)
local function vform_supports_final_weak(vform)
return vform ~= "XI" and vform ~= "XV" and vform ~= "IVq"
end
local function vform_supports_geminate(vform)
return vform == "I" or vform == "III" or vform == "IV" or vform == "VI" or vform == "VII" or vform == "VIII" or
vform == "X"
end
local function vform_supports_hollow(vform)
return vform == "I" or vform == "IV" or vform == "VII" or vform == "VIII" or vform == "X"
end
local function vform_probably_impersonal_passive(vform, weakness, past_vowel, nonpast_vowel)
return vform == "I" and req(past_vowel, I) or vform == "V" or vform == "VI" or vform == "X" or vform == "IIq"
end
local function vform_probably_full_passive(vform)
return vform == "II" or vform == "III" or vform == "IV" or vform == "Iq"
end
local function vform_probably_no_passive(vform, weakness, past_vowel, nonpast_vowel)
return vform == "I" and req(past_vowel, U) or vform == "VII" or vform == "IX" or
vform == "XI" or vform == "XII" or vform == "XIII" or vform == "XIV" or vform == "XV" or
vform == "IIIq" or vform == "IVq"
end
-- Active vforms II, III, IV, Iq use non-past prefixes in -u- instead of -a-.
local function prefix_vowel_from_vform(vform)
if vform == "II" or vform == "III" or vform == "IV" or vform == "Iq" then
return "u"
else
return "a"
end
end
-- True if the active non-past takes a-vocalization rather than i-vocalization in its last syllable.
local function vform_nonpast_a_vowel(vform)
return vform == "V" or vform == "VI" or vform == "XV" or vform == "IIq"
end
-- True if the `passive` spec indicates a passive-only verb.
local function is_passive_only(passive)
return passive == "onlypass" or passive == "onlypass-impers"
end
export.is_passive_only = is_passive_only -- for use in [[Module:ar-headword]]
-------------------------------------------------------------------------------
-- Properties of specific sounds --
-------------------------------------------------------------------------------
-- Is radical wāw (و) or yāʾ (ي)?
local function is_waw_ya(rad)
return req(rad, W) or req(rad, Y)
end
-- Check that radical is wāw (و) or yāʾ (ي), error if not
local function check_waw_ya(rad)
if not is_waw_ya(rad) then
error("Expecting weak radical: '" .. rget(rad) .. "' should be " .. W .. " or " .. Y)
end
end
-- Form-I verb حيّ or حيي and form-X verb استحيا or استحى
local function hayy_radicals(rad1, rad2, rad3)
return req(rad1, "ح") and req(rad2, Y) and is_waw_ya(rad3)
end
-- FUCK ME HARD. "Lua error at line 1514: main function has more than 200 local variables".
local function create_conjugations()
-------------------------------------------------------------------------------
-- Radicals associated with various irregular verbs --
-------------------------------------------------------------------------------
-- Form-I verb أخذ or form-VIII verb اتخذ
local function axadh_radicals(rad1, rad2, rad3)
return req(rad1, HAMZA) and req(rad2, "خ") and req(rad3, "ذ")
end
-- Form-I verb whose imperative has a reduced form: أكل and أخذ and أمر. Return "shortonly" if only
-- short-form imperatives exist (أكل and أخذ) or "shortlong" if long-form imperatives also exist (أمر);
-- they are used after a clitic like فَ and وَ.
local function reduced_imperative_verb(rad1, rad2, rad3)
return axadh_radicals(rad1, rad2, rad3) and "shortonly" or
req(rad1, HAMZA) and req(rad2, "ك") and req(rad3, "ل") and "shortonly" or
req(rad1, HAMZA) and req(rad2, "م") and req(rad3, "ر") and "shortlong"
end
-- Form-I verb رأى and form-IV verb أرى
local function raa_radicals(rad1, rad2, rad3)
return req(rad1, "ر") and req(rad2, HAMZA) and is_waw_ya(rad3)
end
-- Form-I verb سأل
local function saal_radicals(rad1, rad2, rad3)
return req(rad1, "س") and req(rad2, HAMZA) and req(rad3, "ل")
end
-- Form-I verb كان
local function kaan_radicals(rad1, rad2, rad3)
return req(rad1, "ك") and req(rad2, W) and req(rad3, N)
end
-------------------------------------------------------------------------------
-- Sets of past endings --
-------------------------------------------------------------------------------
-- The 13 endings of the sound/hollow/geminate past tense.
local past_endings = {
-- singular
SK .. TU, SK .. TA, SK .. "تِ", A, A .. "تْ",
--dual
SK .. "تُمَا", AA, A .. "تَا",
-- plural
SK .. "نَا", SK .. "تُمْ",
-- shadda + vowel diacritic ends up in the wrong order due to Unicode
-- bug, so keep them separate to avoid this
SK .. "تُن" .. SH .. A, UU .. ALIF, SK .. "نَ"
}
-- Make endings for final-weak past in -aytu or -awtu. AYAW is AY or AW as appropriate. Note that AA and AW are
-- global variables.
local function make_past_endings_ay_aw(ayaw, third_sg_masc)
return {
-- singular
ayaw .. SK .. TU, ayaw .. SK .. TA, ayaw .. SK .. "تِ",
third_sg_masc, A .. "تْ",
--dual
ayaw .. SK .. "تُمَا", ayaw .. AA, A .. "تَا",
-- plural
ayaw .. SK .. "نَا", ayaw .. SK .. "تُمْ",
-- shadda + vowel diacritic ends up in the wrong order due to Unicode
-- bug, so keep them separate to avoid this
ayaw .. SK .. "تُن" .. SH .. A, AW .. SK .. ALIF, ayaw .. SK .. "نَ"
}
end
-- past final-weak -aytu endings
local past_endings_ay = make_past_endings_ay_aw(AY, AAMAQ)
-- past final-weak -awtu endings
local past_endings_aw = make_past_endings_ay_aw(AW, AA)
-- used for alternative endings for form-X geminate verbs like اِسْتَمَرَّ
local past_endings_ay_12_person_only = {
-- singular
AY .. SK .. TU, AY .. SK .. TA, AY .. SK .. "تِ",
{}, {},
--dual
AY .. SK .. "تُمَا", {}, {},
-- plural
AY .. SK .. "نَا", AY .. SK .. "تُمْ",
-- shadda + vowel diacritic ends up in the wrong order due to Unicode
-- bug, so keep them separate to avoid this
AY .. SK .. "تُن" .. SH .. A, {}, {},
}
-- Make endings for final-weak past in -ītu or -ūtu. IIUU is ī or ū as appropriate. Note that AA and UU are global
-- variables.
local function make_past_endings_ii_uu(iiuu)
return {
-- singular
iiuu .. TU, iiuu .. TA, iiuu .. "تِ", iiuu .. A, iiuu .. A .. "تْ",
--dual
iiuu .. "تُمَا", iiuu .. AA, iiuu .. A .. "تَا",
-- plural
iiuu .. "نَا", iiuu .. "تُمْ",
-- shadda + vowel diacritic ends up in the wrong order due to Unicode
-- bug, so keep them separate to avoid this
iiuu .. "تُن" .. SH .. A, UU .. ALIF, iiuu .. "نَ"
}
end
-- past final-weak -ītu endings
local past_endings_ii = make_past_endings_ii_uu(II)
-- past final-weak -ūtu endings
local past_endings_uu = make_past_endings_ii_uu(UU)
-------------------------------------------------------------------------------
-- Sets of non-past prefixes and endings --
-------------------------------------------------------------------------------
local nonpast_prefix_consonants = {
-- singular
HAMZA, T, T, Y, T,
-- dual
T, Y, T,
-- plural
N, T, T, Y, Y
}
-- There are only five distinct endings in all non-past verbs. Make any set of non-past endings given these five
-- distinct endings.
local function make_nonpast_endings(null, fem, dual, pl, fempl)
return {
-- singular
null, null, fem, null, null,
-- dual
dual, dual, dual,
-- plural
null, pl, fempl, pl, fempl
}
end
-- endings for non-past indicative
local ind_endings = make_nonpast_endings(
U,
II .. NA,
AANI,
UU .. NA,
SK .. NA
)
-- Make the endings for non-past subjunctive/jussive, given the vowel diacritic used in "null" endings
-- (1s/2ms/3ms/3fs/1p).
local function make_sub_juss_endings(dia_null)
return make_nonpast_endings(
dia_null,
II,
AA,
UU .. ALIF,
SK .. NA
)
end
-- endings for non-past subjunctive
local sub_endings = make_sub_juss_endings(A)
-- endings for non-past jussive
local juss_endings = make_sub_juss_endings(SK)
-- endings for alternative geminate non-past jussive in -a; same as subjunctive
local juss_endings_alt_a = sub_endings
-- endings for alternative geminate non-past jussive in -i
local juss_endings_alt_i = make_sub_juss_endings(I)
-- Endings for final-weak non-past indicative in -ā. Note that AY, AW and AAMAQ are global variables.
local ind_endings_aa = make_nonpast_endings(
AAMAQ,
AYSK .. NA,
AY .. AANI,
AWSK .. NA,
AYSK .. NA
)
-- Make endings for final-weak non-past indicative in -ī or -ū; IIUU is ī or ū as appropriate. Note that II and UU
-- are global variables.
local function make_ind_endings_ii_uu(iiuu)
return make_nonpast_endings(
iiuu,
II .. NA,
iiuu .. AANI,
UU .. NA,
iiuu .. NA
)
end
-- endings for final-weak non-past indicative in -ī
local ind_endings_ii = make_ind_endings_ii_uu(II)
-- endings for final-weak non-past indicative in -ū
local ind_endings_uu = make_ind_endings_ii_uu(UU)
-- Endings for final-weak non-past subjunctive in -ā. Note that AY, AW, ALIF, AAMAQ are global variables.
local sub_endings_aa = make_nonpast_endings(
AAMAQ,
AYSK,
AY .. AA,
AWSK .. ALIF,
AYSK .. NA
)
-- Make endings for final-weak non-past subjunctive in -ī or -ū. IIUU is ī or ū as appropriate. Note that AA, II,
-- UU, ALIF are global variables.
local function make_sub_endings_ii_uu(iiuu)
return make_nonpast_endings(
iiuu .. A,
II,
iiuu .. AA,
UU .. ALIF,
iiuu .. NA
)
end
-- endings for final-weak non-past subjunctive in -ī
local sub_endings_ii = make_sub_endings_ii_uu(II)
-- endings for final-weak non-past subjunctive in -ū
local sub_endings_uu = make_sub_endings_ii_uu(UU)
-- endings for final-weak non-past jussive in -ā
local juss_endings_aa = make_nonpast_endings(
A,
AYSK,
AY .. AA,
AWSK .. ALIF,
AYSK .. NA
)
-- Make endings for final-weak non-past jussive in -ī or -ū. IU is short i or u, IIUU is long ī or ū as appropriate.
-- Note that AA, II, UU, ALIF are global variables.
local function make_juss_endings_ii_uu(iu, iiuu)
return make_nonpast_endings(
iu,
II,
iiuu .. AA,
UU .. ALIF,
iiuu .. NA
)
end
-- endings for final-weak non-past jussive in -ī
local juss_endings_ii = make_juss_endings_ii_uu(I, II)
-- endings for final-weak non-past jussive in -ū
local juss_endings_uu = make_juss_endings_ii_uu(U, UU)
-------------------------------------------------------------------------------
-- Sets of imperative endings --
-------------------------------------------------------------------------------
-- Extract the second person jussive endings to get corresponding imperative endings.
local function imperative_endings_from_jussive(endings)
return {endings[2], endings[3], endings[6], endings[10], endings[11]}
end
-- normal imperative endings
local imp_endings = imperative_endings_from_jussive(juss_endings)
-- alternative geminate imperative endings in -a
local imp_endings_alt_a = imperative_endings_from_jussive(juss_endings_alt_a)
-- alternative geminate imperative endings in -i
local imp_endings_alt_i = imperative_endings_from_jussive(juss_endings_alt_i)
-- final-weak imperative endings in -ā
local imp_endings_aa = imperative_endings_from_jussive(juss_endings_aa)
-- final-weak imperative endings in -ī
local imp_endings_ii = imperative_endings_from_jussive(juss_endings_ii)
-- final-weak imperative endings in -ū
local imp_endings_uu = imperative_endings_from_jussive(juss_endings_uu)
-------------------------------------------------------------------------------
-- Basic functions to inflect tenses --
-------------------------------------------------------------------------------
-- Add to `base` the inflections for the tense indicated by `tense` (the prefix in the slot names, e.g. 'past'
-- or 'juss_pass'), formed by combining the `prefixes`, `stems` and `endings`. Each of `prefixes`, `stems` and
-- `endings` is either a sequence of 5 (for the imperative) or 13 (for other tenses) abbreviated form lists (each of
-- which is either a string, a form object, or a list of strings and/or form objects; see
-- [[Module:inflection utilities]] for more info). Alternatively, any of `prefixes`, `stems` or `endings` can be a
-- single-element list containing an abbreviated form list, with an additional key `all_same` set to true, or (as a
-- special case) a single string; in the latter cases, the same value is used for all 5 or 13 slots. If existing
-- inflections already exist, they will be added to, not overridden. `pnums` is the list of person/number slot name
-- suffixes, which must match up with the elements in `prefixes`, `stems` and `endings` (i.e. 5 for imperative, 13
-- otherwise).
local function inflect_tense_1(base, tense, prefixes, stems, endings, pnums)
if not prefixes or not stems or not endings then
return
end
local function verify_affixes(affixname, affixes)
local function interr(msg)
error(("Internal error: For tense '%s', '%s' %s: %s"):format(tense, affixname, msg, dump(affixes)))
end
if type(affixes) == "string" then
-- do nothing
elseif type(affixes) ~= "table" then
interr("is not a table or string")
elseif affixes.all_same then
if #affixes ~= 1 then
interr(("with all_same = true should have length 1 but has length %s"):format(#affixes))
end
else
if #affixes ~= #pnums then
interr(("should have length %s but has length %s"):format(#pnums, #affixes))
end
end
end
verify_affixes("prefixes", prefixes)
verify_affixes("stems", stems)
verify_affixes("endings", endings)
local function get_affix(affixes, i)
if type(affixes) == "string" then
return affixes
elseif affixes.all_same then
return affixes[1]
else
return affixes[i]
end
end
for i, pnum in ipairs(pnums) do
local prefix = get_affix(prefixes, i)
local stem = get_affix(stems, i)
local ending = get_affix(endings, i)
local slot = tense .. "_" .. pnum
add3(base, slot, prefix, stem, ending)
end
end
-- Add to `base` the inflections for the tense indicated by `tense` (the prefix in the slot names, e.g. 'past'
-- or 'juss_pass'), formed by combining the `prefixes`, `stems` and `endings`. This is a simple wrapper around
-- inflect_tense_1() that applies to all tenses other than the imperative; see inflect_tense_1() for more
-- information about the parameters.
local function inflect_tense(base, tense, prefixes, stems, endings)
inflect_tense_1(base, tense, prefixes, stems, endings, all_person_number_list)
end
-- Like inflect_tense() but for the imperative, which has only five parts instead of 13 and no prefixes.
local function inflect_tense_imp(base, stems, endings)
inflect_tense_1(base, "imp", "", stems, endings, imp_person_number_list)
end
-------------------------------------------------------------------------------
-- Functions to inflect the past tense --
-------------------------------------------------------------------------------
-- Generate past verbs using specified vowel and consonant stems; works for sound, assimilated, hollow, and geminate
-- verbs, active and passive.
local function past_2stem_conj(base, tense, v_stem, c_stem, footnote_12)
local passive = tense:find("_pass") and "_pass" or ""
-- Override stems with user-specified stems if available.
v_stem = override_stem_if_needed(base, "past" .. passive .. "_v", v_stem)
local c_stem_12 = c_stem
if footnote_12 then
c_stem_12 = iut.combine_form_and_footnotes(c_stem_12, footnote_12)
end
c_stem_12 = override_stem_if_needed(base, "past" .. passive .. "_c", c_stem_12)
local c_stem_3 = override_stem_if_needed(base, "past" .. passive .. "_c", c_stem)
inflect_tense(base, tense, "", {
-- singular
c_stem_12, c_stem_12, c_stem_12, v_stem, v_stem,
--dual
c_stem_12, v_stem, v_stem,
-- plural
c_stem_12, c_stem_12, c_stem_12, v_stem, c_stem_3
}, past_endings)
end
-- Generate past verbs using single specified stem; works for sound and assimilated verbs, active and passive.
local function past_1stem_conj(base, tense, stem)
past_2stem_conj(base, tense, stem, stem)
end
-------------------------------------------------------------------------------
-- Functions to inflect non-past tenses --
-------------------------------------------------------------------------------
-- Generate non-past conjugation, with two stems, for vowel-initial and consonant-initial endings, respectively.
-- Useful for active and passive; for all forms; for all weaknesses (sound, assimilated, hollow, final-weak and
-- geminate) and for all types of non-past (indicative, subjunctive, jussive) except for the imperative. (There is a
-- separate wrapper function below for geminate jussives because they have three alternants.) Both stems may be the
-- same, e.g. for sound verbs.
-- `prefix_vowel` will be either "a" or "u". `endings` should be an array of 13 items. If `endings` is nil or
-- omitted, infer the endings from the tense. If `jussive` is true, or `endings` is nil and `tense` indicatives
-- jussive, use the jussive pattern of vowel/consonant stems (different from the normal ones).
local function nonpast_2stem_conj(base, tense, prefix_vowel, v_stem, c_stem, endings, jussive)
local passive = tense:find("_pass") and "_pass" or ""
-- Override stems with user-specified stems if available.
v_stem = override_stem_if_needed(base, "nonpast" .. passive .. "_v",
v_stem and q(dia[prefix_vowel], v_stem) or nil)
c_stem = override_stem_if_needed(base, "nonpast" .. passive .. "_c",
c_stem and q(dia[prefix_vowel], c_stem) or nil)
if not endings then
if tense:find("^ind") then
endings = ind_endings
elseif tense:find("^sub") then
endings = sub_endings
elseif tense:find("^juss") then
jussive = true
endings = juss_endings
else
error("Internal error: Unrecognized tense '" .. tense .."'")
end
end
if not jussive then
inflect_tense(base, tense, nonpast_prefix_consonants, {
-- singular
v_stem, v_stem, v_stem, v_stem, v_stem,
--dual
v_stem, v_stem, v_stem,
-- plural
v_stem, v_stem, c_stem, v_stem, c_stem
}, endings)
else
inflect_tense(base, tense, nonpast_prefix_consonants, {
-- singular
-- 'adlul, tadlul, tadullī, yadlul, tadlul
c_stem, c_stem, v_stem, c_stem, c_stem,
--dual
-- tadullā, yadullā, tadullā
v_stem, v_stem, v_stem,
-- plural
-- nadlul, tadullū, tadlulna, yadullū, yadlulna
c_stem, v_stem, c_stem, v_stem, c_stem
}, endings)
end
end
-- Generate non-past conjugation with one stem (no distinct stems for vowel-initial and consonant-initial endings).
-- See nonpast_2stem_conj().
local function nonpast_1stem_conj(base, tense, prefix_vowel, stem, endings, jussive)
nonpast_2stem_conj(base, tense, prefix_vowel, stem, stem, endings, jussive)
end
-- Generate active/passive jussive geminative. There are three alternants, two with terminations -a and -i and one
-- in a null termination with a distinct pattern of vowel/consonant stem usage. See nonpast_2stem_conj() for a
-- description of the arguments.
local function jussive_gem_conj(base, tense, prefix_vowel, v_stem, c_stem)
-- alternative in -a
nonpast_2stem_conj(base, tense, prefix_vowel, v_stem, c_stem, juss_endings_alt_a)
-- alternative in -i
nonpast_2stem_conj(base, tense, prefix_vowel, v_stem, c_stem, juss_endings_alt_i)
-- alternative in -null; requires different combination of v_stem and
-- c_stem since the null endings require the c_stem (e.g. "tadlul" here)
-- whereas the corresponding endings above in -a or -i require the v_stem
-- (e.g. "tadulla, tadulli" above)
nonpast_2stem_conj(base, tense, prefix_vowel, v_stem, c_stem, juss_endings, "jussive")
end
-------------------------------------------------------------------------------
-- Functions to inflect the imperative --
-------------------------------------------------------------------------------
-- Generate imperative conjugation, with two stems, for vowel-initial and consonant-initial endings, respectively.
-- Useful for all forms, and for all weaknesses other than final-weak. Note that the two stems may be the same
-- (specifically for sound and assimilated verbs). If `endings` is nil or omitted, use `imp_endings`. If `alt_gem`
-- is specified, use the pattern of vowel and consonant stems appropriate for the alternative geminate imperatives
-- that use a null ending of -a or -i instead of an empty ending.
local function make_2stem_imperative(base, v_stem, c_stem, endings, alt_gem)
endings = endings or imp_endings
-- Override stems with user-specified stems if available.
v_stem = override_stem_if_needed(base, "imp_v", v_stem)
c_stem = override_stem_if_needed(base, "imp_c", c_stem)
if alt_gem then
inflect_tense_imp(base, {v_stem, v_stem, v_stem, v_stem, c_stem}, endings)
else
inflect_tense_imp(base, {c_stem, v_stem, v_stem, v_stem, c_stem}, endings)
end
end
-- Generate imperative parts for sound or assimilated verbs.
local function make_1stem_imperative(base, stem)
make_2stem_imperative(base, stem, stem)
end
-- Generate imperative parts for geminate verbs form I (also IV, VII, VIII, X).
local function make_gem_imperative(base, v_stem, c_stem)
make_2stem_imperative(base, v_stem, c_stem, imp_endings_alt_a, "alt gem")
make_2stem_imperative(base, v_stem, c_stem, imp_endings_alt_i, "alt gem")
make_2stem_imperative(base, v_stem, c_stem)
end
-------------------------------------------------------------------------------
-- Functions to inflect entire verbs --
-------------------------------------------------------------------------------
-- Generate finite parts of a sound verb (also works for assimilated verbs) from five stems (past and non-past,
-- active and passive, plus imperative) plus the prefix vowel in the active non-past ("a" or "u").
local function make_sound_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem, imp_stem,
prefix_vowel)
past_1stem_conj(base, "past", past_stem)
past_1stem_conj(base, "past_pass", past_pass_stem)
nonpast_1stem_conj(base, "ind", prefix_vowel, nonpast_stem)
nonpast_1stem_conj(base, "sub", prefix_vowel, nonpast_stem)
nonpast_1stem_conj(base, "juss", prefix_vowel, nonpast_stem)
nonpast_1stem_conj(base, "ind_pass", "u", nonpast_pass_stem)
nonpast_1stem_conj(base, "sub_pass", "u", nonpast_pass_stem)
nonpast_1stem_conj(base, "juss_pass", "u", nonpast_pass_stem)
make_1stem_imperative(base, imp_stem)
end
local function past_final_weak_endings_from_vowel(vowel)
if vowel == "ay" then
return past_endings_ay
elseif vowel == "aw" then
return past_endings_aw
elseif vowel == "ī" then
return past_endings_ii
elseif vowel == "ū" then
return past_endings_uu
elseif not vowel then
return nil
else
error(("Internal error: Unrecognized past final-weak vowel spec '%s'"):format(vowel))
end
end
local function nonpast_final_weak_endings_from_vowel(vowel)
if vowel == "ā" then
return ind_endings_aa, sub_endings_aa, juss_endings_aa, imp_endings_aa
elseif vowel == "ī" then
return ind_endings_ii, sub_endings_ii, juss_endings_ii, imp_endings_ii
elseif vowel == "ū" then
return ind_endings_uu, sub_endings_uu, juss_endings_uu, imp_endings_uu
elseif not vowel then
return nil
else
error(("Internal error: Unrecognized non-past final-weak vowel spec '%s'"):format(vowel))
end
end
-- Generate finite parts of a final-weak verb from five stems (past and non-past, active and passive, plus
-- imperative), the past active ending vowel (ay, aw, ī or ū), the non-past active ending vowel (ā, ī or ū) and the
-- prefix vowel in the active non-past (a or u). All five imperative persons share `imp_stem`, so the
-- hamzat wasl carries the verb's own vowel class throughout -- اُدْعُ and اُدْعِي alike. The 2fs used to
-- take a kasra one of its own (finding #5, now #11): its ending is -ī regardless of vowel class, so the
-- stem vowel surfaces as a kasra there, and #5 read that as pulling the hamza with it. The book prints
-- the ḍamma -- اُدْعِي (p.141), اُعْلِي and اُغْزِي (p159) -- so the surfacing kasra is عارض and leaves the
-- hamza alone, exactly as the ḍamma of اِمْشُوا leaves it alone in the mirror case.
--
-- `retain_rad3_2fs`, if true, keeps rad3 as a consonant before that -ī instead of letting it
-- contract away: تَسْهُوِينَ / اُسْهُوِي rather than تَسْهِينَ / اِسْهِي. See README "Findings" #8
-- and final_weak_uu_retains_rad3().
local function make_final_weak_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem, imp_stem,
past_ending_vowel, nonpast_ending_vowel, prefix_vowel, retain_rad3_2fs)
past_stem = override_stem_if_needed(base, "past", past_stem)
past_pass_stem = override_stem_if_needed(base, "past_pass", past_pass_stem)
-- Don't call override_stem_if_needed() here for non-past stems; it's called in nonpast_2stem_conj().
imp_stem = override_stem_if_needed(base, "imp", imp_stem)
-- + not supported for ending vowel overrides
past_ending_vowel = base.stem_overrides.past_final_weak_vowel or past_ending_vowel
local past_pass_ending_vowel = base.stem_overrides.past_pass_final_weak_vowel or "ī"
nonpast_ending_vowel = base.stem_overrides.nonpast_final_weak_vowel or nonpast_ending_vowel
local nonpast_pass_ending_vowel = base.stem_overrides.nonpast_pass_final_weak_vowel or "ā"
local past_endings = past_final_weak_endings_from_vowel(past_ending_vowel)
local past_pass_endings = past_final_weak_endings_from_vowel(past_pass_ending_vowel)
local ind_endings, sub_endings, juss_endings, imp_endings =
nonpast_final_weak_endings_from_vowel(nonpast_ending_vowel)
local ind_pass_endings, sub_pass_endings, juss_pass_endings =
nonpast_final_weak_endings_from_vowel(nonpast_pass_ending_vowel)
if retain_rad3_2fs then
-- rad3 surfaces as a consonant carrying the class's own ḍamma, then the regular -ī:
-- سْهـ + ُوِينَ, not سْهـ + ِينَ. The 2fs sits at index 3 of a make_nonpast_endings()
-- table (`fem`) and at index 2 of the five imperative endings that
-- imperative_endings_from_jussive() extracts from it. Copied rather than mutated --
-- these ending tables are module-level constants shared by every final-weak verb.
-- Written out inline, not via a helper: create_conjugations() is at Lua's 60-upvalue
-- ceiling, and one more captured local stops the module loading at all.
local function set_2fs(endings, index, ending)
local out = {}
for i, v in ipairs(endings) do out[i] = v end
out[index] = ending
return out
end
ind_endings = set_2fs(ind_endings, 3, UU .. II .. NA)
sub_endings = set_2fs(sub_endings, 3, UU .. II)
juss_endings = set_2fs(juss_endings, 3, UU .. II)
imp_endings = set_2fs(imp_endings, 2, UU .. II)
end
inflect_tense(base, "past", "", {past_stem, all_same = 1}, past_endings)
inflect_tense(base, "past_pass", "", {past_pass_stem, all_same = 1}, past_pass_endings)
nonpast_1stem_conj(base, "ind", prefix_vowel, nonpast_stem, ind_endings)
nonpast_1stem_conj(base, "sub", prefix_vowel, nonpast_stem, sub_endings)
nonpast_1stem_conj(base, "juss", prefix_vowel, nonpast_stem, juss_endings)
nonpast_1stem_conj(base, "ind_pass", "u", nonpast_pass_stem, ind_pass_endings)
nonpast_1stem_conj(base, "sub_pass", "u", nonpast_pass_stem, sub_pass_endings)
nonpast_1stem_conj(base, "juss_pass", "u", nonpast_pass_stem, juss_pass_endings)
inflect_tense_imp(base, {imp_stem, all_same = 1}, imp_endings)
end
-- Generate finite parts of an augmented (form II+) final-weak verb from five stems (past and non-past, active and
-- passive, plus imperative) plus the prefix vowel in the active non-past ("a" or "u") and a flag indicating if it
-- behaves like a form V/VI verb in taking non-past endings in -ā instead of -ī.
local function make_augmented_final_weak_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem,
imp_stem, prefix_vowel, form56)
make_final_weak_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem, imp_stem, "ay",
form56 and "ā" or "ī", prefix_vowel)
end
-- Generate finite parts of an augmented (form II+) sound or final-weak verb, given:
-- * `base` (conjugation data structure);
-- * `vowel_spec` (radicals, weakness);
-- * `past_stem_base` (active past stem minus last syllable (= -al or -ā));
-- * `nonpast_stem_base` (non-past stem minus last syllable (= -al/-il or -ā/-ī);
-- * `past_pass_stem_base` (passive past stem minus last syllable (= -il or -ī));
-- * `vn` (verbal noun).
local function make_augmented_sound_final_weak_verb(base, vowel_spec, past_stem_base, nonpast_stem_base,
past_pass_stem_base, vn)
insert_form_or_forms(base, "vn", vn)
local lastrad = base.quadlit and vowel_spec.rad4 or vowel_spec.rad3
local final_weak = is_final_weak(base, vowel_spec)
local prefix_vowel = prefix_vowel_from_vform(base.verb_form)
local form56 = vform_nonpast_a_vowel(base.verb_form)
local a_base_suffix = final_weak and "" or q(A, lastrad)
local i_base_suffix = final_weak and "" or q(I, lastrad)
-- past and non-past stems, active and passive
local past_stem = q(past_stem_base, a_base_suffix)
-- In forms 5 and 6, non-past has /a/ as last stem vowel in the non-past
-- in both active and passive, but /i/ in the active participle and /a/
-- in the passive participle. Elsewhere, consistent /i/ in active non-past
-- and participle, consistent /a/ in passive non-past and participle.
-- Hence, forms 5 and 6 differ only in the non-past active (but not
-- active participle), so we have to split the finite non-past stem and
-- active participle stem.
local nonpast_stem = q(nonpast_stem_base, form56 and a_base_suffix or i_base_suffix)
local ap_stem = q(nonpast_stem_base, i_base_suffix)
local past_pass_stem = q(past_pass_stem_base, i_base_suffix)
local nonpast_pass_stem = q(nonpast_stem_base, a_base_suffix)
-- imperative stem
local imp_stem = q(past_stem_base, form56 and a_base_suffix or i_base_suffix)
-- make parts
if final_weak then
make_augmented_final_weak_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem, imp_stem,
prefix_vowel, form56)
else
make_sound_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem, imp_stem, prefix_vowel)
end
-- active and passive participle
if final_weak then
insert_form_or_forms(base, "ap", q(MU, ap_stem, IN))
insert_form_or_forms(base, "pp", q(MU, nonpast_pass_stem, AN, AMAQ))
else
insert_form_or_forms(base, "ap", q(MU, ap_stem))
insert_form_or_forms(base, "pp", q(MU, nonpast_pass_stem))
end
end
-- Generate finite parts of a hollow or geminate verb from ten stems (vowel and consonant stems for each of past and
-- non-past, active and passive, plus imperative) plus the prefix vowel in the active non-past ("a" or "u"), plus a
-- flag indicating if we are a geminate verb.
local function make_hollow_geminate_verb(base, geminate, past_v_stem, past_c_stem, past_pass_v_stem,
past_pass_c_stem, nonpast_v_stem, nonpast_c_stem, nonpast_pass_v_stem, nonpast_pass_c_stem, imp_v_stem,
imp_c_stem, prefix_vowel, altgem_note)
past_2stem_conj(base, "past", past_v_stem, past_c_stem, altgem_note)
past_2stem_conj(base, "past_pass", past_pass_v_stem, past_pass_c_stem)
nonpast_2stem_conj(base, "ind", prefix_vowel, nonpast_v_stem, nonpast_c_stem)
nonpast_2stem_conj(base, "sub", prefix_vowel, nonpast_v_stem, nonpast_c_stem)
nonpast_2stem_conj(base, "ind_pass", "u", nonpast_pass_v_stem, nonpast_pass_c_stem)
nonpast_2stem_conj(base, "sub_pass", "u", nonpast_pass_v_stem, nonpast_pass_c_stem)
if geminate then
jussive_gem_conj(base, "juss", prefix_vowel, nonpast_v_stem, nonpast_c_stem)
jussive_gem_conj(base, "juss_pass", "u", nonpast_pass_v_stem, nonpast_pass_c_stem)
make_gem_imperative(base, imp_v_stem, imp_c_stem)
else
nonpast_2stem_conj(base, "juss", prefix_vowel, nonpast_v_stem, nonpast_c_stem)
nonpast_2stem_conj(base, "juss_pass", "u", nonpast_pass_v_stem, nonpast_pass_c_stem)
make_2stem_imperative(base, imp_v_stem, imp_c_stem)
end
end
-- Generate finite parts of an augmented (form II+) hollow verb, given:
-- * `base` (conjugation data structure);
-- * `vowel_spec` (radicals, weakness);
-- * `past_stem_base` (invariable part of active past stem);
-- * `nonpast_stem_base` (invariable part of nonpast stem);
-- * `past_pass_stem_base` (invariable part of passive past stem);
-- * `vn` (verbal noun).
local function make_augmented_hollow_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base,
vn)
insert_form_or_forms(base, "vn", vn)
local lastrad = base.quadlit and vowel_spec.rad4 or vowel_spec.rad3
local form410 = base.verb_form == "IV" or base.verb_form == "X"
local prefix_vowel = prefix_vowel_from_vform(base.verb_form)
local a_base_suffix_v, a_base_suffix_c
local i_base_suffix_v, i_base_suffix_c
a_base_suffix_v = q(AA, lastrad) -- 'af-āl-a, inf-āl-a
a_base_suffix_c = q(A, lastrad) -- 'af-al-tu, inf-al-tu
i_base_suffix_v = q(II, lastrad) -- 'uf-īl-a, unf-īl-a
i_base_suffix_c = q(I, lastrad) -- 'uf-il-tu, unf-il-tu
-- past and non-past stems, active and passive, for vowel-initial and
-- consonant-initial endings
local past_v_stem = q(past_stem_base, a_base_suffix_v)
local past_c_stem = q(past_stem_base, a_base_suffix_c)
-- yu-f-īl-u, ya-staf-īl-u but yanf-āl-u, yaft-āl-u
local nonpast_v_stem = q(nonpast_stem_base, form410 and i_base_suffix_v or a_base_suffix_v)
local nonpast_c_stem = q(nonpast_stem_base, form410 and i_base_suffix_c or a_base_suffix_c)
local past_pass_v_stem = q(past_pass_stem_base, i_base_suffix_v)
local past_pass_c_stem = q(past_pass_stem_base, i_base_suffix_c)
local nonpast_pass_v_stem = q(nonpast_stem_base, a_base_suffix_v)
local nonpast_pass_c_stem = q(nonpast_stem_base, a_base_suffix_c)
-- imperative stem
local imp_v_stem = q(past_stem_base, form410 and i_base_suffix_v or a_base_suffix_v)
local imp_c_stem = q(past_stem_base, form410 and i_base_suffix_c or a_base_suffix_c)
-- make parts
make_hollow_geminate_verb(base, false, past_v_stem, past_c_stem, past_pass_v_stem,
past_pass_c_stem, nonpast_v_stem, nonpast_c_stem, nonpast_pass_v_stem,
nonpast_pass_c_stem, imp_v_stem, imp_c_stem, prefix_vowel)
-- active participle
insert_form_or_forms(base, "ap", q(MU, nonpast_v_stem))
-- passive participle
insert_form_or_forms(base, "pp", q(MU, nonpast_pass_v_stem))
end
-- Generate finite parts of an augmented (form II+) geminate verb, given:
-- * `base` (conjugation data structure);
-- * `vowel_spec` (radicals, weakness);
-- * `past_stem_base` (invariable part of active past stem; this and the stem bases below will end with a consonant
-- for forms IV, X, IVq, and a short vowel for the others);
-- * `nonpast_stem_base` (invariable part of nonpast stem);
-- * `past_pass_stem_base` (invariable part of passive past stem);
-- * `vn` (verbal noun);
-- * `altgem_note` (footnote to add to active past 1/2-person forms, when alternative forms are supplied [form X]).
local function make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base,
past_pass_stem_base, vn, altgem_note)
insert_form_or_forms(base, "vn", vn)
local vform = base.verb_form
local lastrad = base.quadlit and vowel_spec.rad4 or vowel_spec.rad3
local prefix_vowel = prefix_vowel_from_vform(vform)
local a_base_suffix_v, a_base_suffix_c
local i_base_suffix_v, i_base_suffix_c
if vform == "IV" or vform == "X" or vform == "IVq" then
a_base_suffix_v = q(A, lastrad, SH) -- 'af-all
a_base_suffix_c = q(SK, lastrad, A, lastrad) -- 'af-lal
i_base_suffix_v = q(I, lastrad, SH) -- yuf-ill
i_base_suffix_c = q(SK, lastrad, I, lastrad) -- yuf-lil
else
a_base_suffix_v = q(lastrad, SH) -- fā-ll, infa-ll
a_base_suffix_c = q(lastrad, A, lastrad) -- fā-lal, infa-lal
i_base_suffix_v = q(lastrad, SH) -- yufā-ll, yanfa-ll
i_base_suffix_c = q(lastrad, I, lastrad) -- yufā-lil, yanfa-lil
end
-- past and non-past stems, active and passive, for vowel-initial and
-- consonant-initial endings
local past_v_stem = q(past_stem_base, a_base_suffix_v)
local past_c_stem = q(past_stem_base, a_base_suffix_c)
local nonpast_v_stem = q(nonpast_stem_base, vform_nonpast_a_vowel(vform) and a_base_suffix_v or i_base_suffix_v)
local nonpast_c_stem = q(nonpast_stem_base, vform_nonpast_a_vowel(vform) and a_base_suffix_c or i_base_suffix_c)
-- NOTE: Formerly had a comment that "vform III and VI passive past do not have contracted parts, only
-- uncontracted parts, which are added separately by those functions". This is based on Mace
-- "Arabic Verbs and Essential Grammar" (1999) entry 63 (continued), which shows passive ḥūjija but no ḥūjja;
-- but that is apparently a mistake, as (1) verb tables in other books do show contracted passive parts for
-- these forms; (2) there is no mention of such an exception on p. 99, which explains how geminate ("doubled")
-- verbs work (on the contrary, it says "The contracted and uncontracted pairs (see above) are found all
-- over Forms III and VI of the doubled verbs").
local past_pass_v_stem = q(past_pass_stem_base, i_base_suffix_v)
local past_pass_c_stem = q(past_pass_stem_base, i_base_suffix_c)
local nonpast_pass_v_stem = q(nonpast_stem_base, a_base_suffix_v)
local nonpast_pass_c_stem = q(nonpast_stem_base, a_base_suffix_c)
-- imperative stem
local imp_v_stem = q(past_stem_base, vform_nonpast_a_vowel(vform) and a_base_suffix_v or i_base_suffix_v)
local imp_c_stem = q(past_stem_base, vform_nonpast_a_vowel(vform) and a_base_suffix_c or i_base_suffix_c)
-- make parts
make_hollow_geminate_verb(base, "geminate", past_v_stem, past_c_stem, past_pass_v_stem,
past_pass_c_stem, nonpast_v_stem, nonpast_c_stem, nonpast_pass_v_stem,
nonpast_pass_c_stem, imp_v_stem, imp_c_stem, prefix_vowel, altgem_note)
-- active participle
insert_form_or_forms(base, "ap", q(MU, nonpast_v_stem))
-- passive participle
insert_form_or_forms(base, "pp", q(MU, nonpast_pass_v_stem))
end
-------------------------------------------------------------------------------
-- Conjugation functions for specific conjugation types --
-------------------------------------------------------------------------------
local function form_i_imp_stem_through_rad1(base, nonpast_vowel, rad1)
local imp_vowel = map_vowel(nonpast_vowel, function(vow)
if vow == A or vow == I then
return I
elseif vow == U then
return U
elseif not skip_slot(base, "imp_2ms") then
error(("Internal error: Non-past vowel %s isn't a, i, or u, should have been caught earlier"):format(
dump(nonpast_vowel)))
else
-- Passive-only; imperative won't ever be displayed so it doesn't matter.
return I
end
end)
-- Mace ("Arabic Verbs and Essentials of Grammar" p. 63: [https://archive.org/details/arabicverbsessen00john/page/62/mode/2up])
-- claims that initial hamza is assimilated/elided into a long vowel in the form-I imperative, but apparently
-- this isn't corrrect.
local vowel_on_alif = map_vowel(imp_vowel, function(vow)
return ALIF .. vow
end)
return q(vowel_on_alif, rad1, SK)
end
-- Implement form-I sound or assimilated verb. ASSIMILATED is true for assimilated verbs.
local function make_form_i_sound_assimilated_verb(base, vowel_spec, assimilated)
local rad1, rad2, rad3, past_vowel, nonpast_vowel = get_radicals_3(vowel_spec)
-- Verbal nouns (maṣādir) for form I are unpredictable and have to be supplied
-- past and non-past stems, active and passive
local past_stem = q(rad1, A, rad2, past_vowel, rad3)
local nonpast_stem = assimilated and q(rad2, nonpast_vowel, rad3) or
q(rad1, SK, rad2, nonpast_vowel, rad3)
local past_pass_stem = q(rad1, U, rad2, I, rad3)
local nonpast_pass_stem = q(rad1, SK, rad2, A, rad3)
-- imperative stem
-- check for irregular verb with reduced imperative (أَخَذَ or أَكَلَ or أَمَرَ)
local reducedimp = reduced_imperative_verb(rad1, rad2, rad3)
if reducedimp then
base.irregular = true
end
local imp_stem_suffix = q(rad2, nonpast_vowel, rad3)
local long_imp_stem_base = form_i_imp_stem_through_rad1(base, nonpast_vowel, rad1)
local short_imp_stem_base = ""
local imp_stem = q((assimilated or reducedimp) and "" or long_imp_stem_base, imp_stem_suffix)
-- A form-I mithal that keeps its wāw spells its imperative on a hamzat wasl,
-- اِوْجَلْ / اِوْنَ. Tell postprocess_term() not to reduce that اِوْ to اِي -- see #10
-- there for why the substitution list can't decide this for itself.
if not assimilated and req(rad1, W) then
base.orth.keep_initial_w = true
end
-- make parts
make_sound_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem, imp_stem, "a")
if reducedimp == "shortlong" then
make_1stem_imperative(base, iut.combine_form_and_footnotes(q(long_imp_stem_base, imp_stem_suffix),
mw.getCurrentFrame():preprocess("[used especially with a clitic such as {{m|ar|فَ}} or {{m|ar|وَ}}]")))
end
-- Check for irregular verb سَأَلَ with alternative jussive and imperative. Calling this after make_sound_verb()
-- adds additional entries to the paradigm parts.
if saal_radicals(rad1, rad2, rad3) then
base.irregular = true
nonpast_1stem_conj(base, "juss", "a", "سَل")
nonpast_1stem_conj(base, "juss_pass", "u", "سَل")
make_1stem_imperative(base, "سَل")
end
-- Active participle.
insert_form_or_forms(base, "ap1", q(rad1, AA, rad2, I, rad3))
-- Insert alternative active participle (stative type I) فَعِيل. Since not all verbs have this, we require that
-- verbs that do have it specify it explicitly; a shortcut ++ is provided to make this easier (e.g. <ap:++> to
-- indicate that the alternative form should be used for the active participle, <ap:+,++> to indicate that both
-- forms can be used, and <ap:-> to indicate that there is no active participle). The same form is used for
-- secondary default passive participle.
insert_ap2_pp2(base, q(rad1, A, rad2, II, rad3))
-- Active participle, stative type II فَعِل (+++).
insert_form_or_forms(base, "ap3", q(rad1, A, rad2, I, rad3))
-- Active participle, color/defect أَفْعَل (+cd).
insert_form_or_forms(base, "apcd", q(HAMZA, A, rad1, SK, rad2, A, rad3))
-- Active participle, -ān فَعْلَان (+an).
insert_form_or_forms(base, "apan", q(rad1, A, rad2, SK, rad3, AAN))
-- Passive participle.
insert_form_or_forms(base, "pp", q(MA, rad1, SK, rad2, UU, rad3))
end
conjugations["I-sound"] = function(base, vowel_spec)
make_form_i_sound_assimilated_verb(base, vowel_spec, false)
end
conjugations["none-sound"] = function(base, vowel_spec)
-- All default stems are nil.
make_sound_verb(base)
end
conjugations["none-hollow"] = function(base, vowel_spec)
-- All default stems are nil.
make_hollow_geminate_verb(base, false)
end
conjugations["none-geminate"] = function(base, vowel_spec)
-- All default stems are nil.
make_hollow_geminate_verb(base, "geminate")
end
conjugations["none-final-weak"] = function(base, vowel_spec)
-- All default stems are nil.
make_final_weak_verb(base)
end
conjugations["I-assimilated"] = function(base, vowel_spec)
make_form_i_sound_assimilated_verb(base, vowel_spec, "assimilated")
end
local function make_form_i_hayy_verb(base, vowel_spec)
-- Verbal nouns (maṣādir) for form I are unpredictable and have to be supplied
base.irregular = true
-- past and non-past stems, active and passive, and imperative stem
local past_c_stem = "حَيِي"
local past_v_stem_long = past_c_stem
local past_v_stem_short = "حَيّ"
-- 3mp of the long variant (حَيِيَ) is حَيُوا, not the geminated حَيُّوا of the short
-- variant (حَيَّ) -- rad2 (ي) here is a plain radical, not doubled; see README
-- "Open findings" #4. Needs its own stem, distinct from both the long and short ones.
local past_v_stem_3mp = "حَي"
local past_pass_c_stem = "حُيِي"
local past_pass_v_stem_long = past_pass_c_stem
local past_pass_v_stem_short = "حُيّ"
local past_pass_v_stem_3mp = "حُي"
local nonpast_stem = "حْي"
local nonpast_pass_stem = nonpast_stem
local imp_stem = _I .. nonpast_stem
-- make parts
past_2stem_conj(base, "past", {}, past_c_stem)
past_2stem_conj(base, "past_pass", {}, past_pass_c_stem)
local variant = vowel_spec.variant or "both"
if variant == "short" or variant == "both" then
past_2stem_conj(base, "past", past_v_stem_short, {})
past_2stem_conj(base, "past_pass", past_pass_v_stem_short, {})
end
function inflect_long_variant(tense, long_stem, mp_stem)
inflect_tense_1(base, tense, "",
{long_stem, long_stem, long_stem, long_stem, mp_stem},
{past_endings[4], past_endings[5], past_endings[7], past_endings[8],
past_endings[12]},
{"3ms", "3fs", "3md", "3fd", "3mp"})
end
if variant == "long" or variant == "both" then
inflect_long_variant("past", past_v_stem_long, past_v_stem_3mp)
inflect_long_variant("past_pass", past_pass_v_stem_long, past_pass_v_stem_3mp)
end
nonpast_1stem_conj(base, "ind", "a", nonpast_stem, ind_endings_aa)
nonpast_1stem_conj(base, "sub", "a", nonpast_stem, sub_endings_aa)
nonpast_1stem_conj(base, "juss", "a", nonpast_stem, juss_endings_aa)
nonpast_1stem_conj(base, "ind_pass", "u", nonpast_pass_stem, ind_endings_aa)
nonpast_1stem_conj(base, "sub_pass", "u", nonpast_pass_stem, sub_endings_aa)
nonpast_1stem_conj(base, "juss_pass", "u", nonpast_pass_stem, juss_endings_aa)
inflect_tense_imp(base, {imp_stem, all_same = 1}, imp_endings_aa)
-- active and passive participles apparently do not exist for this verb
end
-- Implement form-I final-weak assimilated+final-weak verb. ASSIMILATED is true for assimilated verbs.
local function make_form_i_final_weak_verb(base, vowel_spec, assimilated)
local rad1, rad2, rad3, past_vowel, nonpast_vowel = get_radicals_3(vowel_spec)
-- حَيَّ or حَيِيَ is weird enough that we handle it as a separate function.
if hayy_radicals(rad1, rad2, rad3) then
make_form_i_hayy_verb(base, vowel_spec)
return
end
-- Verbal nouns (maṣādir) for form I are unpredictable and have to be supplied.
-- Past and non-past stems, active and passive, and imperative stem.
local past_stem = q(rad1, A, rad2)
local past_pass_stem = q(rad1, U, rad2)
local nonpast_stem, nonpast_pass_stem, imp_stem
if raa_radicals(rad1, rad2, rad3) then
base.irregular = true
nonpast_stem = rad1
nonpast_pass_stem = rad1
imp_stem = rad1
else
nonpast_pass_stem = q(rad1, SK, rad2)
if assimilated then
nonpast_stem = rad2
imp_stem = rad2
else
nonpast_stem = nonpast_pass_stem
imp_stem = q(form_i_imp_stem_through_rad1(base, nonpast_vowel, rad1), rad2)
end
end
-- A form-I mithal that keeps its wāw spells its imperative on a hamzat wasl,
-- اِوْجَلْ / اِوْنَ. Tell postprocess_term() not to reduce that اِوْ to اِي -- see #10
-- there for why the substitution list can't decide this for itself.
if not assimilated and req(rad1, W) then
base.orth.keep_initial_w = true
end
-- Make parts.
local past_ending_vowel =
req(rad3, Y) and req(past_vowel, A) and "ay" or
req(rad3, W) and req(past_vowel, A) and "aw" or
req(past_vowel, I) and "ī" or "ū"
-- Try to preserve footnotes attached to the third radical and/or past and/or non-past vowels.
local past_footnotes = iut.combine_footnotes(rget_footnotes(rad3), rget_footnotes(past_vowel))
local nonpast_ending_vowel = req(nonpast_vowel, A) and "ā" or req(nonpast_vowel, I) and "ī" or "ū"
local nonpast_footnotes = iut.combine_footnotes(rget_footnotes(rad3), rget_footnotes(nonpast_vowel))
make_final_weak_verb(base,
iut.combine_form_and_footnotes(past_stem, past_footnotes),
iut.combine_form_and_footnotes(past_pass_stem, past_footnotes),
iut.combine_form_and_footnotes(nonpast_stem, nonpast_footnotes),
iut.combine_form_and_footnotes(nonpast_pass_stem, nonpast_footnotes),
iut.combine_form_and_footnotes(imp_stem, nonpast_footnotes),
past_ending_vowel, nonpast_ending_vowel, "a",
final_weak_uu_retains_rad3(rad1, rad2, rad3, past_ending_vowel, nonpast_ending_vowel))
-- Active participle.
insert_form_or_forms(base, "ap1", q(rad1, AA, rad2, IN))
-- Active participle, stative type I فَعِيّ (++). FIXME: Is this correct when rad3 is W?
insert_ap2_pp2(base, q(rad1, A, rad2, II, SH))
-- Active participle, stative type II فَعٍ (+++). FIXME: Any examples of this to verify it's correct?
insert_form_or_forms(base, "ap3", q(rad1, A, rad2, IN))
-- Active participle, color/defect أَفْعَى (+cd).
insert_form_or_forms(base, "apcd", q(HAMZA, A, rad1, SK, rad2, AAMAQ))
-- Active participle, -ān فَعْيَان or فَعْوَان (+an).
-- FIXME: Any examples of this for both rad3 = W and y to verify it's correct?
insert_form_or_forms(base, "apan", q(rad1, A, rad2, SK, rad3, AAN))
-- Passive participle.
insert_form_or_forms(base, "pp", q(MA, rad1, SK, rad2, req(rad3, Y) and II or UU, SH))
end
conjugations["I-final-weak"] = function(base, vowel_spec)
make_form_i_final_weak_verb(base, vowel_spec, false)
end
conjugations["I-assimilated+final-weak"] = function(base, vowel_spec)
make_form_i_final_weak_verb(base, vowel_spec, "assimilated")
end
conjugations["I-hollow"] = function(base, vowel_spec)
local rad1, rad2, rad3, past_vowel, nonpast_vowel = get_radicals_3(vowel_spec)
-- In some sense, hollow vowels i~i and u~u are more "correct" than a~i and a~u, but the latter follow the
-- pattern of other form-I verbs, so we map i~i to a~i and u~u to a~u in infer_radicals(). Now however we have
-- to undo this to get the actual past vowel based on the non-past vowel.
if req(past_vowel, A) then
past_vowel = map_vowel(past_vowel, function(vow)
return req(nonpast_vowel, A) and I or rget(nonpast_vowel)
end)
end
local lengthened_nonpast = map_vowel(nonpast_vowel, function(vow)
return vow == U and UU or vow == I and II or AA
end)
-- Verbal nouns (maṣādir) for form I are unpredictable and have to be supplied.
-- active past stems - vowel (v) and consonant (c)
local past_v_stem = q(rad1, AA, rad3)
local past_c_stem = q(rad1, past_vowel, rad3)
-- active non-past stems - vowel (v) and consonant (c)
local nonpast_v_stem = q(rad1, lengthened_nonpast, rad3)
local nonpast_c_stem = q(rad1, nonpast_vowel, rad3)
-- passive past stems - vowel (v) and consonant (c)
-- 'ufīla always; the contracted stem takes whichever of i/u the active past_c_stem
-- *isn't* -- xāfa/xiftu (i) -> passive xufta (u), qāla/qultu (u) -> passive qilta (i).
-- Contraction drops rad2, so this vowel is the only thing distinguishing active from
-- passive in these forms, hence the two roots' behaviour is opposite, not independent.
-- Confirmed on two printed pages (خافَ p.224 "خُفْتَ", قالَ p.138 "قِلْتَ"); previously
-- hardcoded to u from خافَ alone, which is only half the pattern -- see README.
local past_pass_v_stem = q(rad1, II, rad3)
local past_pass_c_stem = q(rad1, map_vowel(past_vowel, function(vow)
return vow == I and U or I
end), rad3)
-- passive non-past stems - vowel (v) and consonant (c)
-- yufāla/yufalna
-- stem is built differently but conjugation is identical to sound verbs
local nonpast_pass_v_stem = q(rad1, AA, rad3)
local nonpast_pass_c_stem = q(rad1, A, rad3)
-- imperative stem
local imp_v_stem = nonpast_v_stem
local imp_c_stem = nonpast_c_stem
-- make parts
make_hollow_geminate_verb(base, false, past_v_stem, past_c_stem, past_pass_v_stem,
past_pass_c_stem, nonpast_v_stem, nonpast_c_stem, nonpast_pass_v_stem,
nonpast_pass_c_stem, imp_v_stem, imp_c_stem, "a")
if kaan_radicals(rad1, rad2, rad3) then
local endings = make_nonpast_endings(U, {}, {}, {}, {})
inflect_tense(base, "juss", nonpast_prefix_consonants, q(A, rad1), endings)
base.irregular = true
end
-- Active participle.
insert_form_or_forms(base, "ap1", req(rad3, HAMZA) and q(rad1, AA, HAMZA, IN) or
q(rad1, AA, HAMZA, I, rad3))
-- Active participle, stative type I فَيِّد (++). FIXME: Any examples of this to verify it's correct?
insert_ap2_pp2(base, q(rad1, A, Y, SH, I, rad3))
-- Active participle, stative type II فَيِد (+++). FIXME: Any examples of this to verify it's correct?
insert_form_or_forms(base, "ap3", q(rad1, A, Y, I, rad3))
-- Active participle, color/defect أَفّيَد or أَفّوَد (+cd). FIXME: Any examples of this to verify it's correct?
insert_form_or_forms(base, "apcd", q(HAMZA, A, rad1, SK, rad2, A, rad3))
-- Active participle, -ān فَيْدَان or فَوْدَان (+an). Example: جَاعَ "to be hungry", act part جَوْعَان
insert_form_or_forms(base, "apan", q(rad1, A, rad2, SK, rad3, AAN))
-- Passive participle.
insert_form_or_forms(base, "pp", q(MA, rad1, req(rad2, Y) and II or UU, rad3))
end
conjugations["I-geminate"] = function(base, vowel_spec)
local rad1, rad2, rad3, past_vowel, nonpast_vowel = get_radicals_3(vowel_spec)
-- Verbal nouns (maṣādir) for form I are unpredictable and have to be supplied.
-- active past stems - vowel (v) and consonant (c)
-- The contracted stem's vowel is the past vowel for most roots (مَدَدْتَ) but follows the
-- مضارع for the إتباع lexemes (هَمُمْتَ); see geminate_degemination_vowel().
local past_v_stem = q(rad1, A, rad2, SH)
local past_c_stem = q(rad1, A, rad2,
geminate_degemination_vowel(rad1, rad2, rad3, past_vowel, nonpast_vowel), rad2)
-- active non-past stems - vowel (v) and consonant (c)
local nonpast_v_stem = q(rad1, nonpast_vowel, rad2, SH)
local nonpast_c_stem = q(rad1, SK, rad2, nonpast_vowel, rad2)
-- passive past stems - vowel (v) and consonant (c)
-- dulla/dulilta
local past_pass_v_stem = q(rad1, U, rad2, SH)
local past_pass_c_stem = q(rad1, U, rad2, I, rad2)
-- passive non-past stems - vowel (v) and consonant (c)
--yudallu/yudlalna
-- stem is built differently but conjugation is identical to sound verbs
local nonpast_pass_v_stem = q(rad1, A, rad2, SH)
local nonpast_pass_c_stem = q(rad1, SK, rad2, A, rad2)
-- imperative stem
local imp_v_stem = q(rad1, nonpast_vowel, rad2, SH)
local imp_c_stem = q(form_i_imp_stem_through_rad1(base, nonpast_vowel, rad1), rad2, nonpast_vowel, rad2)
-- make parts
make_hollow_geminate_verb(base, "geminate", past_v_stem, past_c_stem, past_pass_v_stem,
past_pass_c_stem, nonpast_v_stem, nonpast_c_stem, nonpast_pass_v_stem,
nonpast_pass_c_stem, imp_v_stem, imp_c_stem, "a")
-- Active participle.
insert_form_or_forms(base, "ap1", q(rad1, AA, rad2, SH))
-- Active participle, stative type I فَعِيع (++). FIXME: Any examples of this to verify it's correct?
insert_ap2_pp2(base, q(rad1, A, rad2, II, rad2))
-- Active participle, stative type II فَعّ (+++). Example: بَرَّ "to be pious", active participle بَرّ
insert_form_or_forms(base, "ap3", q(rad1, A, rad2, SH))
-- Active participle, color/defect أَفَعّ (+cd).
-- Example: لَصَّ "to be thievish, to steal repeatedly", active participle أَلَصّ.
insert_form_or_forms(base, "apcd", q(HAMZA, A, rad1, A, rad2, SH))
-- Active participle, -ān فَعَّان (+an). FIXME: Any examples of this to verify it's correct?
insert_form_or_forms(base, "apan", q(rad1, A, rad2, SH, AAN))
-- Passive participle.
insert_form_or_forms(base, "pp", q(MA, rad1, SK, rad2, UU, rad2))
end
-- Return the ta- (active, past and non-past) and tu- (passive past) prefixes for a form II/III/V/VI verb.
-- Form V and VI verbs normally use ta- and tu-, but reduced (base.reduced) verbs use different prefixes. Form II
-- and III verbs have no prefix.
local function form_ii_iii_v_vi_ta_tu_prefix(base, rad1)
local vform = base.verb_form
if vform == "V" or vform == "VI" then
if base.reduced then
-- To simplify the code, we generate two rad1's with a sukūn between them, which is cleaned up in
-- postprocessing.
return q(_I, rad1, SK), q(rad1, SK), q(_U, rad1, SK)
else
return TA, TA, TU
end
else
return "", "", ""
end
end
-- Make form II or V sound or final-weak verb.
local function make_form_ii_v_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local final_weak = is_final_weak(base, vowel_spec)
local vform = base.verb_form
local ta_past_prefix, ta_nonpast_prefix, tu_past_prefix = form_ii_iii_v_vi_ta_tu_prefix(base, rad1)
local vn = vform == "V" and
q(ta_past_prefix, rad1, A, rad2, SH, final_weak and IN or q(U, rad3)) or
q(TA, rad1, SK, rad2, II, final_weak and AH or rad3)
-- various stem bases
local past_stem_base = q(ta_past_prefix, rad1, A, rad2, SH)
local nonpast_stem_base = q(ta_nonpast_prefix, rad1, A, rad2, SH)
local past_pass_stem_base = q(tu_past_prefix, rad1, U, rad2, SH)
-- make parts
make_augmented_sound_final_weak_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base,
vn)
end
conjugations["II-sound"] = function(base, vowel_spec)
make_form_ii_v_sound_final_weak_verb(base, vowel_spec)
end
conjugations["II-final-weak"] = function(base, vowel_spec)
make_form_ii_v_sound_final_weak_verb(base, vowel_spec)
end
local function make_form_iii_alt_vn(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local final_weak = is_final_weak(base, vowel_spec)
-- Insert alternative verbal noun فِعَال. Since not all verbs have this, we require that verbs that do have it
-- specify it explicitly; a shortcut ++ is provided to make this easier (e.g. <vn:+,++> to indicate that
-- both the normal verbal noun مُفَاعَلَة and secondary verbal noun فِعَال are available).
insert_form_or_forms(base, "vn2", q(rad1, I, rad2, AA, final_weak and HAMZA or rad3))
end
-- Make form III or VI sound or final-weak verb.
local function make_form_iii_vi_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local final_weak = is_final_weak(base, vowel_spec)
local vform = base.verb_form
local ta_past_prefix, ta_nonpast_prefix, tu_past_prefix = form_ii_iii_v_vi_ta_tu_prefix(base, rad1)
local vn = vform == "VI" and
q(ta_past_prefix, rad1, AA, rad2, final_weak and IN or q(U, rad3)) or
q(MU, rad1, AA, rad2, final_weak and AAH or q(A, rad3, AH))
-- various stem bases
local past_stem_base = q(ta_past_prefix, rad1, AA, rad2)
local nonpast_stem_base = q(ta_nonpast_prefix, rad1, AA, rad2)
local past_pass_stem_base = q(tu_past_prefix, rad1, UU, rad2)
-- make parts
make_augmented_sound_final_weak_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base,
vn)
if vform == "III" then
make_form_iii_alt_vn(base, vowel_spec)
end
end
conjugations["III-sound"] = function(base, vowel_spec)
make_form_iii_vi_sound_final_weak_verb(base, vowel_spec)
end
conjugations["III-final-weak"] = function(base, vowel_spec)
make_form_iii_vi_sound_final_weak_verb(base, vowel_spec)
end
-- Make form III or VI geminate verb.
local function make_form_iii_vi_geminate_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vform = base.verb_form
local ta_past_prefix, ta_nonpast_prefix, tu_past_prefix = form_ii_iii_v_vi_ta_tu_prefix(base, rad1)
-- Alternative verbal noun فِعَال will be inserted when we add sound parts below.
local vn = vform == "VI" and q(ta_past_prefix, rad1, AA, rad2, SH) or q(MU, rad1, AA, rad2, SH, AH)
-- Various stem bases.
local past_stem_base = q(ta_past_prefix, rad1, AA)
local nonpast_stem_base = q(ta_nonpast_prefix, rad1, AA)
local past_pass_stem_base = q(tu_past_prefix, rad1, UU)
-- Make parts.
local variant = vowel_spec.variant or "short"
if variant == "short" or variant == "both" then
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
-- Also add alternative sound (non-compressed) parts. This will lead to some duplicate entries, but they are
-- removed during addition.
if variant == "long" or variant == "both" then
make_form_iii_vi_sound_final_weak_verb(base, vowel_spec)
elseif vform == "III" then
-- Still need to add the alternative form-III verbal noun.
make_form_iii_alt_vn(base, vowel_spec)
end
end
conjugations["III-geminate"] = function(base, vowel_spec)
make_form_iii_vi_geminate_verb(base, vowel_spec)
end
-- Make form IV sound or final-weak verb.
local function make_form_iv_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local final_weak = is_final_weak(base, vowel_spec)
-- core of stem base, minus stem prefixes
local stem_core
-- check for irregular verb أَرَى
local is_raa = raa_radicals(rad1, rad2, rad3)
if is_raa then
base.irregular = true
stem_core = rad1
else
stem_core = q(rad1, SK, rad2)
end
-- verbal noun
local vn = is_raa and
q(HAMZA, I, stem_core, AA, HAMZA, AH) or
q(HAMZA, I, stem_core, AA, final_weak and HAMZA or rad3)
-- various stem bases
local past_stem_base = q(HAMZA, A, stem_core)
local nonpast_stem_base = stem_core
local past_pass_stem_base = q(HAMZA, U, stem_core)
-- make parts
make_augmented_sound_final_weak_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base,
vn)
end
conjugations["IV-sound"] = function(base, vowel_spec)
make_form_iv_sound_final_weak_verb(base, vowel_spec)
end
conjugations["IV-final-weak"] = function(base, vowel_spec)
make_form_iv_sound_final_weak_verb(base, vowel_spec)
end
conjugations["IV-hollow"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
-- verbal noun
local vn = q(HAMZA, I, rad1, AA, rad3, AH)
-- various stem bases
local past_stem_base = q(HAMZA, A, rad1)
local nonpast_stem_base = rad1
local past_pass_stem_base = q(HAMZA, U, rad1)
-- make parts
make_augmented_hollow_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["IV-geminate"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = q(HAMZA, I, rad1, SK, rad2, AA, rad2)
-- various stem bases
local past_stem_base = q(HAMZA, A, rad1)
local nonpast_stem_base = rad1
local past_pass_stem_base = q(HAMZA, U, rad1)
-- make parts
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["V-sound"] = function(base, vowel_spec)
make_form_ii_v_sound_final_weak_verb(base, vowel_spec)
end
conjugations["V-final-weak"] = function(base, vowel_spec)
make_form_ii_v_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VI-sound"] = function(base, vowel_spec)
make_form_iii_vi_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VI-final-weak"] = function(base, vowel_spec)
make_form_iii_vi_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VI-geminate"] = function(base, vowel_spec)
make_form_iii_vi_geminate_verb(base, vowel_spec)
end
-- Make a verbal noun of the general form that applies to forms VII and above. RAD12 is the first consonant cluster
-- (after initial اِ) and RAD34 is the second consonant cluster. RAD5 is the final consonant.
local function high_form_verbal_noun(rad12, rad34, rad5)
return q(_I, rad12, I, rad34, AA, rad5)
end
-- Populate a sound or final-weak verb for any of the various high-numbered augmented forms (form VII and up) that
-- have up to 5 consonants in two clusters in the stem and the same pattern of vowels between. Some of these
-- consonants in certain verb parts are w's, which leads to apparent anomalies in certain stems of these parts, but
-- these anomalies are handled automatically in postprocessing, where we resolve sequences of iwC -> īC, uwC -> ūC,
-- w + sukūn + w -> w + shadda.
-- RAD12 is the first consonant cluster (after initial اِ) and RAD34 is the second consonant cluster. RAD5 is the
-- final consonant.
local function make_high_form_sound_final_weak_verb(base, vowel_spec, rad12, rad34, rad5)
local final_weak = is_final_weak(base, vowel_spec)
local vn = high_form_verbal_noun(rad12, rad34, final_weak and HAMZA or rad5)
-- various stem bases
local nonpast_stem_base = q(rad12, A, rad34)
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, rad12, U, rad34)
-- make parts
make_augmented_sound_final_weak_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base,
vn)
end
local function form_vii_nrad1(base, rad1)
if base.reduced then
if not req(rad1, M) then
error(("Internal error: Form VII first radical %s is not م but .reduced specified; should have been caught earlier"):
format(rget(rad1)))
end
return M .. SH
else
return q("نْ", rad1)
end
end
-- Make form VII sound or final-weak verb.
local function make_form_vii_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
make_high_form_sound_final_weak_verb(base, vowel_spec, form_vii_nrad1(base, rad1), rad2, rad3)
end
conjugations["VII-sound"] = function(base, vowel_spec)
make_form_vii_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VII-final-weak"] = function(base, vowel_spec)
make_form_vii_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VII-hollow"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local nrad1 = form_vii_nrad1(base, rad1)
local vn = high_form_verbal_noun(nrad1, Y, rad3)
-- various stem bases
local nonpast_stem_base = nrad1
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, nrad1)
-- make parts
make_augmented_hollow_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["VII-geminate"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local nrad1 = form_vii_nrad1(base, rad1)
local vn = high_form_verbal_noun(nrad1, rad2, rad2)
-- various stem bases
local nonpast_stem_base = q(nrad1, A)
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, nrad1, U)
-- make parts
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
-- Return Form VIII verbal noun.
local function form_viii_verbal_noun(base, vowel_spec, rad1, rad2, rad3)
local final_weak = is_final_weak(base, vowel_spec)
rad3 = final_weak and HAMZA or rad3
return {high_form_verbal_noun(vowel_spec.form_viii_assim, rad2, rad3)}
end
-- Make form VIII sound or final-weak verb.
local function make_form_viii_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
-- check for irregular verb اِتَّخَذَ
if axadh_radicals(rad1, rad2, rad3) then
base.irregular = true
rad1 = T
end
make_high_form_sound_final_weak_verb(base, vowel_spec, vowel_spec.form_viii_assim, rad2, rad3)
end
conjugations["VIII-sound"] = function(base, vowel_spec)
make_form_viii_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VIII-final-weak"] = function(base, vowel_spec)
make_form_viii_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VIII-hollow"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = form_viii_verbal_noun(base, vowel_spec, rad1, Y, rad3)
-- various stem bases
local nonpast_stem_base = vowel_spec.form_viii_assim
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, nonpast_stem_base)
-- make parts
make_augmented_hollow_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["VIII-geminate"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = form_viii_verbal_noun(base, vowel_spec, rad1, rad2, rad2)
-- various stem bases
local nonpast_stem_base = q(vowel_spec.form_viii_assim, A)
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, vowel_spec.form_viii_assim, U)
-- make parts
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["IX-sound"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = q(_I, rad1, SK, rad2, I, rad3, AA, rad3)
-- various stem bases
local nonpast_stem_base = q(rad1, SK, rad2, A)
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, rad1, SK, rad2, U)
-- make parts
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["IX-final-weak"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
make_high_form_sound_final_weak_verb(base, vowel_spec, q(rad1, SK, rad2), rad3, rad3)
end
-- Populate a sound or final-weak verb for any of the various high-numbered
-- augmented forms that have 5 consonants in the stem and the same pattern of
-- vowels. Some of these consonants in certain verb parts are w's, which leads to
-- apparent anomalies in certain stems of these parts, but these anomalies
-- are handled automatically in postprocessing, where we resolve sequences of
-- iwC -> īC, uwC -> ūC, w + sukūn + w -> w + shadda.
local function make_high5_form_sound_final_weak_verb(base, vowel_spec, rad1, rad2, rad3, rad4, rad5)
make_high_form_sound_final_weak_verb(base, vowel_spec, q(rad1, SK, rad2), q(rad3, SK, rad4), rad5)
end
-- Make form X sound or final-weak verb.
local function make_form_x_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
-- check for irregular verb اِسْتَحْيَا (also اِسْتَحَى)
local is_hayy = hayy_radicals(rad1, rad2, rad3)
local variant = vowel_spec.variant or "both"
if not is_hayy or variant == "long" or variant == "both" then
make_high5_form_sound_final_weak_verb(base, vowel_spec, S, T, rad1, rad2, rad3)
end
if is_hayy and (variant == "short" or variant == "both") then
base.irregular = true
-- Add alternative entries to the verbal paradigms. Any duplicates are removed during addition.
make_high_form_sound_final_weak_verb(base, vowel_spec, S .. SK .. T, rad1, rad3)
end
end
conjugations["X-sound"] = function(base, vowel_spec)
make_form_x_sound_final_weak_verb(base, vowel_spec)
end
conjugations["X-final-weak"] = function(base, vowel_spec)
make_form_x_sound_final_weak_verb(base, vowel_spec)
end
conjugations["X-hollow"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = q(base.reduced and "اِسْ" or "اِسْتِ", rad1, AA, rad3, AH)
-- various stem bases
local past_stem_base = q(base.reduced and "اِسْ" or "اِسْتَ", rad1)
local nonpast_stem_base = q(base.reduced and "سْ" or "سْتَ", rad1)
local past_pass_stem_base = q(base.reduced and "اُسْ" or "اُسْتُ", rad1)
-- make parts
make_augmented_hollow_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["X-geminate"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = q("اِسْتِ", rad1, SK, rad2, AA, rad2)
-- various stem bases
local past_stem_base = q("اِسْتَ", rad1)
local nonpast_stem_base = q("سْتَ", rad1)
local past_pass_stem_base = q("اُسْتُ", rad1)
-- make parts
if base.altgem then
inflect_tense(base, "past", "", {q(past_stem_base, A, rad2, SH), all_same = 1},
past_endings_ay_12_person_only)
end
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn,
base.altgem and "[uncommon]" or nil)
end
conjugations["XI-sound"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = q(_I, rad1, SK, rad2, II, rad3, AA, rad3)
-- various stem bases
local nonpast_stem_base = q(rad1, SK, rad2, AA)
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, rad1, SK, rad2, UU)
-- make parts
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
-- Probably no form XI final-weak, since already geminate in form; would behave as XI-sound.
-- Make form XII sound or final-weak verb.
local function make_form_xii_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
make_high5_form_sound_final_weak_verb(base, vowel_spec, rad1, rad2, W, rad2, rad3)
end
conjugations["XII-sound"] = function(base, vowel_spec)
make_form_xii_sound_final_weak_verb(base, vowel_spec)
end
conjugations["XII-final-weak"] = function(base, vowel_spec)
make_form_xii_sound_final_weak_verb(base, vowel_spec)
end
-- Make form XIII sound or final-weak verb.
local function make_form_xiii_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
make_high5_form_sound_final_weak_verb(base, vowel_spec, rad1, rad2, W, W, rad3)
end
conjugations["XIII-sound"] = function(base, vowel_spec)
make_form_xiii_sound_final_weak_verb(base, vowel_spec)
end
conjugations["XIII-final-weak"] = function(base, vowel_spec)
make_form_xiii_sound_final_weak_verb(base, vowel_spec)
end
-- Make a form XIV or XV sound or final-weak verb. Last radical appears twice (if`anlala / yaf`anlilu) so if it were
-- w or y you'd get if`anwā / yaf`anwī or if`anyā / yaf`anyī, i.e. unlike for most augmented verbs, the identity of
-- the radical matters.
local function make_form_xiv_xv_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local lastrad = base.verb_form == "XV" and Y or rad3
make_high5_form_sound_final_weak_verb(base, vowel_spec, rad1, rad2, N, rad3, lastrad)
end
conjugations["XIV-sound"] = function(base, vowel_spec)
make_form_xiv_xv_sound_final_weak_verb(base, vowel_spec)
end
conjugations["XIV-final-weak"] = function(base, vowel_spec)
make_form_xiv_xv_sound_final_weak_verb(base, vowel_spec)
end
conjugations["XV-sound"] = function(base, vowel_spec)
make_form_xiv_xv_sound_final_weak_verb(base, vowel_spec)
end
-- Probably no form XV final-weak, since already final-weak in form; would behave as XV-sound.
-- Make form Iq or IIq sound or final-weak verb.
local function make_form_iq_iiq_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3, rad4 = get_radicals_4(vowel_spec)
local final_weak = is_final_weak(base, vowel_spec)
local vform = base.verb_form
local vn = vform == "IIq" and
q(TA, rad1, A, rad2, SK, rad3, (final_weak and IN or q(U, rad4))) or
q(rad1, A, rad2, SK, rad3, (final_weak and AAH or q(A, rad4, AH)))
local ta_pref = vform == "IIq" and TA or ""
local tu_pref = vform == "IIq" and TU or ""
-- various stem bases
local past_stem_base = q(ta_pref, rad1, A, rad2, SK, rad3)
local nonpast_stem_base = past_stem_base
local past_pass_stem_base = q(tu_pref, rad1, U, rad2, SK, rad3)
-- make parts
make_augmented_sound_final_weak_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base,
vn)
end
conjugations["Iq-sound"] = function(base, vowel_spec)
make_form_iq_iiq_sound_final_weak_verb(base, vowel_spec)
end
conjugations["Iq-final-weak"] = function(base, vowel_spec)
make_form_iq_iiq_sound_final_weak_verb(base, vowel_spec)
end
conjugations["IIq-sound"] = function(base, vowel_spec)
make_form_iq_iiq_sound_final_weak_verb(base, vowel_spec)
end
conjugations["IIq-final-weak"] = function(base, vowel_spec)
make_form_iq_iiq_sound_final_weak_verb(base, vowel_spec)
end
-- The نون of اِفْعَنْلَلَ, or the إدغام that replaces it. Where ل1 is weak the reference
-- prints the نون assimilated into it: model 427 (p.415) sets اِهْبَنْيَخَ as اِهْبَيَّخَ,
-- and its own footnote gives the root as أصْلُهُ هَبْيَخَ, so the ي is ل1 and the نون is
-- the wazn's. Emitting ل1 twice with a sukūn between them is how reduced forms V/VI
-- write their تاء التفعّل too -- postprocess_subs' "same letter separated by sukūn"
-- rule turns the pair into the šadda, and the مضارع and أمر come out اِهْبَيِّخْ /
-- يَهْبَيِّخُ, which is what the page prints.
--
-- Requested with |مدغم=, never inferred from the radical -- the same call forms V/VI,
-- VII and X already make. p.415 is the only افعنلل paradigm in the corpus with a weak
-- ل1 (the other five, اِفْعَنْلَلَ اِحْوَنْصَلَ اِحْرَنْجَمَ اِفْرَنْقَعَ اِسْلَنْطَأَ
-- اِطْلَنْفَأَ, are all sound there), and one attestation is not enough to make every
-- root of the shape assimilate for every caller on ar.wiktionary.
local function form_iiiq_n_augment(base, rad3)
if not base.reduced then
return N
end
if not (req(rad3, W) or req(rad3, Y)) then
error(("Form IIIq .reduced assimilates the نون into ل1, which must be و or ي, but saw %s"):
format(rget(rad3)))
end
return rad3
end
-- Make form IIIq sound or final-weak verb.
local function make_form_iiiq_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3, rad4 = get_radicals_4(vowel_spec)
make_high5_form_sound_final_weak_verb(base, vowel_spec, rad1, rad2,
form_iiiq_n_augment(base, rad3), rad3, rad4)
end
conjugations["IIIq-sound"] = function(base, vowel_spec)
make_form_iiiq_sound_final_weak_verb(base, vowel_spec)
end
conjugations["IIIq-final-weak"] = function(base, vowel_spec)
make_form_iiiq_sound_final_weak_verb(base, vowel_spec)
end
conjugations["IVq-sound"] = function(base, vowel_spec)
local rad1, rad2, rad3, rad4 = get_radicals_4(vowel_spec)
local vn = q(_I, rad1, SK, rad2, I, rad3, SK, rad4, AA, rad4)
-- various stem bases
local past_stem_base = q(_I, rad1, SK, rad2, A, rad3)
local nonpast_stem_base = q(rad1, SK, rad2, A, rad3)
local past_pass_stem_base = q(_U, rad1, SK, rad2, U, rad3)
-- make parts
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
-- Probably no form IVq final-weak, since already geminate in form; would behave as IVq-sound.
end
create_conjugations()
-------------------------------------------------------------------------------
-- Guts of main conjugation function --
-------------------------------------------------------------------------------
--W: Lexical exceptions — roots the sources conjugate SOUND in a form whose general
-- rule would not. Two rules are overridden here, and both are regular enough that the
-- exceptions have to be listed rather than derived:
--
-- * إعلال — a wāw or yāʾ second radical contracting to a long vowel (أَفَالَ,
-- اِسْتَجَابَ). The listed roots keep the consonant: أَفْيَلَ, اِسْتَجْوَبَ.
-- * إدغام — a geminate root assimilating rad2 into rad3 (عَالَّ, تَعَاثَّ). The listed
-- roots print the فكّ instead: عالَلَ, تَعاثَثَ.
--
-- Keyed by verb form .. ":" .. rad1..rad2..rad3, with the radicals as normalize_root()
-- leaves them (every hamza seat folded to bare ء). The form belongs in the key because
-- soundness is a fact about the lexeme *in that form*, not about the root: جوب is sound
-- in form X (اِسْتَجْوَبَ) and hollow in form I (جَابَ), and the source prints both.
--
-- Upstream's own commentary names several such verbs — izdawaja, istaḥwana, istajwaba,
-- ʕawira — and observes that a caller supplying a *lemma* needs no table, because the
-- lemma spells the soundness out. This repo's callers supply a root and a وزن, which do
-- not, so this is what carries it.
local SOUND_ROOTS = {
-- Form IV keeping a yāʾ middle radical (أَفْيَلَ). Attested verbs, not the صفة مشبهة
-- like أَخْيَف/خَيْفاء; each is sourced. Forms VII/VIII/X of these roots stay hollow.
["IV:خيل"] = true, -- أَخْيَلَ: أخيلت السماءُ تهيأت للمطر — المعجم الوسيط ج1 ص266 (وبه أَخالت أيضًا)
["IV:غيل"] = true, -- أَغْيَلَ: أغيلته فهي مُغْيِل، سقته الغَيْل — لسان العرب ج11 ص111 (وبه أغالت أيضًا)
["IV:حيج"] = true, -- أَحْيَجَ: أحيجت الأرضُ، على خلاف القياس — تاج العروس ج5 ص500
["IV:حين"] = true, -- أَحْيَنَ: أحين القومُ آن لهم أن يبلغوا ما أملوه — المعجم الوسيط ج1 ص212
["IV:خيف"] = true, -- أَخْيَفَ: أخيف الحاجُّ نزلوا خيف منى — كتاب الأفعال لابن القوطية ص35
["IV:ريف"] = true, -- أَرْيَفَ: أريفت الأرضُ إريافًا (خصبت) — المحيط في اللغة ج10 ص256
["IV:زين"] = true, -- أَزْيَنَ: أزينت الأرضُ، حسّنها عشبها — مقاييس اللغة ج3 ص41
-- أنطوان الدحداح، معجم تصريف الأفعال العربية. Each of these is a printed paradigm in
-- its own right under the model number given — the number on the page's own disk — and
-- is in fixtures/ as a whole page rather than as a single cited form.
["IV:ثوب"] = true, -- أَثْوَبَ / يُثْوِبُ، نموذج ٢٢٦ (beside أَثَابَ from the same root)
["IV:نيء"] = true, -- أَنْيَأَ / يُنْيِئُ، نموذج ٢٢٦ (أنيأ اللحمَ، من النِّيء)
["VII:سيء"] = true, -- اِنْسَيَأَ / يَنْسَيِئُ، نموذج ٢٥٦
["VIII:عول"] = true, -- اِعْتَوَلَ / يَعْتَوِلُ، نموذج ٢٦٦
["X:جوب"] = true, -- اِسْتَجْوَبَ / يَسْتَجْوِبُ، نموذج ٢٨٦
["III:علل"] = true, -- عالَلَ / يُعالِلُ، نموذج ٢١١
["III:فرر"] = true, -- فارَرَ / يُفارِرُ، نموذج ٢١١
["VI:عثث"] = true, -- تَعاثَثَ / يَتَعاثَثُ، نموذج ٢٤١
["VI:غضض"] = true, -- تَغاضَضَ / يَتَغاضَضُ، نموذج ٢٤١
}
-- Given form, weakness and radicals, check to make sure the radicals present are allowable for the weakness. Hamzas on
-- alif/wāw/yāʾ seats are never allowed (should always appear as hamza-on-the-line), and various weaknesses have various
-- strictures on allowable consonants.
local function check_radicals(form, weakness, rad1, rad2, rad3, rad4)
local function hamza_check(index, rad)
if rad == HAMZA_ON_ALIF or rad == HAMZA_UNDER_ALIF or
rad == HAMZA_ON_W or rad == HAMZA_ON_Y then
error("Radical " .. index .. " is " .. rad .. " but should be ء (hamza on the line)")
end
end
local function check_waw_ya(index, rad)
if not is_waw_ya(rad) then
error("Radical " .. index .. " is " .. rad .. " but should be و or ي")
end
end
local function check_not_waw_ya(index, rad)
if is_waw_ya(rad) then
error("In a sound verb, radical " .. index .. " should not be و or ي")
end
end
hamza_check(rad1)
hamza_check(rad2)
hamza_check(rad3)
hamza_check(rad4)
if weakness == "assimilated" or weakness == "assimilated+final-weak" then
if rad1 ~= W then
error("Radical 1 is " .. rad1 .. " but should be و")
end
-- don't check that non-assimilated form I verbs don't have wāw as their
-- first radical because some form-I verbs exist where a first-radical wāw
-- behaves as sound, e.g. wajuha yawjuhu "to be distinguished".
end
if weakness == "final-weak" or weakness == "assimilated+final-weak" then
if rad4 then
check_waw_ya(4, rad4)
else
check_waw_ya(3, rad3)
end
elseif vform_supports_final_weak(form) then
-- non-final-weak verbs cannot have weak final radical if there's a corresponding
-- final-weak verb category. I think this is safe. We may have problems with
-- ḥayya/ḥayiya yaḥyā if we treat it as a geminate verb.
if rad4 then
check_not_waw_ya(4, rad4)
else
check_not_waw_ya(3, rad3)
end
end
if weakness == "hollow" then
check_waw_ya(2, rad2)
-- don't check that non-hollow verbs in forms that support hollow verbs
-- don't have wāw or yāʾ as their second radical because some verbs exist
-- where a middle-radical wāw/yāʾ behaves as sound, e.g. form-VIII izdawaja
-- "to be in pairs".
end
if weakness == "geminate" then
if rad4 then
error("Internal error: No geminate quadrilaterals, should not be seen")
end
if rad2 ~= rad3 then
error("Weakness is geminate; radical 3 is " .. rad3 .. " but should be same as radical 2 " .. rad2)
end
elseif vform_supports_geminate(form) then
-- non-geminate verbs cannot have second and third radical same if there's
-- a corresponding geminate verb category. I think this is safe. We
-- don't fuss over double wāw or double yāʾ because this could legitimately
-- be a final-weak verb with middle wāw/yāʾ, treated as sound.
if rad4 then
error("Internal error: No quadrilaterals should support geminate verbs")
end
if rad2 == rad3 and not is_waw_ya(rad2) and not SOUND_ROOTS[form .. ":" .. rad1 .. rad2 .. rad3] then
error("Weakness is '" .. weakness .. "'; radical 2 and 3 are same at " .. rad2 .. " but should not be; consider making weakness 'geminate'")
end
end
end
-- array of substitutions; each element is a 2-entry array FROM, TO; do it
-- this way so the concatenations only get evaluated once
local postprocess_subs = {
-- reorder short-vowel + shadda -> shadda + short-vowel for easier processing
{"(" .. AIU .. ")" .. SH, SH .. "%1"},
----------same letter separated by sukūn should instead use shadda---------
------------happens e.g. in kun-nā "we were".-----------------
{"(.)" .. SK .. "%1", "%1" .. SH},
---------------------------- assimilated verbs ----------------------------
-- iw, iy -> ī (assimilated verbs)
{I .. W .. SK, II},
{I .. Y .. SK, II},
-- uw, uy -> ū (assimilated verbs)
{U .. W .. SK, UU},
{U .. Y .. SK, UU},
-------------- final -yā uses tall alif not alif maqṣūra ------------------
{"(" .. Y .. SH .. "?" .. A .. ")" .. AMAQ, "%1" .. ALIF},
----------------------- handle hamza assimilation -------------------------
-- initial hamza + short-vowel + hamza + sukūn -> hamza + long vowel
{HAMZA .. A .. HAMZA .. SK, HAMZA .. A .. ALIF},
{HAMZA .. I .. HAMZA .. SK, HAMZA .. I .. Y},
{HAMZA .. U .. HAMZA .. SK, HAMZA .. U .. W}
}
local postprocess_tr_subs = {
{"ī([" .. vowels .. "y*])", "iy%1"},
{"ū([" .. vowels .. "w*])", "uw%1"},
{"(.)%*", "%1%1"}, -- implement shadda
---------------------------- assimilated verbs ----------------------------
-- iw, iy -> ī (assimilated verbs)
{"iw([^" .. vowels .. "w])", "ī%1"},
{"iy([^" .. vowels .. "y])", "ī%1"},
-- uw, uy -> ū (assimilated verbs)
{"uw([^" .. vowels .. "w])", "ū%1"},
{"uy([^" .. vowels .. "y])", "ū%1"},
----------------------- handle hamza assimilation -------------------------
-- initial hamza + short-vowel + hamza + sukūn -> hamza + long vowel
{"ʔaʔ(" .. NV .. ")", "ʔā%1"},
{"ʔiʔ(" .. NV .. ")", "ʔī%1"},
{"ʔuʔ(" .. NV .. ")", "ʔū%1"},
}
-- Post-process verb parts to eliminate phonological anomalies. Many of the changes, particularly the tricky ones,
-- involve converting hamza to have the proper seat. The rules for this are complicated and are documented on the
-- [[w:Hamza]] Wikipedia page. In some cases there are alternatives allowed, and we handle them below by returning
-- multiple possibilities.
--
-- ORTHOGRAPHIC EXEMPTIONS (`orth`, set on `base` by the code that knows the fact)
--
-- postprocess_subs above and ar_utilities.process_hamza apply general Arabic orthography
-- to a finished word. A handful of the reference's verb spellings are decisions neither
-- pass can make, because what settles them is not in the string: that a hamza is a
-- *radical*, that a short vowel is the stem's rather than iʿrāb, that a verb is form VIII
-- rather than form I. Each of the three has both halves in the corpus. Form I أَتَى and
-- form VIII اِئْتَمَنَ reach this function's 1s مضارع as the same ءَ + ءْ + ت, and the book
-- prints آتِي for the one and أَأْتَمِنُ for the other (#14). شَأَى's imperative اُشْؤُ and
-- جَرُؤَ's past both end in hamza + a short vowel, and only the first of the two vowels
-- belongs to the stem (#12).
--
-- module/ar-utilities.lua is byte-identical to module/vendor/ar-utilities.lua, and its
-- other callers are on-wiki nominal templates that cannot be regression-tested from this
-- repo, so none of this is fixed by editing it. Each case is instead handled on the
-- caller's side of the shared passes, in one of three ways:
--
-- * park the sequence on a placeholder so a shared rule cannot see it, and restore it
-- afterwards -- #10's original mechanism, now also #14's;
-- * add a spelling beside whatever the shared code returns, because the reference
-- attests both and this module already carries alternatives elsewhere -- #16, #17; or
-- * rewrite the sequence, either before the shared pass so its rule never matches
-- (#12's past clause writes the ā as an ألف مقصورة, which the madda rule does not
-- look for) or after it, where the shared code has made a decision the caller's fact
-- overrides (#12's seating clause, #18's).
--
-- Adding one is three things: a key in `base.orth` set by the builder that knows the
-- fact, a clause here naming the finding, and the XFAIL entries in tests/run.lua deleted
-- in the same commit.
--
-- Three of the clauses below are unconditional, and deliberately so: they repair a
-- spelling the shared code produces that Arabic does not use (#18), restore one it
-- discards (#17), or extend one of its rules to a seat it never reaches (#15). None of
-- the three needs a fact from the caller -- only a place to live that is not the shared
-- file.
local function postprocess_term(term, orth)
if term == "?" then
return "?"
end
orth = orth or {}
-- Phase 1: the reductions in postprocess_subs, with the parked exemptions held out
-- across them. `park_w` is a parameter rather than read from `orth` because #16 runs
-- this phase both ways -- see below.
local function reduce(t, park_w)
-- Add BORDER at text boundaries.
t = BORDER .. t .. BORDER
-- #10: a word-initial hamzat wasl + wāw + sukūn is how a form-I mithal that keeps
-- its wāw spells its imperative (اِوْنَ، اِوْجَلْ). The iw -> ī reduction is right
-- everywhere else and cannot simply be dropped -- it is what turns the form VIII
-- mithal past اِوْتَعَدَ into اِيتَعَدَ, in the same word-initial position, so position
-- alone doesn't separate the two cases.
if park_w then
t = rsub(t, BORDER .. ALIF .. I .. W .. SK, BORDER .. ALIF .. I .. KEEP_W_PH .. SK)
end
-- #14: the reference spells the 1s مضارع of a hamza-initial form VIII analytically,
-- أَأْتَمِنُ -- the prefix hamza, then the quiescent radical hamza on its own seat --
-- where the أَ + أْ -> آ contraction below and the alif-madda rule in process_hamza
-- between them return آتَمِنُ. Form I of a hamza-initial root arrives here with the
-- identical sequence and *is* printed contracted (آكُلُ، آخُذُ، آتِي), so the string
-- cannot decide this and the flag does.
if orth.analytic_hamza then
t = rsub(t, BORDER .. HAMZA .. A .. HAMZA .. SK,
BORDER .. HAMZA .. A .. KEEP_HAMZA_PH .. SK)
end
-- Do the main post-processing, based on the pattern substitutions in postprocess_subs.
for _, sub in ipairs(postprocess_subs) do
t = rsub(t, sub[1], sub[2])
end
-- #12, the past half: a form-I final-weak verb on a wāw rad3 builds its past 3ms ā
-- as a real alif (دَعَا), and after a hamza rad2 that puts hamza-on-alif + fatḥa +
-- alif in front of process_hamza's madda rule (أَا -> آ), which swallows the seat:
-- شَأَى comes out شَآ. The rule itself is right -- it is what gives قَرَأَ its dual قَرَآ --
-- and it keys on ALIF, not on AMAQ, which is why the module already gets رَأَى and
-- نَأَى right: a yāʾ rad3 never produces the second alif. So the ā is written as an
-- ألف مقصورة here instead, which sidesteps the madda rule rather than suppressing
-- it. Only the past 3ms of an -aw verb reaches this sequence; every derived form
-- already ends its past 3ms in AMAQ.
if orth.hamza_rad2_final_weak then
t = rsub(t, HAMZA .. A .. ALIF .. BORDER, HAMZA .. A .. AMAQ .. BORDER)
end
t = t:gsub(KEEP_W_PH, W)
-- Restored as a plain hamza, not a seat: the seating pass below still has to place it,
-- and gets it right (a quiescent medial hamza after a fatḥa takes the alif).
t = t:gsub(KEEP_HAMZA_PH, HAMZA)
return (t:gsub(BORDER, ""))
end
-- Phase 2: hamza seats. Returns the list of spellings for one reduced term.
local function seat(t)
if not rfind(t, HAMZA) then
return { t }
end
-- #17: after a long ū, process_hamza treats و + ؤُ + و as having no acceptable
-- original spelling and returns only its two alternatives (ئُو، ءُو) -- while the
-- same function keeps the original beside the alternative after a long ā, which is
-- what gives سَاؤُوا. The reference prints the wāw seat after a long ū throughout
-- (يَسُوؤُونَ، تَسُوؤُونَ، سُوؤُوا, against its own تَسُوئِينَ / سُوئِي for the kasra: the
-- seat follows the hamza's own vowel). So the discarded spelling is added back
-- here, after theirs rather than instead of them -- the same order the long-ā
-- branch of that function already uses.
local waw_seat
if rfind(t, W .. HAMZA .. U .. W) then
local parked = t:gsub(W .. HAMZA .. U .. W, W .. WAW_SEAT_PH .. U .. W)
waw_seat = ar_utilities.process_hamza(parked:gsub(HAMZA, HAMZA_PH))[1]
waw_seat = waw_seat:gsub(WAW_SEAT_PH, HAMZA_ON_W)
end
local out = ar_utilities.process_hamza(t:gsub(HAMZA, HAMZA_PH))
if waw_seat then
out[#out + 1] = waw_seat
end
-- #12, the imperative/jussive half: apocopation strands the radical hamza at the
-- end of the word, where process_hamza takes its seat from the *preceding* letter's
-- vowel and, finding a sukūn, drops it on the line -- اُشْءُ, أَفْءِ. That rule is right
-- for a hamza whose own vowel is iʿrāb (جُزْء), and cannot be made position-sensitive
-- inside the shared file: the fatḥa of جَرُؤَ is the ماضٍ ending and the ḍamma before
-- it rightly wins the seat. Here the short vowel left after rad3 goes is the stem's
-- own, which is the fact this flag carries. The reference seats it: اُشْؤُ (p160, شأو,
-- form I) and أَفْإِ (p300, فأو, form IV) -- two roots, two measures, two pages, and
-- the two vowels between them.
--
-- The seat is the wāw for a ḍamma and the alif otherwise; #18's substitution below
-- then writes the alif's hamza underneath when the vowel is a kasra, which is how
-- the alif branch comes out as إ. That is not a third rule invented here: the same
-- إ is what p368's اِرْتَإِ and p182's imperative إ already print, and what the module
-- already produces for both, having reached the alif seat by its own route (a
-- preceding fatḥa, and word-initial position). Only p300 needed the seat itself.
--
-- Gated on a preceding sukūn, which is the whole of what the two pages attest. The
-- hamza after a *long* vowel is left alone (وأي's passive jussive تُوءَ), where the
-- shared code also leaves it on the line and no page here prints the slot; and the
-- pattern wants the vowel directly after the hamza, so a šadda'd seat (p271's رَأِّ)
-- is not matched, the same gate #18 gets for free.
if orth.hamza_rad2_final_weak then
for i, v in ipairs(out) do
v = rsub(BORDER .. v .. BORDER, SK .. HAMZA .. "(" .. AIU .. ")" .. BORDER,
function(vowel)
return SK .. (vowel == U and HAMZA_ON_W or HAMZA_ON_ALIF) .. vowel .. BORDER
end)
out[i] = (v:gsub(BORDER, ""))
end
end
-- #15: a hamza left on the line, carrying a fatḥa, with an alif after it, is
-- printed as a madda -- but not when that would end the word directly after an
-- alif. The reference sets يَداآنِ / تَداآنِ (p201, دوء), يَهاآنِ / تَهاآنِ (p242,
-- هوء) and يَسُوآنِ / تَسُوآنِ (p157, سوء) for the مضارع duals, and سُوآ for p157's
-- imperative dual, while the same three verbs print their *word-final* duals
-- داءا / هاءا / سَاءَا with the hamza on the line -- so the exception is carried by
-- the preceding alif, not by the position alone: سُوآ is word-final too and does
-- contract, after a long ū. Ten cells, three roots, three pages, and the blocked
-- case attested on all three. process_hamza applies this rule only to a hamza it
-- has seated on an alif (which is what gives تَدَرْبَآ); after a long vowel it
-- leaves the seat on the line and the rule never fires, so the extension is here.
--
-- Confined to a hamza after a *long vowel*, which is the whole of what those three
-- pages attest. Written without that gate it also contracts the فَعْلان participle
-- سَوْءَان to سَوْآن -- a hamza after the sukūn of a diphthong, not after a long vowel,
-- in a slot no fixture covers and no page here prints. The mater carries no sukūn
-- in a long vowel as this module builds one, so requiring the two to be adjacent
-- is the gate.
for i, v in ipairs(out) do
v = BORDER .. v .. BORDER
v = rsub(v, ALIF .. HAMZA .. A .. ALIF .. BORDER, ALIF .. NO_MADDA_PH .. A .. ALIF .. BORDER)
v = rsub(v, "([" .. AMAD .. ALIF .. W .. Y .. "])" .. HAMZA .. A .. ALIF, "%1" .. AMAD)
v = v:gsub(NO_MADDA_PH, HAMZA)
out[i] = (v:gsub(BORDER, ""))
end
-- #18: a hamza seated on an alif and carrying a bare kasra is written *below* the
-- alif. The seat is chosen from the preceding letter's vowel, which is right when
-- the hamza's own vowel is iʿrāb (مَلْجَأٍ) and is why the rule lives in the shared
-- code; in a verb there is no iʿrāb, and the kasra that follows an apocopated
-- radical hamza is the stem's own -- so اِرْتَأَى's jussive is اِرْتَإِ.
--
-- Not when the alif also carries a šadda, and the corpus is what says so: رَأَّى
-- (p271, form II of the *same* root رأو as p368's اِرْتَأَى) prints its apocopated
-- imperative رَأِّ, hamza above, where the doubled radical puts a šadda on the seat.
-- Written unconditionally first, this rule broke that cell and nothing else in 379
-- paradigms, which is both the counter-example and its own control: one root, two
-- forms, two pages, and the presence of the šadda the only difference between them.
-- No test for the šadda is needed: postprocess_subs has already reordered it in
-- front of the vowel, so أ + šadda + kasra simply isn't the sequence below.
for i, v in ipairs(out) do
out[i] = v:gsub(HAMZA_ON_ALIF .. I, HAMZA_UNDER_ALIF .. I)
end
return out
end
local out = seat(reduce(term, orth.keep_initial_w))
-- #16: a retained-wāw مثال reduces اِوْ to اِيْ in the imperative on p240 (اِيْجَعْ, all
-- five cells) and does not on p247 (اِوْنَ) -- the book carries both spellings and
-- grammar allows both, so the module carries both too, the way it already carries
-- سَائُوا | سَاؤُوا. #10's park is still right; what was missing is the second form
-- beside the first. Widening loose() instead would retire the suite's only check on
-- the mithal-wāwī / mithal-yāʾī imperative distinction, which is why this is here.
if orth.keep_initial_w then
for _, reduced in ipairs(seat(reduce(term, false))) do
local seen = false
for _, v in ipairs(out) do
if v == reduced then
seen = true
break
end
end
if not seen then
out[#out + 1] = reduced
end
end
end
if #out == 1 then
return out[1]
end
return out
end
local function postprocess_translit(translit)
if translit == "?" then
return "?"
end
-- Add BORDER at text boundaries.
translit = BORDER .. translit .. BORDER
-- Do the main post-processing, based on the pattern substitutions in postprocess_tr_subs.
for _, sub in ipairs(postprocess_tr_subs) do
translit = rsub(translit, sub[1], sub[2])
end
translit = translit:gsub(BORDER, "")
return translit
end
-- #13: نقل الحركة + إدغام in a لفيف مقرون verb outside form I. Where the paradigm brings
-- two vowelled yāʾs together on a *quiescent* radical, the reference moves the first
-- yāʾ's vowel back onto that radical and geminates the pair: أَحْيَيَا -> أَحَيَّا,
-- يُحْيِيَانِ / تُحْيِيَانِ -> يُحِيَّانِ / تُحِيَّانِ, أَحْيِيَا -> أَحِيَّا (p302, form IV on حيي),
-- and the same five slots of اِسْتَحْيَا (p389, form X on the same root).
--
-- Only the نقل is done here. The إدغام is postprocess_subs' own "same letter separated
-- by a sukūn -> šadda" rule, which already puts the šadda in front of the vowel the way
-- the rest of the module writes it -- so this has to run *before* postprocess_forms(),
-- and does, from conjugate_verb().
--
-- The gate is that sukūn, and the reference's pages calibrate it from both sides:
-- * a *long* vowel in front of the first yāʾ can host nothing, and عايا (p287, form
-- III on عيي) prints يُعايِيانِ، تُعايِيانِ and عايِيا with both yāʾs. The pattern below
-- does not match them because there is no consonant + sukūn there to match;
-- * the second yāʾ has to carry a short vowel of its own. The control is in the same
-- columns of the pages that do contract: يُحْيِي (3ms), يُحْيِينَ (3fp) and تُحْيِينَ
-- (2fs), where it is the mater of a long ī, are printed uncontracted, and the
-- pattern does not match those either.
-- Between them the two conditions pick out exactly the five slots of p302 and p389 that
-- contract, against the twenty-odd cells of the same two paradigms that do not.
--
-- Form I is excluded, and by attestation rather than by phonology: حَيِيَ (p229, 017_159)
-- and عَيِيَ (p250, 238_159) put the identical consonant + sukūn + yāʾ sequence in their
-- مضارع and imperative duals and both print them uncontracted -- يَحْيَيانِ، اِحْيَيا،
-- يَعْيَيانِ، اِعْيَيا. Form I has its own version of this alternation, حَيَّ beside حَيِيَ,
-- and it is a different mechanism: the vowel is dropped rather than moved, which is why
-- make_form_i_hayy_verb() spells it out as a stem pair instead.
--
-- Added beside the uncontracted form and never instead of it: both spellings are
-- current, and form X already carries the two the module builds from its own stems
-- (اِسْتَحْيَيَا | اِسْتَحَيَا), so this is a third entry in a slot that already had a choice.
local NAQL_FROM = "(.)" .. SK .. Y .. "(" .. AIU .. ")" .. Y .. "(" .. AIU .. ")"
local NAQL_TO = "%1%2" .. Y .. SK .. Y .. "%3"
local function add_naql_idgham_forms(base)
-- "none" is a user-supplied paradigm with no verb form to reason from; form I is
-- excluded on the evidence above.
if base.verb_form == "I" or base.verb_form == "none" then
return
end
-- Collected first and inserted afterwards: inserting into base.forms while iterating
-- over it would let a contracted form be re-read as a source in the same pass.
local additions
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
local naql, changed = rsubb(form.form, NAQL_FROM, NAQL_TO)
if changed then
additions = additions or {}
additions[#additions + 1] = {slot, {form = naql, footnotes = form.footnotes}}
end
end
end
if additions then
for _, addition in ipairs(additions) do
iut.insert_form(base.forms, addition[1], addition[2])
end
end
end
local function postprocess_forms(base)
local converted_values = {}
for slot, forms in pairs(base.forms) do
local need_dedup = false
for i, form in ipairs(forms) do
local term = postprocess_term(form.form, base.orth)
local translit = form.translit and postprocess_translit(form.translit) or nil
if term ~= form.form or translit ~= form.translit then
need_dedup = true
end
converted_values[i] = {term, translit}
end
if need_dedup then
local temp_dedup = {}
for i = 1, #forms do
local new_term, new_translit = unpack(converted_values[i])
if type(new_term) == "table" then
for _, nt in ipairs(new_term) do
local new_formobj = {
form = nt,
translit = new_translit,
footnotes = forms[i].footnotes,
}
iut.insert_form(temp_dedup, "temp", new_formobj)
end
else
local new_formobj = {
form = new_term,
translit = new_translit,
footnotes = forms[i].footnotes,
}
iut.insert_form(temp_dedup, "temp", new_formobj)
end
end
base.forms[slot] = temp_dedup.temp
end
end
end
local function process_slot_overrides(base)
for slot, forms in pairs(base.slot_overrides) do
local existing_values = base.forms[slot]
base.forms[slot] = nil
for _, form in ipairs(forms) do
-- + in active participle for form I requests slot ap1
if form.form == "+" and (base.verb_form ~= "I" or slot ~= "ap") then
if not existing_values then
error(("Slot '%s' requested the default value but no such value available"):format(slot))
end
-- We maintain an invariant that no two slots share a form object (although they may share the footnote
-- lists inside the form objects). However, there is no need to copy the form objects here because there
-- is a one-to-one correspondence between slots and slot overrides, i.e. you can't have a default value
-- go into two slots.
insert_form_or_forms(base, slot, existing_values, "allow overrides", form.uncertain)
elseif default_indicator_to_active_participle_slot[form.form] then
if form.form == "++" then
if slot ~= "vn" and slot ~= "ap" and slot ~= "pp" then
error(("Secondary default value request '++' only applicable to verbal nouns and pariciples, but found in slot '%s'"):
format(slot))
end
else
if slot ~= "ap" then
error(("Secondary default value request '%s' only applicable to active pariciples, but found in slot '%s'"):
format(form.form, slot))
end
end
local secondary_default_slot =
slot == "vn" and "vn2" or slot == "pp" and "pp2" or
default_indicator_to_active_participle_slot[form.form]
local existing_values = base.forms[secondary_default_slot]
if not existing_values then
error(("Slot '%s' requested a secondary default value using '%s' but no such value available"):
format(slot, form.form))
end
-- See comment above about the lack of need to copy the form objects.
insert_form_or_forms(base, slot, existing_values, "allow overrides", form.uncertain)
-- To make sure there aren't shared form objects.
base.forms[secondary_default_slot] = nil
else
insert_form_or_forms(base, slot, form, "allow overrides", form.uncertain)
end
end
end
-- Now, for non-stative form-I verbs, fill the active participle slot from ap1 unless it should be missing (e.g.
-- passive-only or user specified 'ap:-').
if base.verb_form == "I" and not base.forms.ap and base.forms.ap1 and not skip_slot(base, "ap") then
local saw_non_stative = false
for _, vowel_spec in ipairs(base.conj_vowels) do
if req(vowel_spec.past, A) then
saw_non_stative = true
break
end
end
if saw_non_stative then
base.forms.ap = base.forms.ap1
-- To make sure there aren't shared form objects.
base.forms.ap1 = nil
end
end
end
local function handle_lemma_linked(base)
-- Compute linked versions of potential lemma slots, for use in {{ar-verb}}. We substitute the original lemma
-- (before removing links) for forms that are the same as the lemma, if the original lemma has links.
for _, slot in ipairs(export.potential_lemma_slots) do
if base.forms[slot] then
insert_form_or_forms(base, slot .. "_linked", iut.map_forms(base.forms[slot], function(form)
if form == base.lemma and rfind(base.linked_lemma, "%[%[") then
return base.linked_lemma
else
return form
end
end))
end
end
end
-- Process specs given by the user using 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'.
local function process_addnote_specs(base)
for _, spec in ipairs(base.addnote_specs) do
for _, slot_spec in ipairs(spec.slot_specs) do
slot_spec = "^" .. slot_spec .. "$"
for slot, forms in pairs(base.forms) do
if rfind(slot, slot_spec) then
-- To save on memory, side-effect the existing forms.
for _, form in ipairs(forms) do
form.footnotes = iut.combine_footnotes(form.footnotes, spec.footnotes)
end
end
end
end
end
end
local function add_missing_links_to_forms(base)
-- Any forms without links should get them now. Redundant ones will be stripped later.
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
form.form = "[[" .. form.form .. "]]"
end
end
end
end
local function conjugate_verb(base)
construct_stems(base)
-- Orthographic exemptions the shared hamza/reduction passes can't decide for
-- themselves; see the block comment on postprocess_term(). Most are set by the
-- stem builder that knows the fact, so this table has to exist before dispatch.
base.orth = base.orth or {}
for _, vowel_spec in ipairs(base.conj_vowels) do
-- Reconstruct conjugation type from verb form and (possibly inferred) weakness.
conj_type = base.verb_form .. "-" .. vowel_spec.weakness
-- #14: a hamza-initial form VIII spells its 1s مضارع analytically (أَأْتَمِنُ), where
-- form I of a hamza-initial root contracts to a madda (آتِي) from the identical
-- sequence. Declared here rather than in the four VIII builders because it holds
-- for all of them and depends on nothing else they compute.
if base.verb_form == "VIII" and vowel_spec.rad1 and rfind(rget(vowel_spec.rad1) or "", HAMZA_ANY) then
base.orth.analytic_hamza = true
end
-- #12: a final-weak verb whose rad2 is a hamza. Two of the shared passes read that
-- radical as an ordinary word-final hamza and get it wrong in the two slots where
-- rad3 stops being a consonant -- see the two clauses in postprocess_term(). Like
-- #14 this is declared here rather than in a builder: it holds for every form the
-- root can take (شأو, فأو, رأو, وأي in the corpus, forms I, II, IV and VIII) and
-- depends on nothing else the builders compute.
if rfind(vowel_spec.weakness or "", "final%-weak") and vowel_spec.rad2 and
rfind(rget(vowel_spec.rad2) or "", HAMZA_ANY) then
base.orth.hamza_rad2_final_weak = true
end
-- Check that the conjugation type is recognized.
if not conjugations[conj_type] then
error("Unknown conjugation type '" .. conj_type .. "'")
end
-- The way the conjugation functions work is they always add entries to the appropriate parts of the paradigm
-- (each of which is an array), rather than setting the values. This makes it possible to call more than one
-- conjugation function and essentially get a paradigm of the "either A or B" kind. Doing this may insert
-- duplicate entries into a particular paradigm part, but this is not a problem because we check for duplicate
-- entries when adding them, and don't insert in that case.
conjugations[conj_type](base, vowel_spec)
end
-- #13: before postprocess_forms(), which supplies the إدغام half of the alternation.
add_naql_idgham_forms(base)
postprocess_forms(base)
process_slot_overrides(base)
-- This should happen before add_missing_links_to_forms() so that the comparison `form == base.lemma` in
-- handle_lemma_linked() works correctly and compares unlinked forms to unlinked forms.
handle_lemma_linked(base)
process_addnote_specs(base)
if not base.alternant_multiword_spec.args.noautolinkverb then
add_missing_links_to_forms(base)
end
end
local function parse_indicator_spec(angle_bracket_spec)
-- Store the original angle bracket spec so we can reconstruct the overall conj spec with the lemma(s) in them.
local base = {
angle_bracket_spec = angle_bracket_spec,
conj_vowels = {},
root_consonants = {},
user_stem_overrides = {},
user_slot_overrides = {},
slot_explicitly_missing = {},
slot_uncertain = {},
slot_override_uses_default = {},
addnote_specs = {},
}
local function parse_err(msg)
error(msg .. ": " .. angle_bracket_spec)
end
local function fetch_footnotes(separated_group)
local footnotes
for j = 2, #separated_group - 1, 2 do
if separated_group[j + 1] ~= "" then
parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'")
end
if not footnotes then
footnotes = {}
end
table.insert(footnotes, separated_group[j])
end
return footnotes
end
local inside = angle_bracket_spec:match("^<(.*)>$")
assert(inside)
local segments = put.parse_multi_delimiter_balanced_segment_run(inside, {{"[", "]"}, {"<", ">"}})
local dot_separated_groups = put.split_alternating_runs_and_strip_spaces(segments, "%.")
-- The first dot-separated element must specify the verb form, e.g. IV or IIq. If the form is I, it needs to include
-- the the past and non-past vowels, e.g. I/a~u for kataba ~ yaktubu. More than one vowel can be given,
-- comma-separated, and more than one past~non-past pair can be given, slash-separated, e.g. I/a,u~u/i~a for form I
-- كمل, which can be conjugated as kamala/kamula ~ yakmulu or kamila ~ yakmalu. An individual vowel spec must be one
-- of a, i or u and in general (a) at least one past~non-past pair most be given, and (b) both past and non-past
-- vowels must be given even though sometimes the vowel can be determined from the unvocalized form. An exception is
-- passive-only verbs, where the vowels can't in general be determined (except indirectly in some cases by looking
-- at an associated non-passive verb); in that case, the vowel~vowel spec can left out.
local slash_separated_groups = put.split_alternating_runs_and_strip_spaces(dot_separated_groups[1], "/")
local form_spec = slash_separated_groups[1]
base.form_footnotes = fetch_footnotes(form_spec)
if form_spec[1] == "" then
parse_err("Missing verb form")
end
if not allowed_vforms_with_weakness_set[form_spec[1]] then
parse_err(("Unrecognized verb form '%s', should be one of %s"):format(
form_spec[1], list_to_text(allowed_vforms, nil, " or ")))
end
if form_spec[1]:find("%-") then
base.verb_form, base.explicit_weakness = form_spec[1]:match("^(.-)%-(.*)$")
else
base.verb_form = form_spec[1]
end
if #slash_separated_groups > 1 then
if base.verb_form ~= "I" then
parse_err(("Past~non-past vowels can only be specified when verb form is I, but saw form '%s'"):format(
base.verb_form))
end
for i = 2, #slash_separated_groups do
local slash_separated_group = slash_separated_groups[i]
local tilde_separated_groups = put.split_alternating_runs_and_strip_spaces(slash_separated_group, "~")
if #tilde_separated_groups ~= 2 then
parse_err(("Expected two tilde-separated vowel specs: %s"):format(table.concat(slash_separated_group)))
end
local function parse_conj_vowels(tilde_separated_group, vtype)
local conj_vowel_objects = {}
local comma_separated_groups = put.split_alternating_runs_and_strip_spaces(tilde_separated_group, ",")
for _, comma_separated_group in ipairs(comma_separated_groups) do
local conj_vowel = comma_separated_group[1]
if conj_vowel ~= "a" and conj_vowel ~= "i" and conj_vowel ~= "u" then
parse_err(("Expected %s conjugation vowel '%s' to be one of a, i or u in %s"):format(
vtype, conj_vowel, table.concat(slash_separated_group)))
end
conj_vowel = dia[conj_vowel]
local conj_vowel_footnotes = fetch_footnotes(comma_separated_group)
-- Try to use strings when possible as it makes q() significantly more efficient.
if conj_vowel_footnotes then
table.insert(conj_vowel_objects, {form = conj_vowel, footnotes = conj_vowel_footnotes})
else
table.insert(conj_vowel_objects, conj_vowel)
end
end
return conj_vowel_objects
end
local conj_vowel_spec = {
past = parse_conj_vowels(tilde_separated_groups[1], "past"),
nonpast = parse_conj_vowels(tilde_separated_groups[2], "non-past"),
}
table.insert(base.conj_vowels, conj_vowel_spec)
end
end
for i = 2, #dot_separated_groups do
local dot_separated_group = dot_separated_groups[i]
local first_element = dot_separated_group[1]
if first_element == "addnote" then
local spec_and_footnotes = fetch_footnotes(dot_separated_group)
if #spec_and_footnotes < 2 then
parse_err("Spec with 'addnote' should be of the form 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'")
end
local slot_spec = table.remove(spec_and_footnotes, 1)
local slot_spec_inside = rmatch(slot_spec, "^%[(.*)%]$")
if not slot_spec_inside then
parse_err("Internal error: slot_spec " .. slot_spec .. " should be surrounded with brackets")
end
local slot_specs = rsplit(slot_spec_inside, ",")
-- FIXME: Here, [[Module:it-verb]] called strip_spaces(). Generally we don't do this. Should we?
table.insert(base.addnote_specs, {slot_specs = slot_specs, footnotes = spec_and_footnotes})
elseif first_element:find("^var:") then
if #dot_separated_group > 1 then
parse_err(("Can't attach footnotes to 'var:' spec '%s'"):format(first_element))
end
base.variant = first_element:match("^var:(.*)$")
elseif first_element:find("^I+V?:") then
local root_cons, root_cons_value = first_element:match("^(I+V?):(.*)$")
local root_index
if root_cons == "I" then
root_index = 1
elseif root_cons == "II" then
root_index = 2
elseif root_cons == "III" then
root_index = 3
elseif root_cons == "IV" then
root_index = 4
if not base.verb_form:find("q$") then
parse_err(("Can't specify root consonant IV for non-quadriliteral verb form '%s': %s"):format(
base.verb_form, first_element))
end
end
local cons, translit = root_cons_value:match("^(.*)//(.*)$")
if not cons then
cons = root_cons_value
end
local root_footnotes = fetch_footnotes(dot_separated_group)
if not translit and not root_footnotes then
base.root_consonants[root_index] = cons
else
base.root_consonants[root_index] = {form = cons, translit = translit, footnotes = root_footnotes}
end
elseif first_element:find("^[a-z][a-z0-9_]*:") then
local slot_or_stem, remainder = first_element:match("^(.-):(.*)$")
dot_separated_group[1] = remainder
local comma_separated_groups = put.split_alternating_runs_and_strip_spaces(dot_separated_group, "[,،]")
if overridable_stems[slot_or_stem] then
if base.user_stem_overrides[slot_or_stem] then
parse_err("Overridable stem '" .. slot_or_stem .. "' specified twice")
end
base.user_stem_overrides[slot_or_stem] = overridable_stems[slot_or_stem](comma_separated_groups,
{prefix = slot_or_stem, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
else -- assume a form override; we validate further later when the possible slots are available
if base.user_slot_overrides[slot_or_stem] then
parse_err("Form override '" .. slot_or_stem .. "' specified twice")
end
base.user_slot_overrides[slot_or_stem] = allow_multiple_values_for_override(comma_separated_groups,
{prefix = slot_or_stem, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes},
"is form override")
end
elseif indicator_flags[first_element] then
if #dot_separated_group > 1 then
parse_err("No footnotes allowed with '" .. first_element .. "' spec")
end
if base[first_element] then
parse_err("Spec '" .. first_element .. "' specified twice")
end
base[first_element] = true
else
local passive, uncertain = first_element:match("^(.*)(%?)$")
passive = passive or first_element
uncertain = not not uncertain
if passive_types[passive] then
if #dot_separated_group > 1 then
parse_err("No footnotes allowed with '" .. passive .. "' spec")
end
if base.passive then
parse_err("Value for passive type specified twice")
end
base.passive = passive
base.passive_uncertain = uncertain
else
parse_err("Unrecognized spec '" .. first_element .. "'")
end
end
end
return base
end
-- Normalize all lemmas, substituting the pagename for blank lemmas and adding links to multiword lemmas.
local function normalize_all_lemmas(alternant_multiword_spec, head)
-- (1) Add links to all before and after text. Remember the original text so we can reconstruct the verb spec later.
if not alternant_multiword_spec.args.noautolinktext then
iut.add_links_to_before_and_after_text(alternant_multiword_spec, "remember original")
end
-- (2) Remove any links from the lemma, but remember the original form so we can use it below in the 'lemma_linked'
-- form.
iut.map_word_specs(alternant_multiword_spec, function(base)
if base.lemma == "" then
base.lemma = head
end
base.user_specified_lemma = base.lemma
base.lemma = m_links.remove_links(base.lemma)
base.user_specified_verb = base.lemma
base.verb = base.user_specified_verb
local linked_lemma
if alternant_multiword_spec.args.noautolinkverb or base.user_specified_lemma:find("%[%[") then
linked_lemma = base.user_specified_lemma
else
-- Add links to the lemma so the user doesn't specifically need to, since we preserve
-- links in multiword lemmas and include links in non-lemma forms rather than allowing
-- the entire form to be a link.
linked_lemma = iut.add_links(base.user_specified_lemma)
end
base.linked_lemma = linked_lemma
end)
end
--W: Lexical exceptions — hollow roots in the Form I فَعُلَ pattern (past~non-past u~u)
-- that keep the middle radical SOUND instead of contracting to a long vowel (هَيُؤَ /
-- يَهْيُؤُ, not هَاءَ / يَهُوءُ). This is not the general rule for u~u hollow verbs --
-- طَالَ / يَطُولُ (ط-و-ل) contracts as normal -- so each entry here is a specific
-- attested exception, not a phonological class.
-- Keyed by rad1..rad2..rad3.
-- Keyed with bare hamza (ء) for rad3, matching normalize_root()'s canonicalization of root radicals
-- (HAMZA_ON_ALIF etc. all fold to HAMZA) -- the raw root "هيأ" normalizes to radicals ه, ي, ء.
local SOUND_FORM_I_UU_ROOTS = {
["هي" .. HAMZA] = true, -- هَيُؤَ ـُ: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان، ط2، 1995، ص203
}
-- Determine weakness from radicals. Used when root given in place of lemma (e.g. for {{ar-verb forms}}).
-- `past_vowel`/`nonpast_vowel`, if given, are the past/non-past vowel of a form-I verb (a string or
-- footnote-bearing form object, per `req()`); they let SOUND_FORM_I_UU_ROOTS single out the specific
-- vowel pattern under which a hollow root is attested as sound, without affecting its other patterns
-- (e.g. a root could still contract normally under a different past~non-past pairing).
local function weakness_from_radicals(form, rad1, rad2, rad3, rad4, past_vowel, nonpast_vowel)
local weakness = nil
local quadlit = form:find("q$")
-- If weakness unspecified, derive from radicals.
if not quadlit then
if is_waw_ya(rad3) and rad1 == W and form == "I" then
weakness = form_i_w_assimilated(past_vowel, nonpast_vowel, rad1, rad2, rad3) and "assimilated+final-weak" or
"final-weak"
elseif is_waw_ya(rad3) and vform_supports_final_weak(form) then
weakness = "final-weak"
elseif rad2 == rad3 and vform_supports_geminate(form) then
-- ...unless the source prints the فكّ rather than the إدغام for this
-- lexeme in this form (عالَلَ, تَعاثَثَ); see SOUND_ROOTS.
weakness = SOUND_ROOTS[form .. ":" .. rad1 .. rad2 .. rad3] and "sound" or "geminate"
elseif is_waw_ya(rad2) and vform_supports_hollow(form) then
--W: Both wāw (و) and yāʾ (ي) in the middle position create hollow verbs, in form I
-- (قَالَ from ق-و-ل, بَاعَ from ب-ي-ع) and in the augmented forms IV, VII, VIII, X
-- (أَتَاسَ from ت-ي-س, أَبَانَ from ب-ي-ن, أَطَاحَ from ط-ي-ح — معجم متن اللغة).
if SOUND_ROOTS[form .. ":" .. rad1 .. rad2 .. rad3] then
-- Lexical exceptions that keep the middle radical sound (أَفْيَلَ,
-- اِسْتَجْوَبَ) instead of contracting it; see SOUND_ROOTS.
weakness = "sound"
elseif form == "I" and past_vowel and nonpast_vowel and req(past_vowel, U) and req(nonpast_vowel, U) and
SOUND_FORM_I_UU_ROOTS[rad1 .. rad2 .. rad3] then
-- Lexical exceptions whose Form I فَعُلَ keeps the middle radical sound (هَيُؤَ); see
-- SOUND_FORM_I_UU_ROOTS. Gated to u~u specifically since that's the attested pattern.
weakness = "sound"
else
weakness = "hollow"
end
elseif rad1 == W and form == "I" then
-- Vowel-conditioned, like the lemma path below: a wāw-initial form-I verb only
-- elides its wāw under a kasra (or lowered-kasra) non-past. Before this, the two
-- inference paths in this module disagreed -- infer_radicals() kept the wāw for
-- i~a and u~u while this one dropped it for every vowel pattern.
weakness = form_i_w_assimilated(past_vowel, nonpast_vowel, rad1, rad2, rad3) and "assimilated" or "sound"
else
weakness = "sound"
end
else
if is_waw_ya(rad4) then
weakness = "final-weak"
else
weakness = "sound"
end
end
return weakness
end
-- Join the infixed tāʔ (ت) to the first radical in form VIII verbs. This may cause assimilation of the tāʔ to the
-- radical or in some cases the radical to the tāʔ. Used when a root is supplied instead of a lemma (which already has
-- the appropriate assimilation in it).
--W: `reduced` is |مدغم=. A hamza first radical assimilates into the infixed tāʾ the
-- same way a wāw does -- اِئْتَحَدَ becomes اِتَّحَدَ, اِئْتَزَرَ becomes اِتَّزَرَ, اِئْتَخَذَ
-- becomes اِتَّخَذَ -- but unlike the wāw it is optional, and this book prints the class
-- both ways: p358's اِئْتَمَنَ and اِئْتَشَرَ unassimilated beside p359's اِتَّحَدَ and
-- اِتَّزَرَ, all four under model 262 (افتعل مهموز الفاء). p359 states the derivation in
-- its own footnotes -- «أصلُ الفعلِ اِئْتَحَدَ» and «أصلُ الفعلِ اِئْتَزَرَ وهوَ الأصحُّ» --
-- so the أصل is the module's default and the assimilation is what the caller asks for.
-- Requested, never inferred from the radical: the same rule |مدغم= follows everywhere
-- else, and the reason p358 does not have to be wrong for p359 to be right.
local function form_viii_join_ta(rad, reduced)
if rad == W or rad == Y or rad == "ت" then return "تّ"
elseif rad == HAMZA and reduced then return "تّ"
elseif rad == "د" then return "دّ"
elseif rad == "ث" then return "ثّ"
elseif rad == "ذ" then return "ذّ"
elseif rad == "ز" then return "زْد"
elseif rad == "ص" then return "صْط"
elseif rad == "ض" then return "ضْط"
elseif rad == "ط" then return "طّ"
elseif rad == "ظ" then return "ظّ"
else return rad .. SK .. "ت"
end
end
local function detect_indicator_spec(base)
base.forms = {}
base.stem_overrides = {}
base.slot_overrides = {}
if not base.conj_vowels[1] then
-- These may be converted to inferred vowels. If not, we throw an error if form I and not passive-only.
base.conj_vowels = {{
past = "-",
nonpast = "-",
}}
else
-- If multiple vowels specified for a given vowel type (e.g. a,u~u), expand so that each spec in
local expansion = {}
for _, spec in ipairs(base.conj_vowels) do
for _, past in ipairs(spec.past) do
for _, nonpast in ipairs(spec.nonpast) do
table.insert(expansion, {past = past, nonpast = nonpast})
end
end
end
base.conj_vowels = expansion
end
local vform = base.verb_form
-- check for quadriliteral form (Iq, IIq, IIIq, IVq)
base.quadlit = not not vform:find("q$")
-- Infer radicals as necessary. We infer a separate set of radicals for each past~non-past vowel combination because
-- they may be different (particularly with form-I hollow verbs).
for _, vowel_spec in ipairs(base.conj_vowels) do
-- NOTE: rad1, rad2, etc. refer to user-specified radicals, which are formobj tables that optionally specify an
-- explicit manual translit, whereas ir1, ir2, etc. refer to inferred radicals, which are either strings or
-- lists of possible radicals.
local rads = base.root_consonants
local rad1, rad2, rad3, rad4 = rads[1], rads[2], rads[3], rads[4]
-- Default any unspecified radicals to radicals determined from the headword. The returned radicals may be
-- lists of possible radicals, where the first radical should be chosen if the user didn't explicitly specify a
-- radical but all are allowed. If `ambig = true` is set in the table, the radical is considered ambiguous and
-- categories won't be created for weak radicals.
local weakness, ir1, ir2, ir3, ir4
if vform ~= "none" then
ir1, ir2, ir3 = rmatch(base.lemma, "^([^_])_([^_])_([^_])$")
if not ir1 then
ir1, ir2, ir3, ir4 = rmatch(base.lemma, "^([^_])_([^_])_([^_])_([^_])$")
end
if ir1 then
-- root given instead of lemma
weakness = weakness_from_radicals(vform, ir1, ir2, ir3, ir4, vowel_spec.past, vowel_spec.nonpast)
if vform == "VIII" then
vowel_spec.form_viii_assim = form_viii_join_ta(ir1, base.reduced)
end
else
local ret = export.infer_radicals {
headword = base.lemma,
vform = vform,
passive = base.passive,
past_vowel = vowel_spec.past,
nonpast_vowel = vowel_spec.nonpast,
is_reduced = base.reduced,
}
weakness, ir1, ir2, ir3, ir4 = ret.weakness, ret.rad1, ret.rad2, ret.rad3, ret.rad4
vowel_spec.form_viii_assim = ret.form_viii_assim
vowel_spec.past = ret.past_vowel
vowel_spec.nonpast = ret.nonpast_vowel
vowel_spec.variant = base.variant or ret.variant
end
end
-- For most ambiguous radicals, the choice of radical doesn't matter because it doesn't affect the conjugation
-- one way or another. For form I hollow verbs, however, it definitely does. In fact, the choice of radical is
-- critical even beyond the past and non-past vowels because it affects the form of the passive participle. So,
-- check for this and signal an error if the radical could not be inferred and is not given explicitly.
if vform == "I" and type(ir2) == "table" and ir2.need_radical and not rad2 then
error("Unable to guess middle radical of hollow form I verb; need to specify radical explicitly")
end
if vform == "I" and not is_passive_only(base.passive) and (
rget(vowel_spec.past) == "-" or rget(vowel_spec.nonpast) == "-") then
error("Form I verb that isn't passive-only or final-weak must have past~non-past vowels specified")
end
-- Convert ambiguous radicals.
local function regularize_inferred_radical(rad)
if type(rad) == "table" then
if rad.ambig then
return {form = rad[1], ambig = true}
else
return rad[1]
end
else
return rad
end
end
-- Return the appropriate radical at index `index` (1 through 4), based either on the user-specified radical
-- `user_radical` or (if unspecified) `inferred_radical`, inferred from the unvocalized lemma. Two values are
-- returned, the "regularized" version of the radical (where ambiguous inferred radicals are converted to their
-- most likely actual radical) and the non-regularized version. The returned values are form objects rather than
-- strings.
local function fetch_radical(user_radical, inferred_radical, index)
if not user_radical then
return regularize_inferred_radical(inferred_radical), inferred_radical
else
local rad_formval = rget(user_radical)
if type(inferred_radical) == "table" then
local allowed_radical_set = m_table.listToSet(inferred_radical)
if not allowed_radical_set[rad_formval] then
error(("For lemma %s, radical %s ambiguously inferred as %s but user radical incompatibly given as %s"):
format(base.lemma, index,
list_to_text(inferred_radical, nil, " or "), rad_formval))
end
elseif rad_formval ~= inferred_radical then
error(("For lemma %s, radical %s inferred as %s but user radical incompatibly given as %s"):
format(base.lemma, index, inferred_radical, rad_formval))
end
return user_radical, user_radical
end
end
if vform ~= "none" then
vowel_spec.rad1, vowel_spec.unreg_rad1 = fetch_radical(rad1, ir1, 1)
vowel_spec.rad2, vowel_spec.unreg_rad2 = fetch_radical(rad2, ir2, 2)
vowel_spec.rad3, vowel_spec.unreg_rad3 = fetch_radical(rad3, ir3, 3)
if base.quadlit then
vowel_spec.rad4, vowel_spec.unreg_rad4 = fetch_radical(rad4, ir4, 4)
end
end
if vform == "I" then
-- If explicit weakness given using 'I-sound' or 'I-assimilated', we may need to adjust the inferred weakness.
if base.explicit_weakness == "sound" then
if weakness == "assimilated" then
weakness = "sound"
elseif weakness == "assimilated+final-weak" then
-- Verbs like waniya~yawnā "to be faint; to languish" (although the defaults should handle this
-- correctly)
weakness = "final-weak"
else
error(("Can't specify form 'I-sound' when inferred weakness is '%s' for lemma %s"):format(
weakness, base.lemma))
end
elseif base.explicit_weakness == "assimilated" then
if weakness == "sound" then
-- i~a verbs like waṭiʔa~yaṭaʔu "to tread, to trample"; wasiʕa~yasaʕu "to be spacious; to be well-off";
-- waṯiʔa~yaṯaʔu "to get bruised, to be sprained", which would default to sound.
weakness = "assimilated"
elseif weakness == "final-weak" then
-- For completeness; not clear if any verbs occur where this is needed. (There are plenty of
-- assimilated+final-weak verbs but the defaults should take care of them.)
weakness = "assimilated+final-weak"
else
error(("Can't specify form 'I-assimilated' when inferred weakness is '%s' for lemma %s"):format(
weakness, base.lemma))
end
elseif base.explicit_weakness then
error(("Internal error: Unrecognized value '%s' for base.explicit_weakness"):format(base.explicit_weakness))
end
elseif vform == "none" then
weakness = base.explicit_weakness
elseif base.explicit_weakness then
error(("Internal error: Explicit weakness should not be specifiable except with forms I and none, but saw explicit weakness '%s' with verb form '%s'"):
format(base.explicit_weakness, vform))
end
vowel_spec.weakness = weakness
if vform ~= "none" then
-- Error if radicals are wrong given the weakness. More likely to happen if the weakness is explicitly given
-- rather than inferred. Will also happen if certain incorrect letters are included as radicals e.g. hamza on
-- top of various letters, alif maqṣūra, tā' marbūṭa.
check_radicals(vform, weakness, rget(vowel_spec.rad1), rget(vowel_spec.rad2), rget(vowel_spec.rad3),
base.quadlit and rget(vowel_spec.rad4) or nil)
end
-- Check the variant value.
local form_iii_vi_geminate = (vform == "III" or vform == "VI") and rget(vowel_spec.rad2) == rget(vowel_spec.rad3) and
not req(vowel_spec.rad2, Y)
local hayy_i_x = hayy_radicals(vowel_spec.rad1, vowel_spec.rad2, vowel_spec.rad3) and (vform == "I" or vform == "X")
if form_iii_vi_geminate or hayy_i_x then
if vowel_spec.variant and vowel_spec.variant ~= "long" and vowel_spec.variant ~= "short" and vowel_spec.variant ~= "both" then
error(("For form-III/VI geminate verb or form-I/X verb with ح-ي-ي radicals, saw unrecognized 'var:%s' value; should be 'var:long', 'var:short' or 'var:both'"):format(
vowel_spec.variant))
end
elseif vowel_spec.variant then
error(("Variant value 'var:%s' not allowed in this context"):format(vowel_spec.variant))
end
end
-- If form I, regroup expanded vowels for display purposes.
if vform == "I" then
local group_by_past = {}
for _, vowel_spec in ipairs(base.conj_vowels) do
m_table.insertIfNot(group_by_past, {
past = undia[rget(vowel_spec.past)],
nonpasts = {undia[rget(vowel_spec.nonpast)]},
}, {
key = function(obj) return obj.past end,
combine = function(obj1, obj2)
for _, nonpast in ipairs(obj2.nonpasts) do
m_table.insertIfNot(obj1.nonpasts, nonpast)
end
end,
})
end
local group_by_nonpast = {}
for _, vowel_spec in ipairs(group_by_past) do
m_table.insertIfNot(group_by_nonpast, {
pasts = {vowel_spec.past},
nonpasts = vowel_spec.nonpasts,
}, {
key = function(obj) return obj.nonpasts end,
combine = function(obj1, obj2)
for _, past in ipairs(obj2.pasts) do
m_table.insertIfNot(obj1.pasts, past)
end
end,
})
end
base.grouped_conj_vowels = group_by_nonpast
end
-- Set value of passive. If not specified, default is yes for forms II, III, IV and Iq; no but uncertainly for
-- forms VII, IX, XI - XV and IIIq - IVq, as well as form I with past vowel u; impersonal but uncertainly for form
-- V, VI, X and IIq, as well as form I with past vowel i; and yes but uncertainly for the remainder (form I with
-- past vowel only a and form VIII).
if not base.passive then
base.passive_defaulted = true
-- Temporary tracking for defaulted passives by verb form, weakness and (for form I) past/non-past vowels.
track_if_ar_conj(base, "passive-defaulted/" .. vform)
for _, vowel_spec in ipairs(base.conj_vowels) do
track_if_ar_conj(base, "passive-defaulted/" .. vform.. "/" .. vowel_spec.weakness)
if vform == "I" then
--W: use rget(); the vowel is a form object when the user attached a footnote
-- (e.g. <I/a[نادر]~u>), and undia[<table>] is nil, which crashes format() on Lua 5.1.
local past_nonpast = ("%s~%s"):format(undia[rget(vowel_spec.past)], undia[rget(vowel_spec.nonpast)])
track_if_ar_conj(base, "passive-defaulted/I/" .. past_nonpast)
track_if_ar_conj(base, "passive-defaulted/I/" .. vowel_spec.weakness .. "/" .. past_nonpast)
end
end
if vform_probably_full_passive(vform) then
base.passive = "pass"
else
base.passive_uncertain = true
for _, vowel_spec in ipairs(base.conj_vowels) do
if vform_probably_no_passive(vform, vowel_spec.weakness, vowel_spec.past, vowel_spec.nonpast) then
base.passive = "nopass"
break
elseif vform_probably_impersonal_passive(vform, vowel_spec.weakness, vowel_spec.past,
vowel_spec.nonpast) then
base.passive = "ipass"
break
end
end
base.passive = base.passive or "pass"
end
end
-- NOTE: Currently there are no built-in stems or form overrides for Arabic; this code is inherited from
-- [[Module:ca-verb]], where such things do exist, and is kept for generality in case we decide in the future to
-- implement such things.
-- Override built-in verb stems and overrides with user-specified ones.
for stem, values in pairs(base.user_stem_overrides) do
base.stem_overrides[stem] = values
end
for slot, values in pairs(base.user_slot_overrides) do
if not base.alternant_multiword_spec.verb_slots_map[slot] then
error("Unrecognized override slot '" .. slot .. "': " .. base.angle_bracket_spec)
end
if export.unsettable_slots_set[slot] then
error("Slot '" .. slot .. "' cannot be set using an override: " .. base.angle_bracket_spec)
end
if skip_slot(base, slot, "allow overrides") then
error("Override slot '" .. slot ..
"' would be skipped based on the passive, 'noimp' and/or 'no_nonpast' settings: " ..
base.angle_bracket_spec)
end
base.slot_overrides[slot] = values
end
if base.verb_form == "none-final-weak" then
for _, stem_type in ipairs { "past", "past_pass", "nonpast", "nonpast_pass" } do
if base.stem_overrides[stem_type .. "_c"] or base.stem_overrides[stem_type .. "_v"] then
error(("Specify past stem for verb type 'none-final-weak' using '%s:...' not '%s_c:...' or '%s_v:...'"):
format(stem_type, stem_type, stem_type))
end
end
for _, stem_type in ipairs { "past", "nonpast" } do
if base.stem_overrides[stem_type] or not base.stem_overrides[stem_type .. "_final_weak_vowel"] then
error(("For verb type 'none-final-weak', if '%s:...' specified, so must '%s_final_weak_vowel:...'"):
format(stem_type, stem_type))
end
end
end
end
local function detect_all_indicator_specs(alternant_multiword_spec)
add_slots(alternant_multiword_spec)
alternant_multiword_spec.verb_forms = {}
-- This means at least one individual base had the slot marked as explicitly missing. Another base (e.g. when
-- there are multiple alternants) might have a value for the slot. In practice, we only respect this when there are
-- no overall values in the slot and `slot_uncertain` isn't set; in this case, we display "no ..." for the slot
-- instead of simply not displaying anything for the slot.
alternant_multiword_spec.slot_explicitly_missing = {}
-- This means at least one individual base had no values for the slot and the slot marked as explicitly uncertain.
-- Note that this is different from a value being present but marked as uncertain (e.g. if an override was given
-- with a ? after it); this causes the form object for the value to have `uncertain = true` set. If there are no
-- overall values in the slot and `slot_uncertain` is set, we display this in the headword.
alternant_multiword_spec.slot_uncertain = {}
iut.map_word_specs(alternant_multiword_spec, function(base)
-- So arguments, etc. can be accessed. WARNING: Creates circular reference.
base.alternant_multiword_spec = alternant_multiword_spec
detect_indicator_spec(base)
if not base.nocat then
m_table.insertIfNot(alternant_multiword_spec.verb_forms, base.verb_form)
end
if base.passive then
alternant_multiword_spec.passive = base.passive
end
if base.passive_uncertain then
alternant_multiword_spec.passive_uncertain = true
end
for slot, _ in pairs(base.slot_explicitly_missing) do
alternant_multiword_spec.slot_explicitly_missing[slot] = true
end
end)
end
local function determine_slot_uncertainty_from_forms(alternant_multiword_spec)
iut.map_word_specs(alternant_multiword_spec, function(base)
-- If no verbal noun and verb form is not 'none' (manually-specified stems) — which currently only happens for
-- form I — and the verbal noun wasn't explicitly indicated as missing using <vn:->, we assume it's just
-- unknown/unspecified rather than missing. Same with active participles.
for uncertain_slot, _ in pairs(slots_that_may_be_uncertain) do
if not base.forms[uncertain_slot] and vform ~= "none" and not skip_slot(base, uncertain_slot) then
base.slot_uncertain[uncertain_slot] = true
end
end
-- Propagate slot uncertainty up. Currently only the verbal noun can have this set but we write the code
-- generally.
for slot, _ in pairs(base.slot_uncertain) do
alternant_multiword_spec.slot_uncertain[slot] = true
end
end)
-- If slot is uncertain and has no value, explicitly set its value to "?".
for uncertain_slot, _ in pairs(slots_that_may_be_uncertain) do
if not alternant_multiword_spec.forms[uncertain_slot] and
alternant_multiword_spec.slot_uncertain[uncertain_slot] then
alternant_multiword_spec.forms[uncertain_slot] = {{form = "?"}}
end
end
end
-- Determine certain properties of the verb from the overall forms, such as whether the verb is active-only or
-- passive-only, is impersonal, lacks an imperative, etc.
local function determine_verb_properties_from_forms(alternant_multiword_spec)
alternant_multiword_spec.has_active = false
alternant_multiword_spec.has_passive = false
alternant_multiword_spec.has_non_impers_active = false
alternant_multiword_spec.has_non_impers_passive = false
alternant_multiword_spec.has_imp = false
alternant_multiword_spec.has_past = false
alternant_multiword_spec.has_nonpast = false
for slot, _ in pairs(alternant_multiword_spec.forms) do
if slot == "ap" or slot:find("[123]") and not slot:find("_pass") then
alternant_multiword_spec.has_active = true
end
if slot == "pp" or slot:find("[123]") and slot:find("_pass") then
alternant_multiword_spec.has_passive = true
end
if slot:find("[123]") and not slot:find("pass_[123]") and not slot:find("3ms") then
alternant_multiword_spec.has_non_impers_active = true
end
if slot:find("pass_[123]") and not slot:find("3ms") then
alternant_multiword_spec.has_non_impers_passive = true
end
if slot:find("^imp_") then
alternant_multiword_spec.has_imp = true
end
if slot:find("^past_") then
alternant_multiword_spec.has_past = true
end
if slot:find("^ind_") or slot:find("^sub_") or slot:find("^juss_") then
alternant_multiword_spec.has_nonpast = true
end
end
end
local function add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma, insert_ann, insert_cat)
-- Useful e.g. in constructing suppletive verbs out of parts. For a verb like جاء or أتى whose imperative comes
-- from the unrelated verb تعالى, we don't want the latter verb showing up in categories or annotations.
if base.nocat then
return
end
local vform = base.verb_form
if vform ~= "none" then
insert_ann("form", vform)
insert_cat("form-" .. vform .. " verbs")
--W: Add morphological pattern corresponding to the form
local morph_pattern = FORM_TO_MORPHOLOGICAL_PATTERN[vform]
if morph_pattern then
insert_ann("morph_pattern", morph_pattern)
end
end
if base.reduced then
insert_ann("reduced", "reduced")
if vform ~= "none" then
insert_cat("form-" .. vform .. " reduced verbs")
end
end
if base.quadlit then
insert_cat("verbs with quadriliteral roots")
end
if base.passive_defaulted then
insert_cat("verbs with defaulted passive")
end
for _, vowel_spec in ipairs(base.conj_vowels) do
local rad1, rad2, rad3, rad4 = get_radicals_4(vowel_spec)
local final_weak = is_final_weak(base, vowel_spec)
local weakness = vowel_spec.weakness
-- We have to distinguish weakness by form and weakness by conjugation. Weakness by form merely indicates the
-- presence of weak letters in certain positions in the radicals. Weakness by conjugation is related to how the
-- verbs are conjugated. For example, form-II verbs that are "hollow by form" (middle radical is wāw or yāʾ) are
-- conjugated as sound verbs. Another example: form-I verbs with initial wāw are "assimilated by form" and most
-- are assimilated by conjugation as well, but a few are sound by conjugation, e.g. wajuha yawjuhu "to be
-- distinguished" (rather than wajuha yajuhu); similarly for some hollow-by-form verbs in various forms, e.g.
-- form VIII izdawaja yazdawiju "to be in pairs" (rather than izdāja yazdāju). Categories referring to weakness
-- always refer to weakness by conjugation; weakness by form is distinguished only by categories such as
-- [[:Category:Arabic form-III verbs with و as second radical]].
insert_ann("weakness", weakness)
if vform ~= "none" then
insert_cat(("%s form-%s verbs"):format(weakness, vform))
end
local function radical_is_ambiguous(rad)
return type(rad) == "table" and rad.ambig
end
local function radical_is_unambiguous_weak(rad)
return not radical_is_ambiguous(rad) and (is_waw_ya(rad) or req(rad, HAMZA))
end
if vform ~= "none" then
local ur1, ur2, ur3, ur4 =
vowel_spec.unreg_rad1, vowel_spec.unreg_rad2, vowel_spec.unreg_rad3, vowel_spec.unreg_rad4
-- Create headword categories based on the radicals. Do the following before
-- converting the Latin radicals into Arabic ones so we distinguish
-- between ambiguous and non-ambiguous radicals.
if radical_is_ambiguous(ur1) or radical_is_ambiguous(ur2) or radical_is_ambiguous(ur3) or
ur4 and radical_is_ambiguous(ur4) then
insert_cat("verbs with ambiguous radicals")
end
if radical_is_unambiguous_weak(ur1) then
insert_cat("form-" .. vform .. " verbs with " .. rget(ur1) .. " as first radical")
end
if radical_is_unambiguous_weak(ur2) then
insert_cat("form-" .. vform .. " verbs with " .. rget(ur2) .. " as second radical")
end
if radical_is_unambiguous_weak(ur3) then
insert_cat("form-" .. vform .. " verbs with " .. rget(ur3) .. " as third radical")
end
if ur4 and radical_is_unambiguous_weak(ur4) then
insert_cat("form-" .. vform .. " verbs with " .. rget(ur4) .. " as fourth radical")
end
end
end
if vform == "I" and not is_passive_only(base.passive) then
for _, vowel_spec in ipairs(base.grouped_conj_vowels) do
insert_ann("vowels",
("%s ~ %s"):format(table.concat(vowel_spec.pasts, "/"), table.concat(vowel_spec.nonpasts, "/")))
for _, past in ipairs(vowel_spec.pasts) do
for _, nonpast in ipairs(vowel_spec.nonpasts) do
if past == "-" or nonpast == "-" then
error("Internal error: Saw form I past vowel %s and non-past vowel %s but - in place of vowel should have triggered an error earlier")
end
insert_cat(("form-I verbs with past vowel %s and non-past vowel %s"):format(past, nonpast))
--W: Add morphological pattern for form I based on vowels
local form_i_with_vowels = ("I/%s~%s"):format(past, nonpast)
local morph_pattern = FORM_TO_MORPHOLOGICAL_PATTERN[form_i_with_vowels]
if morph_pattern then
insert_ann("morph_pattern", morph_pattern)
end
end
end
end
end
for slot, name in pairs(slots_that_may_be_uncertain) do
if base.slot_uncertain[slot] then
-- An unspecified and non-defaulted verbal noun (form I) is considered uncertain rather than explicitly
-- missing. Use <vn:-> to explicitly indicate the lack of verbal noun. Same for form-I stative active
-- participles.
insert_cat(("verbs with unknown or uncertain %ss"):format(name))
end
end
if base.irregular then
insert_ann("irreg", "irregular")
insert_cat("irregular verbs")
end
end
-- Compute the categories to add the verb to, as well as the annotation to display in the conjugation title bar. We
-- combine the code to do these functions as both categories and title bar contain similar information.
local function compute_categories_and_annotation(alternant_multiword_spec)
alternant_multiword_spec.categories = {}
local ann = {}
alternant_multiword_spec.annotation = ann
ann.form = {}
ann.morph_pattern = {} --W: arabic morphological pattern corresponding to the form
ann.weakness = {}
ann.vowels = {}
ann.passive = nil
ann.reduced = {}
ann.irreg = {}
ann.defective = {}
local multiword_lemma = false
for _, slot in ipairs(export.potential_lemma_slots) do
if alternant_multiword_spec.forms[slot] then
for _, formobj in ipairs(alternant_multiword_spec.forms[slot]) do
if formobj.form:find(" ") then
multiword_lemma = true
break
end
end
break
end
end
local function insert_ann(anntype, value)
m_table.insertIfNot(alternant_multiword_spec.annotation[anntype], value)
end
local function insert_cat(cat, also_when_multiword)
-- Don't place multiword terms in categories like 'Arabic form-II verbs' to avoid spamming the categories with
-- such terms.
if also_when_multiword or not multiword_lemma then
m_table.insertIfNot(alternant_multiword_spec.categories, "Arabic " .. cat)
end
end
iut.map_word_specs(alternant_multiword_spec, function(base)
add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma, insert_ann, insert_cat)
end)
for slot, name in pairs(slots_that_may_be_uncertain) do
if alternant_multiword_spec.forms[slot] then
for _, form in ipairs(alternant_multiword_spec.forms[slot]) do
if form.uncertain then
if form.form == "?" then
insert_cat(("verbs with explicitly unknown %ss"):format(name))
else
insert_cat(("verbs needing %s checked"):format(name))
end
break
end
end
end
end
if alternant_multiword_spec.has_active then
if alternant_multiword_spec.has_passive and alternant_multiword_spec.has_non_impers_passive then
insert_cat("verbs with full passive")
ann.passive = "full passive"
elseif alternant_multiword_spec.has_passive then
insert_cat("verbs with impersonal passive")
ann.passive = "impersonal passive"
else
insert_cat("verbs lacking passive forms")
ann.passive = "no passive"
end
else
if alternant_multiword_spec.has_non_impers_passive then
insert_cat("passive verbs")
insert_cat("verbs with full passive")
ann.passive = "passive-only"
else
insert_cat("passive verbs")
insert_cat("impersonal verbs")
insert_cat("verbs with impersonal passive")
ann.passive = "impersonal (passive-only)"
end
end
if alternant_multiword_spec.passive_uncertain then
insert_cat("verbs needing passive checked")
ann.passive = ann.passive .. ' <abbr title="passive status uncertain">(?)</abbr>'
end
if alternant_multiword_spec.has_active and not alternant_multiword_spec.has_imp then
insert_ann("defective", "no imperative")
insert_cat("verbs lacking imperative forms")
end
if not alternant_multiword_spec.has_past then
insert_ann("defective", "no past")
insert_cat("verbs lacking past forms")
end
if not alternant_multiword_spec.has_nonpast then
insert_ann("defective", "no non-past")
insert_cat("verbs lacking non-past forms")
end
local ann_parts = {}
local function insert_ann_part(part, conj)
local val = table.concat(ann[part], conj or " or ")
if val ~= "" and val ~= "regular" then
table.insert(ann_parts, val)
end
end
insert_ann_part("form")
insert_ann_part("weakness")
insert_ann_part("reduced")
insert_ann_part("vowels")
if ann.passive then
table.insert(ann_parts, ann.passive)
end
insert_ann_part("irreg")
insert_ann_part("defective", "، ")
--W: Save morph_pattern before overwriting annotation with string
alternant_multiword_spec.morph_pattern = ann.morph_pattern
alternant_multiword_spec.annotation = table.concat(ann_parts, "، ")
end
local function show_forms(alternant_multiword_spec)
local lemmas = {}
for _, slot in ipairs(export.potential_lemma_slots) do
if alternant_multiword_spec.forms[slot] then
for _, formobj in ipairs(alternant_multiword_spec.forms[slot]) do
table.insert(lemmas, formobj)
end
break
end
end
alternant_multiword_spec.lemmas = lemmas -- save for later use in make_table()
alternant_multiword_spec.vn = alternant_multiword_spec.forms.vn -- save for later use in make_table()
-- Reconstruct the original verb spec without overrides for verbal nouns and participles, since those specific slots
-- are ignored by {{ar-verb form}}. Compute this once beforehand; `transform_accel_obj` is called repeatedly on each
-- form and we don't want to compute this repeatedly.
local reconstructed_verb_spec = iut.reconstruct_original_spec(alternant_multiword_spec, {
preprocess_angle_bracket_spec = function(spec)
spec = spec:match("^<(.*)>$")
assert(spec)
local segments = put.parse_multi_delimiter_balanced_segment_run(spec, {{"[", "]"}, {"<", ">"}})
local dot_separated_groups = put.split_alternating_runs_and_strip_spaces(segments, "%.")
-- Rejoin each dot-separated group into a single string, since we aren't actually going to do any parsing
-- of bracket-bounded textual runs; then filter out overrides for verbal nouns and participles.
local filtered_indicators = {}
for _, dot_separated_group in ipairs(dot_separated_groups) do
local indicator = table.concat(dot_separated_group)
-- FIXME: Do we want to filter out any other indicators?
if not (indicator:find("^vn:") or indicator:find("^[ap]p:")) then
table.insert(filtered_indicators, indicator)
end
end
return ("<%s>"):format(table.concat(filtered_indicators, "."))
end,
})
-- If we're dealing with a single word, no alternants and a single verb form, use the auto-conjugation-fetching
-- variant.
local reconstructed_lemma, inside = reconstructed_verb_spec:match("^([^ <>()]+)(%b<>)$")
if inside and alternant_multiword_spec.verb_forms[1] and not alternant_multiword_spec.verb_forms[2] then
reconstructed_verb_spec = ("+%s<%s>"):format(reconstructed_lemma, alternant_multiword_spec.verb_forms[1])
end
local function transform_accel_obj(slot, formobj, accel_obj)
if not accel_obj then
return accel_obj
end
if slot == "ap" or slot == "pp" or slot == "vn" then
-- FIXME: [[Module:accel]] can't correctly handle more than one verb form for participles and verbal nouns
accel_obj.form = slot .. "-" .. table.concat(alternant_multiword_spec.verb_forms, "،")
else
accel_obj.form = "verb-form-" .. reconstructed_verb_spec
end
return accel_obj
end
local function generate_link(data)
local form = data.form
local term = form.formval_for_link
local alt = form.alt
if term == "?" then
term = nil
alt = "?"
end
--W: Create simple link for verb forms without #Arabic anchor
local display = alt or term
local link
if display then
link = link_term_simple(display)
else
link = ""
end
link = link .. iut.get_footnote_text(form.footnotes, data.footnote_obj)
--W: qualifier/label rendering removed along with the q/qq/l/ll modifiers;
-- it required [[Module:pron qualifier]], absent on ar.wiktionary.
return link
end
local props = {
lang = lang,
lemmas = lemmas,
transform_accel_obj = transform_accel_obj,
generate_link = generate_link,
slot_list = alternant_multiword_spec.verb_slots,
include_translit = false,
}
iut.show_forms(alternant_multiword_spec.forms, props)
end
--W: Tatweel and the invisible direction/joining marks survive copy-paste and
-- MediaWiki keeps them in page titles, so strip them from both sides before
-- comparing a |بؤرة= value against a generated form.
local FOCUS_IGNORE = "[" .. u(0x0640) .. u(0x061C) .. u(0x200B) .. "-" .. u(0x200F)
.. u(0x202A) .. "-" .. u(0x202E) .. u(0xFEFF) .. "]"
local function normalize_for_focus(s)
return (rsub(s, FOCUS_IGNORE, ""))
end
--W: Which slots hold `focus`? Must run before show_forms() turns the form
-- lists into rendered wikitext.
local function find_focus_slots(alternant_multiword_spec, focus)
if not focus or focus == "" then
return nil
end
local target = normalize_for_focus(focus)
local slots = {}
for slot, forms in pairs(alternant_multiword_spec.forms) do
if type(forms) == "table" then
for _, formobj in ipairs(forms) do
if type(formobj) == "table" and formobj.form
and normalize_for_focus(formobj.form) == target then
slots[slot] = true
break
end
end
end
end
return slots
end
--W: 'yes' unless |موسع= asked for the table open. [[Template:inflection-table-top]]
-- turns any non-empty |tall= into the mw-collapsed class.
local function collapsed_arg(alternant_multiword_spec)
if alternant_multiword_spec.expanded then
return nil
end
return 'yes'
end
--W: Put the marker class on the cell itself rather than on a span around its
-- contents, so the highlight covers the whole cell instead of hugging the word.
-- Runs on the table wikitext below, before m_string_utilities.format() fills the
-- {slot} placeholders in. Every form cell in either table has one of two shapes:
--
-- | {past_1s} -> | class="avf-focus" | {past_1s}
-- | rowspan="2" | {past_1s} -> | rowspan="2" class="avf-focus" | {past_1s}
--
-- Styled by [[Template:ar-verb-form/style.css]] (.inflection-table td.avf-focus).
local function mark_focus_cells(text, focus_slots)
if not focus_slots then
return text
end
return (rsub(text, "\n(|[^\n]*)", function(cell)
local slot = rmatch(cell, "^|%s*{([%w_]+)}%s*$")
if slot then
if focus_slots[slot] then
return '\n| class="avf-focus" | {' .. slot .. "}"
end
return nil
end
local attrs
attrs, slot = rmatch(cell, "^|%s*(.-)%s*|%s*{([%w_]+)}%s*$")
if slot and focus_slots[slot] then
return "\n| " .. attrs .. ' class="avf-focus" | {' .. slot .. "}"
end
return nil
end))
end
-------------------------------------------------------------------------------
-- Functions to create inflection tables --
-------------------------------------------------------------------------------
-- Make the conjugation table. Called from export.show().
local function make_table(alternant_multiword_spec)
local text = mw.getCurrentFrame():expandTemplate{
title = 'inflection-table-top',
args = {
title = 'تصريف {title}',
--W: |tall= is what puts mw-collapsed on the wrapper. |موسع= drops it.
-- (Not `expanded and nil or 'yes'` — in Lua that is always 'yes'.)
tall = collapsed_arg(alternant_multiword_spec),
palette = 'green',
category = 'conjugation',
class = 'tr-alongside', -- temp hack to prevent extra line break
}
}
text = text .. [=[
! colspan="6" | <<الْمَصْدَر>>
| colspan="7" | {vn}
]=]
if alternant_multiword_spec.has_active then
text = text .. [=[
|-
! colspan="6" | <<اِسْم الْفَاعِل>>
| colspan="7" | {ap}
]=]
end
if alternant_multiword_spec.has_passive then
text = text .. [=[
|-
! colspan="6" | <<اِسْم الْمَفْعُول>>
| colspan="7" | {pp}
]=]
end
text = text .. [=[
|-
! colspan="999" class="separator" |
]=]
if alternant_multiword_spec.has_active then
text = text .. [=[
|-
! colspan="12" class="outer" | <<الْفِعْل الْمَعْلُوم>>
|-
! colspan="2" |
! colspan="3" | <<الْمُفْرَد>>
! rowspan="12" class="separator" |
! colspan="2" | <<الْمُثَنَّى>>
! rowspan="12" class="separator" |
! colspan="3"| <<الْجَمْع>>
|-
! colspan="2"|
! <<الْمُتَكَلِّم>>
! <<الْمُخَاطَب>>
! <<الْغَائِب>>
! <<الْمُخَاطَب>>
! <<الْغَائِب>>
! <<الْمُتَكَلِّم>>
! <<الْمُخَاطَب>>
! <<الْغَائِب>>
|-
! rowspan="2" | <<الْمَاضِي>>
! class="secondary" | المذكر
| rowspan="2" | {past_1s}
| {past_2ms}
| {past_3ms}
| rowspan="2" | {past_2d}
| {past_3md}
| rowspan="2" | {past_1p}
| {past_2mp}
| {past_3mp}
|-
! class="secondary" | المؤنث
| {past_2fs}
| {past_3fs}
| {past_3fd}
| {past_2fp}
| {past_3fp}
|-
! rowspan="2" | <<الْمُضَارِع الْمَرْفُوع>>
! class="secondary" | المذكر
| rowspan="2" | {ind_1s}
| {ind_2ms}
| {ind_3ms}
| rowspan="2" | {ind_2d}
| {ind_3md}
| rowspan="2" | {ind_1p}
| {ind_2mp}
| {ind_3mp}
|-
! class="secondary" | المؤنث
| {ind_2fs}
| {ind_3fs}
| {ind_3fd}
| {ind_2fp}
| {ind_3fp}
|-
! rowspan="2" | <<الْمُضَارِع الْمَنْصُوب>>
! class="secondary" | المذكر
| rowspan="2" | {sub_1s}
| {sub_2ms}
| {sub_3ms}
| rowspan="2" | {sub_2d}
| {sub_3md}
| rowspan="2" | {sub_1p}
| {sub_2mp}
| {sub_3mp}
|-
! class="secondary" | المؤنث
| {sub_2fs}
| {sub_3fs}
| {sub_3fd}
| {sub_2fp}
| {sub_3fp}
|-
! rowspan="2" | <<الْمُضَارِع الْمَجْزُوم>>
! class="secondary" | المذكر
| rowspan="2" | {juss_1s}
| {juss_2ms}
| {juss_3ms}
| rowspan="2" | {juss_2d}
| {juss_3md}
| rowspan="2" | {juss_1p}
| {juss_2mp}
| {juss_3mp}
|-
! class="secondary" | المؤنث
| {juss_2fs}
| {juss_3fs}
| {juss_3fd}
| {juss_2fp}
| {juss_3fp}
|-
! rowspan="2" | <<الْأَمْر>>
! class="secondary" | المذكر
| rowspan="2" |
| {imp_2ms}
| rowspan="2" |
| rowspan="2" | {imp_2d}
| rowspan="2" |
| rowspan="2" |
| {imp_2mp}
| rowspan="2" |
|-
! class="secondary" | المؤنث
| {imp_2fs}
| {imp_2fp}
]=]
end
if alternant_multiword_spec.has_passive then
text = text .. [=[
|-
! colspan="999" class="separator" |
|-
! colspan="12" class="outer" | <<الْفِعْل الْمَجْهُول>>
|-
! colspan="2" |
! colspan="3" | <<الْمُفْرَد>>
! rowspan="10" class="separator" |
! colspan="2" | <<الْمُثَنَّى>>
! rowspan="10" class="separator" |
! colspan="3" | <<الْجَمْع>>
|-
! colspan="2" |
! <<الْمُتَكَلِّم>>
! <<الْمُخَاطَب>>
! <<الْغَائِب>>
! <<الْمُخَاطَب>>
! <<الْغَائِب>>
! <<الْمُتَكَلِّم>>
! <<الْمُخَاطَب>>
! <<الْغَائِب>>
|-
! rowspan="2" | <<الْمَاضِي>>
! class="secondary" | المذكر
| rowspan="2" | {past_pass_1s}
| {past_pass_2ms}
| {past_pass_3ms}
| rowspan="2" | {past_pass_2d}
| {past_pass_3md}
| rowspan="2" | {past_pass_1p}
| {past_pass_2mp}
| {past_pass_3mp}
|-
! class="secondary" | المؤنث
| {past_pass_2fs}
| {past_pass_3fs}
| {past_pass_3fd}
| {past_pass_2fp}
| {past_pass_3fp}
|-
! rowspan="2" | <<الْمُضَارِع الْمَرْفُوع>>
! class="secondary" | المذكر
| rowspan="2" | {ind_pass_1s}
| {ind_pass_2ms}
| {ind_pass_3ms}
| rowspan="2" | {ind_pass_2d}
| {ind_pass_3md}
| rowspan="2" | {ind_pass_1p}
| {ind_pass_2mp}
| {ind_pass_3mp}
|-
! class="secondary" | المؤنث
| {ind_pass_2fs}
| {ind_pass_3fs}
| {ind_pass_3fd}
| {ind_pass_2fp}
| {ind_pass_3fp}
|-
! rowspan="2" | <<الْمُضَارِع الْمَنْصُوب>>
! class="secondary" | المذكر
| rowspan="2" | {sub_pass_1s}
| {sub_pass_2ms}
| {sub_pass_3ms}
| rowspan="2" | {sub_pass_2d}
| {sub_pass_3md}
| rowspan="2" | {sub_pass_1p}
| {sub_pass_2mp}
| {sub_pass_3mp}
|-
! class="secondary" | المؤنث
| {sub_pass_2fs}
| {sub_pass_3fs}
| {sub_pass_3fd}
| {sub_pass_2fp}
| {sub_pass_3fp}
|-
! rowspan="2" | <<الْمُضَارِع الْمَجْزُوم>>
! class="secondary" | المذكر
| rowspan="2" | {juss_pass_1s}
| {juss_pass_2ms}
| {juss_pass_3ms}
| rowspan="2" | {juss_pass_2d}
| {juss_pass_3md}
| rowspan="2" | {juss_pass_1p}
| {juss_pass_2mp}
| {juss_pass_3mp}
|-
! class="secondary" | المؤنث
| {juss_pass_2fs}
| {juss_pass_3fs}
| {juss_pass_3fd}
| {juss_pass_2fp}
| {juss_pass_3fp}
]=]
end
text = text .. mw.getCurrentFrame():expandTemplate{
title = 'inflection-table-bottom',
args = {
notes = '{footnote}',
}
}
local forms = alternant_multiword_spec.forms
if not alternant_multiword_spec.lemmas then
forms.title = "—"
else
local linked_lemmas = {}
for _, form in ipairs(alternant_multiword_spec.lemmas) do
--W: Create simple link for lemmas without #Arabic anchor
-- table.insert(linked_lemmas, link_term(form.form, "term"))
table.insert(linked_lemmas, link_term_simple(form.form))
end
forms.title = table.concat(linked_lemmas, "، ")
end
local ann_parts = {}
if alternant_multiword_spec.annotation ~= "" then
table.insert(ann_parts, alternant_multiword_spec.annotation)
end
if alternant_multiword_spec.vn then
local linked_vns = {}
for _, form in ipairs(alternant_multiword_spec.vn) do
table.insert(linked_vns, link_term(form.form, "term"))
end
table.insert(ann_parts, (#linked_vns > 1 and "verbal nouns" or "verbal noun") .. " " ..
table.concat(linked_vns, "، "))
end
local annotation = table.concat(ann_parts, "، ")
--W: use only arabic morphological pattern in title annotation
local morph_patterns = alternant_multiword_spec.morph_pattern
if morph_patterns and #morph_patterns > 0 then
annotation = table.concat(morph_patterns, "، ")
forms.title = forms.title .. " (" .. annotation .. ")"
end
-- Format the table.
text = mark_focus_cells(text, alternant_multiword_spec.focus_slots)
local tagged_table = rsub(text, "<<(.-)>>", tag_text)
return m_string_utilities.format(tagged_table, forms)
end
-- Helper function to get root letters and verb classification for simplified table header
-- Returns: root_display (e.g., "ح س ب"), verb_type (e.g., "فعل ثلاثي صحيح سالم")
local function get_verb_info(alternant_multiword_spec)
local root_display = ""
local verb_type = "فعل"
local rad1, rad2, rad3, rad4
-- Extract radicals from the base word spec using iut.map_word_specs
-- This accesses the radicals directly from the parsed verb specification
iut.map_word_specs(alternant_multiword_spec, function(base)
-- Get radicals from the first conjugation vowel spec
if base.conj_vowels and #base.conj_vowels > 0 then
local vowel_spec = base.conj_vowels[1]
-- Extract radicals, handling both table and string types
local function extract_radical(rad)
if type(rad) == "table" then
-- If it's a table, get the first element or the string representation
return rad[1] or rget(rad)
else
return rad
end
end
rad1 = extract_radical(vowel_spec.rad1)
rad2 = extract_radical(vowel_spec.rad2)
rad3 = extract_radical(vowel_spec.rad3)
rad4 = vowel_spec.rad4 and extract_radical(vowel_spec.rad4)
end
end)
-- Get basic/derived classification from morphological pattern
local basic_deriv
if alternant_multiword_spec.morph_pattern and #alternant_multiword_spec.morph_pattern > 0 then
local morph_pattern = alternant_multiword_spec.morph_pattern[1]
basic_deriv = MORPHOLOGICAL_PATTERN_TO_BASIC_DERIV[morph_pattern]
end
-- Format root display with spaces between letters
if rad1 and rad2 and rad3 then
if rad4 then
-- Quadrilateral
root_display = rad1 .. " " .. rad2 .. " " .. rad3 .. " " .. rad4
verb_type = "فعل رباعي"
if basic_deriv then
verb_type = verb_type .. " " .. basic_deriv
end
else
-- triliteral
root_display = rad1 .. " " .. rad2 .. " " .. rad3
verb_type = "فعل ثلاثي"
if basic_deriv then
verb_type = verb_type .. " " .. basic_deriv
if basic_deriv == "مُجرَّد" then
--W: the classification concerns only triliteral basic verbs (الثلاثي المُجرَّد)
local classification = export.classify_triliteral_verb(rad1, rad2, rad3)
verb_type = verb_type .. " " .. classification
end
end
end
end
return root_display, verb_type
end
-- Make simplified conjugation table for ar.wiktionary. Called from export.show().
-- This table shows only past, present indicative, and imperative forms.
-- No passive voice, no participles, no verbal nouns.
local function make_table_ar(alternant_multiword_spec)
local text = mw.getCurrentFrame():expandTemplate{
title = 'inflection-table-top',
args = {
title = 'تصريف {title}',
--W: |tall= is what puts mw-collapsed on the wrapper. |موسع= drops it.
-- (Not `expanded and nil or 'yes'` — in Lua that is always 'yes'.)
tall = collapsed_arg(alternant_multiword_spec),
palette = 'green',
category = 'conjugation',
class = 'tr-alongside', -- temp hack to prevent extra line break
}
}
-- Get verb root and classification
local root_display, verb_type = get_verb_info(alternant_multiword_spec)
-- First row: Root and verb type spanning all columns
text = text .. "! colspan=\"2\" | <<الجذر>>: " .. root_display .. "\n"
text = text .. "| colspan=\"3\" | <<'''" .. verb_type .. "'''>>\n"
text = text .. [=[
|-
! colspan="2" | <<الضمائر>>
! <<الماضي>>
! <<المضارع>>
! <<الأمر>>
|-
! rowspan="2" | <<المتكلّم>>
| <<أنا>>
| {past_1s}
| {ind_1s}
|
|-
| <<نحن>>
| {past_1p}
| {ind_1p}
|
|-
! rowspan="5" | <<المخاطب>>
| <<أنتَ>>
| {past_2ms}
| {ind_2ms}
| {imp_2ms}
|-
| <<أنتِ>>
| {past_2fs}
| {ind_2fs}
| {imp_2fs}
|-
| <<أنتما>>
| {past_2d}
| {ind_2d}
| {imp_2d}
|-
| <<أنتم>>
| {past_2mp}
| {ind_2mp}
| {imp_2mp}
|-
| <<أنتنّ>>
| {past_2fp}
| {ind_2fp}
| {imp_2fp}
|-
! rowspan="6" | <<الغائب>>
| <<هو>>
| {past_3ms}
| {ind_3ms}
|
|-
| <<هي>>
| {past_3fs}
| {ind_3fs}
|
|-
| <<هما>>
| {past_3md}
| {ind_3md}
|
|-
| <<هما>>
| {past_3fd}
| {ind_3fd}
|
|-
| <<هم>>
| {past_3mp}
| {ind_3mp}
|
|-
| <<هنّ>>
| {past_3fp}
| {ind_3fp}
|
]=]
text = text .. mw.getCurrentFrame():expandTemplate{
title = 'inflection-table-bottom',
args = {
notes = '{footnote}',
}
}
local forms = alternant_multiword_spec.forms
if not alternant_multiword_spec.lemmas then
forms.title = "—"
else
local linked_lemmas = {}
for _, form in ipairs(alternant_multiword_spec.lemmas) do
--W: Create simple link for lemmas without #Arabic anchor
-- table.insert(linked_lemmas, link_term(form.form, "term"))
table.insert(linked_lemmas, link_term_simple(form.form))
end
forms.title = table.concat(linked_lemmas, "، ")
end
local ann_parts = {}
if alternant_multiword_spec.annotation ~= "" then
table.insert(ann_parts, alternant_multiword_spec.annotation)
end
local annotation = table.concat(ann_parts, "، ")
--W: use only arabic morphological pattern in title annotation
local morph_patterns = alternant_multiword_spec.morph_pattern
if morph_patterns and #morph_patterns > 0 then
annotation = table.concat(morph_patterns, "، ")
forms.title = forms.title .. " (" .. annotation .. ")"
end
-- Format the table.
text = mark_focus_cells(text, alternant_multiword_spec.focus_slots)
local tagged_table = rsub(text, "<<(.-)>>", tag_text)
return m_string_utilities.format(tagged_table, forms)
end
-------------------------------------------------------------------------------
-- Verb classification functions --
-------------------------------------------------------------------------------
--[=[
تصنيف الفعل الثلاثي المُجرَّد حسب نوعه
Classify an Arabic triliteral basic verb root based on its three letters.
@param r1 الحرف الأول (first root letter - الفاء)
@param r2 الحرف الثاني (second root letter - العين)
@param r3 الحرف الثالث (third root letter - اللام)
@return str: نوع الفعل (verb type classification in Arabic)
Examples:
classify_triliteral_verb('ك', 'ت', 'ب') --> 'صحيح سالم'
classify_triliteral_verb('أ', 'ت', 'ي') --> 'معتل ناقص يائي مهموز الفاء'
classify_triliteral_verb('ق', 'ل', 'و') --> 'معتل ناقص واوي'
]=]
function export.classify_triliteral_verb(r1, r2, r3)
-- تعريف أحرف العلة والهمزة
-- الحروف الضعيفة (أحرف العلة): واو وياء فقط
local weak_letters = {[W] = true, [Y] = true}
-- الهمزة: جميع أشكال الهمزة (ء، أ، إ، ؤ، ئ)
local hamza_letters = {
[HAMZA] = true, -- ء
[HAMZA_ON_ALIF] = true, -- أ
[HAMZA_UNDER_ALIF] = true, -- إ
[HAMZA_ON_W] = true, -- ؤ
[HAMZA_ON_Y] = true -- ئ
}
-- فحص كل حرف
local is_hamza = {hamza_letters[r1] or false, hamza_letters[r2] or false, hamza_letters[r3] or false}
local is_weak = {weak_letters[r1] or false, weak_letters[r2] or false, weak_letters[r3] or false}
-- عدد أحرف العلة
local weak_count = (is_weak[1] and 1 or 0) + (is_weak[2] and 1 or 0) + (is_weak[3] and 1 or 0)
-- فحص التضعيف (الحرف الثاني = الثالث)
local is_doubled = (r2 == r3)
-- ═══════════════════════════════════════════════════════════
-- المُعتل: الفعل الذي يحتوي على حرف أو أكثر من أحرف العلة
-- ═══════════════════════════════════════════════════════════
if weak_count > 0 then
-- ─────────────────────────────────────────────────────
-- لفيف: يحتوي على حرفين أو أكثر من أحرف العلة
-- ─────────────────────────────────────────────────────
if weak_count >= 2 then
-- مقرون: حرفا العلة متجاوران
if is_weak[2] and is_weak[3] then -- الثاني والثالث
if is_hamza[1] then
return "معتل لفيف مقرون مهموز الفاء"
end
return "معتل لفيف مقرون"
elseif is_weak[1] and is_weak[2] then -- الأول والثاني
return "معتل لفيف مقرون"
-- مفروق: الأول والثالث حرفا علة
elseif is_weak[1] and is_weak[3] then
if is_hamza[2] then
return "معتل لفيف مفروق مهموز العين"
end
return "معتل لفيف مفروق"
end
-- ─────────────────────────────────────────────────────
-- مثال: الحرف الأول حرف علة
-- ─────────────────────────────────────────────────────
elseif is_weak[1] then
if r1 == W then -- واوي
if is_hamza[3] then
return "معتل مثال واوي مهموز اللام"
elseif is_doubled then
return "معتل مثال واوي مُضعَّف"
elseif is_hamza[2] then
return "معتل مثال واوي مهموز العين"
end
return "معتل مثال واوي"
else -- يائي (ي)
if is_doubled then
return "معتل مثال يائي مُضعَّف"
elseif is_hamza[2] then
return "معتل مثال يائي مهموز العين"
end
return "معتل مثال يائي"
end
-- ─────────────────────────────────────────────────────
-- أجوف: الحرف الثاني حرف علة
-- ─────────────────────────────────────────────────────
elseif is_weak[2] then
if r2 == W then -- واوي
if is_hamza[3] then
return "معتل أجوف واوي مهموز اللام"
elseif is_hamza[1] then
return "معتل أجوف واوي مهموز الفاء"
end
return "معتل أجوف واوي"
else -- يائي (ي)
if is_hamza[3] then
return "معتل أجوف يائي مهموز اللام"
elseif is_hamza[1] then
return "معتل أجوف يائي مهموز الفاء"
end
return "معتل أجوف يائي"
end
-- ─────────────────────────────────────────────────────
-- ناقص: الحرف الثالث حرف علة
-- ─────────────────────────────────────────────────────
elseif is_weak[3] then
if r3 == W then -- واوي
if is_hamza[1] then
return "معتل ناقص واوي مهموز الفاء"
elseif is_hamza[2] then
return "معتل ناقص واوي مهموز العين"
end
return "معتل ناقص واوي"
else -- يائي (ي)
if is_hamza[1] then
return "معتل ناقص يائي مهموز الفاء"
elseif is_hamza[2] then
return "معتل ناقص يائي مهموز العين"
end
return "معتل ناقص يائي"
end
end
-- ═══════════════════════════════════════════════════════════
-- الصحيح: الفعل الذي لا يحتوي على أحرف العلة
-- ═══════════════════════════════════════════════════════════
else
-- ─────────────────────────────────────────────────────
-- مهموز: يحتوي على همزة
-- ─────────────────────────────────────────────────────
if is_hamza[1] or is_hamza[2] or is_hamza[3] then
-- مهموز الفاء واللام: الأول والثالث همزة
if is_hamza[1] and is_hamza[3] then
return "صحيح مهموز الفاء واللام"
-- مهموز الفاء
elseif is_hamza[1] then
if is_doubled then
return "صحيح مُضعَّف مهموز الفاء"
end
return "صحيح مهموز الفاء"
-- مهموز العين
elseif is_hamza[2] then
return "صحيح مهموز العين"
-- مهموز اللام
elseif is_hamza[3] then
return "صحيح مهموز اللام"
end
-- ─────────────────────────────────────────────────────
-- مُضعَّف: الحرف الثاني = الثالث
-- ─────────────────────────────────────────────────────
elseif is_doubled then
return "صحيح مُضعَّف"
-- ─────────────────────────────────────────────────────
-- سالم: لا همزة، لا حرف علة، لا تضعيف
-- ─────────────────────────────────────────────────────
else
return "صحيح سالم"
end
end
return "غير معروف"
end
-------------------------------------------------------------------------------
-- External entry points --
-------------------------------------------------------------------------------
--W: Normalize root to use underscores as separators
-- Accepts: "كتب", "ك_ت_ب", or "ك ت ب"
-- Returns: "ك_ت_ب"
local function normalize_root(root)
if not root then
return nil
end
-- Helper function to normalize a single character/radical
local function normalize_char(char)
-- Convert all hamza variants to canonical bare hamza
if char == HAMZA_ON_ALIF or char == HAMZA_UNDER_ALIF or
char == HAMZA_ON_W or char == HAMZA_ON_Y then
return HAMZA
-- Convert alif maqṣūra to yaa (ى → ي)
elseif char == AMAQ then
return Y
-- Reject alif - it's not a root radical
elseif char == ALIF then
error("Root contains alif (ا) which is not a valid root radical. For weak verbs, use و (waw) or ي (yaa) instead.")
end
return char
end
-- Convert alif madda to hamza + alif for processing (will be caught as error below)
root = root:gsub(AMAD, HAMZA .. ALIF)
-- Replace spaces with underscores
root = root:gsub(" ", "_")
-- If no underscores yet, insert them between each character
if not root:find("_") then
-- Extract only Arabic letters (excluding diacritics)
-- Arabic letter range: U+0621 to U+064A (basic letters)
local chars = {}
for char in mw.ustring.gmatch(root, "[ء-ي]") do
table.insert(chars, normalize_char(char))
end
root = table.concat(chars, "_")
else
-- Root already has underscores (e.g., "أ_م_ن"), normalize each radical
local parts = mw.text.split(root, "_")
for i, part in ipairs(parts) do
parts[i] = normalize_char(part)
end
root = table.concat(parts, "_")
end
return root
end
--W: Construct the [1] parameter from root (جذر) and morphological pattern (وزن)
-- Example:
-- input: root="كتب", pattern="فعَل يفعُل"
-- output: "ك_ت_ب<I/a~u>"
-- `force_full_passive`, if true, appends ".pass" so the verb gets a full personal
-- passive paradigm instead of the module's default impersonal-passive guess for
-- vforms like I (past vowel i), V, VI, X and IIq (see |مبني للمجهول= on {{ar-conj}}).
-- `reduced`, if true, appends ".reduced" so an affix consonant assimilates into the
-- radical beside it: forms V/VI use the assimilated تاء التفعّل prefix (اِسَّمَّعَ)
-- instead of the default تَ- prefix (تَسَمَّعَ), and form IIIq assimilates اِفْعَنْلَلَ's
-- نون into a weak ل1 (اِهْبَيَّخَ for اِهْبَنْيَخَ) -- see |مدغم= on {{ar-conj}}. Not every
-- root with an assimilable radical is necessarily attested with the assimilated form, so
-- this isn't inferred automatically from the root; it must be requested.
local function construct_verb_spec(root, pattern, force_full_passive, reduced)
if not root or not pattern then
return nil
end
local normalized_root = normalize_root(root)
local form_code = MORPHOLOGICAL_PATTERN_TO_FORM[pattern]
if not form_code then
error("Unknown morphological pattern (وزن صرفي): " .. pattern)
end
if force_full_passive then
form_code = form_code .. ".pass"
end
if reduced then
form_code = form_code .. ".reduced"
end
return normalized_root .. "<" .. form_code .. ">"
end
-- Wrapper function that accepts جذر (root) and وزن (pattern) as parameters
-- Returns: verb_type (e.g., "فعل ثلاثي مُجرَّد صحيح سالم")
-- Example: export.get_verb_type({["جذر"] = "كتب", ["وزن"] = "فعَل يفعُل"})
function export.get_verb_type(args)
local verb_spec
if args["جذر"] and args["وزن"] then
verb_spec = construct_verb_spec(args["جذر"], args["وزن"])
elseif args[1] then
verb_spec = args[1]
else
error("Must provide either جذر and وزن, or a verb specification in args[1]")
end
local alternant_multiword_spec = export.do_generate_forms({[1] = verb_spec})
local _, verb_type = get_verb_info(alternant_multiword_spec)
return verb_type
end
-- Append two lists `l1` and `l2`, removing duplicates. If either is {nil}, just return the other.
local function combine_lists(l1, l2)
-- combine_footnotes() does exactly what we want.
return iut.combine_footnotes(l1, l2)
end
local function combine_metadata(data)
local src1 = data.form1
local src2 = data.form2
local dest = data.dest_form
dest.uncertain = src1.uncertain or src2.uncertain
if src1.genders and src2.genders and not m_table.deepEquals(src1.genders, src2.genders) then
-- do nothing
else
dest.genders = src1.genders or src2.genders
end
if src1.pos and src2.pos and src1.pos ~= src2.pos then
-- do nothing
else
dest.pos = src1.pos or src2.pos
end
-- Don't copy .alt, .gloss, .lit, .id, which describe a single term and don't extend to multiword terms.
dest.q = combine_lists(src1.q, src2.q)
dest.qq = combine_lists(src1.qq, src2.qq)
dest.l = combine_lists(src1.l, src2.l)
dest.ll = combine_lists(src1.ll, src2.ll)
end
-- Externally callable function to parse and conjugate a verb given user-specified arguments.
-- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms`
-- for each slot. If there are no values for a slot, the slot key will be missing. The value
-- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms(args, source_template, headword_head)
local PAGENAME = mw.loadData("Module:headword/data").pagename
local function in_template_space()
local nsText = mw.title.getCurrentTitle().nsText
return nsText == "Template" or nsText == "قالب"
end
-- Determine the verb spec we're being asked to generate the conjugation of. This may be taken from the current page
-- title or the value of |pagename=; but not when called from {{ar-verb form}}, where the page title is a
-- non-lemma form. Note that the verb spec may omit the lemma; e.g. it may be "<II>". For this reason, we use the
-- value of `pagename` computed here down below, when calling normalize_all_lemmas().
local pagename = source_template ~= "ar-verb form" and args.pagename or PAGENAME
local head = headword_head or pagename
--W: If both root (جذر) and morphological pattern (وزن) are provided, construct [1]
if args["جذر"] and args["جذر"] ~= "" and args["وزن"] and args["وزن"] ~= "" then
local constructed = construct_verb_spec(args["جذر"], args["وزن"], args["مبني للمجهول"], args["مدغم"])
if constructed and constructed ~= "" then
args[1] = constructed
end
end
local arg1 = args[1]
if not arg1 then
if (pagename == "ar-conj" or pagename == "ar-verb" or pagename == "ar-verb form" or pagename == "تصريف") and in_template_space() then
arg1 = "كتب<I/a~u.pass>"
else
arg1 = "<>"
end
end
-- When called from {{ar-verb form}}, determine the non-lemma form whose inflections we're being asked to
-- determine. This normally comes from the page title or the value of |pagename=.
local verb_form_of_form
if source_template == "ar-verb form" then
verb_form_of_form = args.pagename
if not verb_form_of_form then
if PAGENAME == "ar-verb form" and in_template_space() then
verb_form_of_form = "كتبت"
else
verb_form_of_form = PAGENAME
end
end
end
local incorporated_headword_head_into_lemma = false
if arg1:find("^<.*>$") then -- missing lemma
if head:find(" ") then
-- If multiword lemma, try to add arg spec after the first word.
-- Try to preserve the brackets in the part after the verb, but don't do it
-- if there aren't the same number of left and right brackets in the verb
-- (which means the verb was linked as part of a larger expression).
local first_word, post = rmatch(head, "^(.-)( .*)$")
local left_brackets = rsub(first_word, "[^%[]", "")
local right_brackets = rsub(first_word, "[^%]]", "")
if #left_brackets == #right_brackets then
arg1 = iut.remove_redundant_links(first_word) .. arg1 .. post
incorporated_headword_head_into_lemma = true
else
-- Try again using the form without links.
local linkless_head = m_links.remove_links(head)
if linkless_head:find(" ") then
first_word, post = rmatch(linkless_head, "^(.-)( .*)$")
arg1 = first_word .. arg1 .. post
else
error("Unable to incorporate <...> spec into explicit head due to a multiword linked verb or " ..
"unbalanced brackets; please include <> explicitly: " .. arg1)
end
end
else
-- Will be incorporated through `head` below in the call to normalize_all_lemmas().
incorporated_headword_head_into_lemma = true
end
end
local parse_props = {
parse_indicator_spec = parse_indicator_spec,
angle_brackets_omittable = true,
allow_blank_lemma = true,
}
local alternant_multiword_spec = iut.parse_inflected_text(arg1, parse_props)
alternant_multiword_spec.pos = pos or "verbs"
alternant_multiword_spec.args = args
alternant_multiword_spec.source_template = source_template
alternant_multiword_spec.verb_form_of_form = verb_form_of_form
alternant_multiword_spec.incorporated_headword_head_into_lemma = incorporated_headword_head_into_lemma
normalize_all_lemmas(alternant_multiword_spec, head)
detect_all_indicator_specs(alternant_multiword_spec)
local inflect_props = {
lang = lang,
slot_list = alternant_multiword_spec.verb_slots,
inflect_word_spec = conjugate_verb,
combine_metadata = combine_metadata,
-- We add links around the generated verbal forms rather than allow the entire multiword
-- expression to be a link, so ensure that user-specified links get included as well.
include_user_specified_links = true,
}
iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props)
if debug_translit then
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
if form.translit then
local full_form_translit = (lang:transliterate(m_links.remove_links(form.form)))
if full_form_translit ~= form.translit then
error(("Internal error: For slot '%s', form '%s' incremental translit '%s' not same as full translit '%s'"):
format(slot, form.form, form.translit, full_form_translit))
end
end
form.form = iut.remove_redundant_links(form.form)
end
end
end
-- Remove redundant brackets around entire forms.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = iut.remove_redundant_links(form.form)
end
end
-- Apply NFC-style normalization: reorder shadda+vowel to vowel+shadda
-- to match MediaWiki's automatic NFC normalization (which is applied on enwiktionary
-- but not in local Lua environments). This reverses the postprocessing step.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = apply_nfc_shadda(form.form)
end
end
determine_slot_uncertainty_from_forms(alternant_multiword_spec)
determine_verb_properties_from_forms(alternant_multiword_spec)
compute_categories_and_annotation(alternant_multiword_spec)
if args.json and source_template == "ar-conj" then
-- There is a circular reference in `base.alternant_multiword_spec`, which points back to top level.
iut.map_word_specs(alternant_multiword_spec, function(base)
base.alternant_multiword_spec = nil
end)
return require("Module:JSON").toJSON(alternant_multiword_spec)
end
return alternant_multiword_spec
end
-- Entry point for {{ar-conj}}. Template-callable function to parse and conjugate a verb given
-- user-specified arguments and generate a displayable table of the conjugated forms.
function export.show(frame)
local parent_args = frame:getParent() and frame:getParent().args or frame.args --W
local params = {
[1] = {},
["noautolinktext"] = {type = "boolean"},
["noautolinkverb"] = {type = "boolean"},
["t"] = {}, -- for use by {{ar-verb form}}; otherwise ignored
["id"] = {}, -- for use by {{ar-verb form}}; otherwise ignored
["pagename"] = {}, -- for testing/documentation pages
["json"] = {type = "boolean"}, -- for bot use
--W: additional parameters for ar.wiktionary.org
["جذر"] = {type = "string"}, --W: الجذر اللغوي, root
["وزن"] = {type = "string"}, --W: الوزن الصرفي, morphological pattern
["مبني للمجهول"] = {type = "boolean"}, --W: force a full personal passive paradigm,
-- overriding the default impersonal-passive guess for vforms like I (past vowel
-- i), V, VI, X and IIq
["مدغم"] = {type = "boolean"}, --W: assimilate the affix into the radical beside it:
-- forms V/VI's تاء التفعّل into the first radical (اِسَّمَّعَ instead of
-- تَسَمَّعَ), or form IIIq's نون into a weak ل1 (اِهْبَيَّخَ for اِهْبَنْيَخَ)
["كامل"] = {type = "boolean"}, --W: show full table (default is simplified table)
["بؤرة"] = {type = "string"}, --W: highlight the cells holding this form
["موسع"] = {type = "boolean"}, --W: show the table expanded (default: collapsed)
}
local args = require("Module:parameters").process(parent_args, params)
--W: If both root (جذر) and morphological pattern (وزن) are provided, construct [1]
if args["جذر"] and args["جذر"] ~= "" and args["وزن"] and args["وزن"] ~= "" then
local constructed = construct_verb_spec(args["جذر"], args["وزن"], args["مبني للمجهول"], args["مدغم"])
if constructed and constructed ~= "" then
args[1] = constructed
end
end
local alternant_multiword_spec = export.do_generate_forms(args, "ar-conj")
if type(alternant_multiword_spec) == "string" then
-- JSON return value
return alternant_multiword_spec
end
--W: |بؤرة= marks the cells holding a given form, so that a conjugated-form
-- page ([[Module:ar-verb-form]]) can show the reader where in the paradigm
-- the word they looked up actually sits. The slots have to be found before
-- show_forms(), which replaces each form list with rendered wikitext.
alternant_multiword_spec.focus_slots =
find_focus_slots(alternant_multiword_spec, args["بؤرة"])
--W: A table whose one relevant cell is highlighted is no use folded away, so
-- [[Module:ar-verb-form]] asks for it open. Lemma pages keep it collapsed.
alternant_multiword_spec.expanded = args["موسع"] or false
show_forms(alternant_multiword_spec)
--W: Choose table type: simplified (default) or full (comprehensive)
local table_html
if args["كامل"] then
table_html = make_table(alternant_multiword_spec)
else
table_html = make_table_ar(alternant_multiword_spec)
end
--W: don't add categories
--W: TODO: all lines with insert_cat() are to be removed.
-- return table_html ..
-- require("Module:utilities").format_categories(alternant_multiword_spec.categories, lang, nil, nil, force_cat)
return table_html
end
function export.verb_forms(frame)
local parargs = frame:getParent().args
local params = {
[1] = {},
[2] = {},
[3] = {},
[4] = {},
[5] = {},
pagename = {},
}
for _, form in ipairs(allowed_vforms) do
-- FIXME: We go up to 5 here. The code supports unlimited variants but it's unlikely we will ever see more than
-- 2.
for index = 1, 5 do
local prefix = index == 1 and form or form .. index
params[prefix .. "-pv"] = {}
for _, extn in ipairs { "", "-vn", "-ap", "-pp" } do
params[prefix .. extn] = {}
params[prefix .. extn .. "-head"] = {}
-- FIXME: No -tr?
params[prefix .. extn .. "-gloss"] = {}
end
end
end
local args = require("Module:parameters").process(parargs, params)
local i = 1
local past_vowel_re = "^[aui,]*$"
local combined_root = nil
if not args[i] or rfind(args[i], past_vowel_re) then
combined_root = args.pagename or mw.loadData("Module:headword/data").pagename
if not rfind(combined_root, "^([^ ]) ([^ ]) ([^ ])$") and not
rfind(combined_root, "^([^ ]) ([^ ]) ([^ ]) ([^ ])$") then
error("When inferring roots from page title, need three or four space-separated radicals: " .. combined_root)
end
elseif rfind(args[i], " ") then
combined_root = args[i]
i = i + 1
else
local separate_roots = {}
while args[i] and not rfind(args[i], past_vowel_re) do
table.insert(separate_roots, args[i])
i = i + 1
end
combined_root = table.concat(separate_roots, " ")
end
local past_vowel = args[i]
i = i + 1
if past_vowel and not rfind(past_vowel, past_vowel_re) then
error("Unrecognized past vowel, should be 'a', 'i', 'u', 'a,u', etc. or empty: " .. past_vowel)
end
-- Spaces interfere with parsing as a unit in [[Module:inflection utilities]], so replace with underscore.
combined_root = combined_root:gsub(" ", "_")
local split_root = rsplit(combined_root, "_")
-- Map from verb forms (I, II, etc.) to a table of verb properties,
-- which has entries e.g. for "verb" (either true to autogenerate the verb
-- head, or an explicitly specified verb head using e.g. argument "I-head"),
-- and for "verb-gloss" (which comes from e.g. the argument "I" or "I-gloss"),
-- and for "vn" and "vn-gloss", "ap" and "ap-gloss", "pp" and "pp-gloss".
local verb_properties = {}
for _, form in ipairs(allowed_vforms) do
local formpropslist = {}
local derivs = {{"verb", ""}, {"vn", "-vn"}, {"ap", "-ap"}, {"pp", "-pp"}}
local index = 1
while true do
local formprops = {}
local prefix = index == 1 and form or form .. index
if prefix == "I" then
formprops.pv = past_vowel
end
if args[prefix .. "-pv"] then
formprops.pv = args[prefix .. "-pv"]
end
for _, deriv in ipairs(derivs) do
local prop = deriv[1]
local extn = deriv[2]
if args[prefix .. extn] == "+" then
formprops[prop] = true
elseif args[prefix .. extn] == "-" then
formprops[prop] = false
elseif args[prefix .. extn] then
formprops[prop] = true
formprops[prop .. "-gloss"] = args[prefix .. extn]
end
if args[prefix .. extn .. "-head"] then
if formprops[prop] == nil then
formprops[prop] = true
end
formprops[prop] = args[prefix .. extn .. "-head"]
end
if args[prefix .. extn .. "-gloss"] then
if formprops[prop] == nil then
formprops[prop] = true
end
formprops[prop .. "-gloss"] = args[prefix .. extn .. "-gloss"]
end
end
if formprops.verb then
-- If a verb form specified, also turn on vn (unless form I, with
-- unpredictable vn) and ap, and maybe pp, according to form,
-- weakness and past vowel. But don't turn these on if there's
-- an explicit on/off specification for them (e.g. I-pp=-).
if form ~= "I" and formprops.vn == nil then
formprops.vn = true
end
if formprops.ap == nil then
formprops.ap = true
end
local weakness = weakness_from_radicals(form, split_root[1], split_root[2], split_root[3],
split_root[4])
if formprops.pp == nil and not vform_probably_no_passive(form,
weakness, rsplit(formprops.pv or "", ","), {}) then
formprops.pp = true
end
if formprops.verb == true or formprops.vn == true or formprops.ap == true or formprops.pp == true then
formprops.need_autogen = true
end
table.insert(formpropslist, formprops)
index = index + 1
else
break
end
end
table.insert(verb_properties, {form, formpropslist})
end
-- Go through and create the verb form derivations as necessary, when they haven't been explicitly given.
for _, vplist in ipairs(verb_properties) do
local vform = vplist[1]
for _, props in ipairs(vplist[2]) do
if props.need_autogen then
local form_with_vowels
if vform == "I" then
local pv = props.pv
if not pv then
-- Make up likely past vowels based on weakness and actual radical.
if split_root[3] == W then -- final-weak
form_with_vowels = "I/a~u"
elseif split_root[3] == Y then
form_with_vowels = "I/a~i"
elseif split_root[2] == W then --hollow
form_with_vowels = "I/u~u"
elseif split_root[2] == Y then
form_with_vowels = "I/i~i"
else
-- most common; doesn't matter so much since we're not displaying the non-past
form_with_vowels = "I/a~u"
end
else
local pvs = rsplit(pv, ",")
local vowel_sufs = {}
for _, pv in ipairs(pvs) do
local vowel_spec
if pv == "a" then
-- Make up likely past vowels based on weakness and actual radical.
if split_root[3] == W then -- final-weak
vowel_spec = "a~u"
elseif split_root[3] == Y then
vowel_spec = "a~i"
elseif split_root[2] == W then --hollow
vowel_spec = "a~u"
elseif split_root[2] == Y then
vowel_spec = "a~i"
else
-- most common; doesn't matter so much since we're not displaying the non-past
vowel_spec = "a~u"
end
elseif pv == "i" then
-- most common; doesn't matter so much since we're not displaying the non-past
vowel_spec = "i~a"
elseif pv == "u" then
-- most common; doesn't matter so much since we're not displaying the non-past
vowel_spec = "u~u"
else
error(("Internal error: Bad past vowel '%s' in {{ar-verb forms}}"):format(pv))
end
table.insert(vowel_sufs, vowel_spec)
end
form_with_vowels = "I/" .. table.concat(vowel_sufs, "/")
end
else
form_with_vowels = vform
end
local angle_bracket_spec = ("%s<%s.pass>"):format(combined_root, form_with_vowels)
local alternant_multiword_spec = export.do_generate_forms({angle_bracket_spec}, "ar-verb forms")
local function format_forms(forms)
if not forms then
return "-" -- FIXME: Throw an error?
end
local formatted = {}
for _, form in ipairs(forms) do
if form.translit then
table.insert(formatted, ("%s//%s"):format(form.form, form.translit))
else
table.insert(formatted, form.form)
end
end
return table.concat(formatted, "،")
end
if props.verb == true then
props.verb = format_forms(alternant_multiword_spec.forms.past_3ms)
end
for _, deriv in ipairs({"vn", "ap", "pp"}) do
if props[deriv] == true then
props[deriv] = format_forms(alternant_multiword_spec.forms[deriv])
end
end
end
end
end
-- Go through and output the result
local formtextarr = {}
for _, vplist in ipairs(verb_properties) do
local form = vplist[1]
for _, props in ipairs(vplist[2]) do
local textarr = {}
if props.verb then
local text = "* '''[[Appendix:Arabic verbs#Form " .. form .. "|Form " .. form .. "]]''': "
local linktext = {}
local splitheads = rsplit(props.verb, "[,،]")
for _, head in ipairs(splitheads) do
table.insert(linktext, m_links.full_link({lang = lang, term = head, gloss = props["verb-gloss"]}))
end
text = text .. table.concat(linktext, "، ")
table.insert(textarr, text)
for _, derivengl in ipairs({{"vn", "Verbal noun"}, {"ap", "Active participle"}, {"pp", "Passive participle"}}) do
local deriv = derivengl[1]
local engl = derivengl[2]
if props[deriv] then
local text = "** " .. engl .. ": "
local linktext = {}
local splitheads = rsplit(props[deriv], "[,،]")
for _, head in ipairs(splitheads) do
local ar, translit = head:match("^(.*)//(.-)$")
if not ar then
ar = head
end
table.insert(linktext, m_links.full_link {lang = lang, term = ar, tr = translit,
gloss = props[deriv .. "-gloss"]} )
end
text = text .. table.concat(linktext, "، ")
table.insert(textarr, text)
end
end
table.insert(formtextarr, table.concat(textarr, "\n"))
end
end
end
return table.concat(formtextarr, "\n")
end
-- Infer radicals from lemma headword (i.e. 3rd masculine singular past) and verb form (I, II, etc.). Throw an error if
-- headword is malformed. A given returned radical may be actually be a list of possible radicals, where the first one
-- should be used if the user didn't explicitly give the radical. If the list contains a field `ambig = true`, the
-- radical is considered ambiguous and should not be categorized. `is_reduced` indicates that the user specified
-- `.reduced` to indicate that the verb form is reduced by assimilation and/or haplology (typically archaic Koranic
-- forms such as اِدَّارَأَ instead of تَدَارَأَ; or اِسْطَاعَ instead of اِسْتِطَاعَ; etc.
function export.infer_radicals(data)
local headword, vform, passive, past_vowel, nonpast_vowel, is_reduced =
data.headword, data.vform, data.passive, data.past_vowel, data.nonpast_vowel, data.is_reduced
past_vowel = past_vowel or "-"
nonpast_vowel = nonpast_vowel or "-"
local function verify_vowel(vowel, param)
--W: A past/non-past vowel may legitimately be a form object {form=..., footnotes=...}
-- when the user attaches a footnote, e.g. <I/a[نادر]~u>, so compare the formval.
-- Comparing the raw value crashed on Lua 5.1 ("bad argument #2 to 'format'").
local formval = rget(vowel)
if formval ~= A and formval ~= I and formval ~= U and formval ~= "-" then
error(("Internal error: Bad value for %s: %s (should be Arabic diacritic vowel or '-')"):format(
param, dump(vowel)))
end
end
verify_vowel(past_vowel, "past_vowel")
verify_vowel(nonpast_vowel, "nonpast_vowel")
local ch = {}
local form_viii_assim, variant
-- sub out alif-madda for easier processing
headword = rsub(headword, AMAD, HAMZA .. ALIF)
local function infer_err(msg, noann)
local anns = {}
local nohead, novform
if noann == "nohead" then
nohead = true
elseif noann == "novform" then
novform = true
elseif noann == "nohead-vform" then
nohead = true
novform = true
elseif noann then
error(("Internal error: Unrecognized value for 'noann': %s"):format(dump(noann)))
end
if not nohead then
table.insert(anns, ("headword=%s"):format(data.headword))
end
if not novform then
table.insert(anns, ("verb form=%s"):format(data.vform))
end
anns = table.concat(anns, "، ")
if anns ~= "" then
anns = ": " .. anns
end
error(msg .. anns)
end
local len = ulen(headword)
local expected_length
-- extract the headword letters into an array
for i = 1, len do
table.insert(ch, usub(headword, i, i))
end
-- check that the letter at the given index is the given string, or
-- is one of the members of the given array
local function check(index, must)
local letter = ch[index]
if type(must) == "string" then
if not letter then
infer_err("Letter " .. index .. " is nil")
end
if letter ~= must then
infer_err(("For verb form %s, letter %s must be %s, not %s"):format(vform, index, must, letter),
"novform")
end
elseif not m_table.contains(must, letter) then
infer_err("For verb form " .. vform .. ", radical " .. index ..
" must be one of " .. table.concat(must, " ") .. ", not " .. letter, "novform")
end
end
-- Check that length of headword is within [min, max]
local function check_len(min, max)
if min and len < min then
infer_err(("Not enough letters for verb form %s, expected at least %s"):format(vform, min), "novform")
end
if max and len > max then
infer_err(("Too many letters for verb form %s, expected at most %s"):format(vform, max), "novform")
end
end
-- A form I verb beginning with w- keeps the w in the non-past unless the non-past vowel is a kasra or a
-- lowered kasra; see form_i_w_assimilated(), which the radicals path uses too. This used to be spelt out
-- here as "i~a or u~u", which missed a~u (وَجَلَ يَوْجُلُ).
local function form_I_w_non_assimilated()
return not form_i_w_assimilated(past_vowel, nonpast_vowel)
end
-- Convert radicals to canonical form (handle various hamza varieties and check for misplaced alif or alif maqṣūra;
-- legitimate cases of these letters are handled above).
local function convert(rad, index)
if type(rad) == "table" then
for i, r in ipairs(rad) do
rad[i] = convert(r, index)
end
return rad
elseif rad == HAMZA_ON_ALIF or rad == HAMZA_UNDER_ALIF or
rad == HAMZA_ON_W or rad == HAMZA_ON_Y then
return HAMZA
elseif rad == AMAQ then
infer_err("Radical " .. index .. " must not be alif maqṣūra")
elseif rad == ALIF then
infer_err("Radical " .. index .. " must not be alif")
else
return rad
end
end
local quadlit = vform:find("q$")
-- find first radical, start of second/third radicals, check for
-- required letters
local radstart, rad1, rad2, rad3, rad4
local weakness
if vform == "I" or vform == "II" then
rad1 = ch[1]
radstart = 2
elseif vform == "III" then
rad1 = ch[1]
check(2, {ALIF, W}) -- W occurs in passive-only verbs
radstart = 3
elseif vform == "IV" then
-- this would be alif-madda but we replaced it with hamza-alif above.
if ch[1] == HAMZA and ch[2] == ALIF then
rad1 = HAMZA
else
check(1, HAMZA_ON_ALIF)
rad1 = ch[2]
end
radstart = 3
elseif vform == "V" then
check(1, is_reduced and ALIF or T)
rad1 = ch[2]
radstart = 3
elseif vform == "VI" then
check(1, is_reduced and ALIF or T)
if ch[2] == AMAD then
rad1 = HAMZA
radstart = 3
else
rad1 = ch[2]
check(3, {ALIF, W}) -- W occurs in passive-only verbs
radstart = 4
end
elseif vform == "VII" then
check(1, ALIF)
if is_reduced then
check(2, M)
rad1 = M
radstart = 3
else
check(2, N)
rad1 = ch[3]
radstart = 4
end
elseif vform == "VIII" then
check(1, ALIF)
rad1 = ch[2]
if rad1 == "د" then
rad1 = {"د", "ذ"} -- not considered ambiguous since it's usually د
radstart = 3
form_viii_assim = "دّ"
elseif rad1 == "ظ" and ch[3] == "ط" and len >= 5 then
-- [[اظطلم]], variant of [[اظلم]]
radstart = 4
form_viii_assim = "ظْط"
elseif rad1 == "ذ" and ch[3] == "د" and len >= 5 then
-- [[اذدكر]], variant of [[اذكر]]
radstart = 4
form_viii_assim = "ذْد"
elseif rad1 == T or rad1 == "ث" or rad1 == "ذ" or rad1 == "ط" or rad1 == "ظ" then
radstart = 3
form_viii_assim = rad1 .. SH
elseif rad1 == "ز" then
check(3, "د")
radstart = 4
form_viii_assim = "زْد"
elseif rad1 == "ص" or rad1 == "ض" then
check(3, "ط")
radstart = 4
form_viii_assim = rad1 .. SK .. "ط"
else
check(3, T)
radstart = 4
rad1 = convert(rad1, 1)
form_viii_assim = rad1 .. SK .. "ت"
end
if rad1 == T then
-- Radical is ambiguous, might be ت or و or ي but doesn't affect conjugation. Note that there are no
-- form-VIII verbs with initial radical ي given in Hans Wehr but Lane mentions at least:
-- - (page 2973) اِتَّأَسَ, with assimilation of the ي to ت, from root ي ء س;
-- - (page 2975) اِتَّبَسَ non-past يَتَّبِسُ and alternative اِيتَبَسَ non-past يَاتَبِسُ from the root ي ب س;
-- - (page 2976) اِتَّسَرَ non-past يَتَّسِرُ or alternatively يَأْتَسِرُ with hamza preserved from the root ي س ر.
-- These alternative forms seem very rare and probably not worth worrying about, but if we want to handle
-- them, we can do it when the time comes.
rad1 = {T, W, Y, ambig = true}
-- اِتَّخَذَ irregularly has hamza as the radical but assimilates like و
if ch[3] == "خ" and ch[4] == "ذ" then
rad1[4] = HAMZA
end
end
elseif vform == "IX" then
check(1, ALIF)
rad1 = ch[2]
radstart = 3
elseif vform == "X" then
check(1, ALIF)
check(2, S)
if is_reduced then
rad1 = ch[3]
radstart = 4
else
check(3, T)
rad1 = ch[4]
radstart = 5
end
elseif vform == "Iq" then
rad1 = ch[1]
rad2 = ch[2]
radstart = 3
elseif vform == "IIq" then
check(1, T)
rad1 = ch[2]
rad2 = ch[3]
radstart = 4
elseif vform == "IIIq" then
check(1, ALIF)
rad1 = ch[2]
rad2 = ch[3]
check(4, N)
radstart = 5
elseif vform == "IVq" then
check(1, ALIF)
rad1 = ch[2]
rad2 = ch[3]
radstart = 4
elseif vform == "XI" then
check_len(5, 5)
check(1, ALIF)
rad1 = ch[2]
rad2 = ch[3]
check(4, ALIF)
rad3 = ch[5]
weakness = "sound"
elseif vform == "XII" then
check(1, ALIF)
rad1 = ch[2]
if ch[3] ~= ch[5] then
infer_err("For verb form XII, letters 3 and 5 should be the same", "novform")
end
check(4, W)
radstart = 5
elseif vform == "XIII" then
check_len(5, 5)
check(1, ALIF)
rad1 = ch[2]
rad2 = ch[3]
check(4, W)
rad3 = ch[5]
if rad3 == AMAQ then
weakness = "final-weak"
else
weakness = "sound"
end
elseif vform == "XIV" then
check_len(6, 6)
check(1, ALIF)
rad1 = ch[2]
rad2 = ch[3]
check(4, N)
rad3 = ch[5]
if ch[6] == AMAQ then
check_waw_ya(rad3)
weakness = "final-weak"
else
if ch[5] ~= ch[6] then
infer_err("For verb form XIV, letters 5 and 6 should be the same", "novform")
end
weakness = "sound"
end
elseif vform == "XV" then
check_len(6, 6)
check(1, ALIF)
rad1 = ch[2]
rad2 = ch[3]
check(4, N)
rad3 = ch[5]
if rad3 == Y then
check(6, ALIF)
else
check(6, AMAQ)
end
weakness = "sound"
else
error("Internal error: Unrecognized verb form " .. vform)
end
-- Process the last two radicals. RADSTART is the index of the first of the two. If it's nil then all radicals have
-- already been processed above, and we don't do anything.
if radstart then
-- There must (normally) be one or two letters left.
if len == radstart then
if vform == "I" and ch[len] == Y then
-- short form حَيَّ
weakness = "final-weak"
rad2 = Y
rad3 = Y
variant = "short"
elseif vform == "IV" and rad1 == "ر" and ch[len] == AMAQ then
-- irregular verb أَرَى
weakness = "final-weak"
rad2 = HAMZA
rad3 = Y
elseif vform == "X" and rad1 == "ح" and ch[len] == AMAQ then
-- irregular verb اِسْتَحَى
weakness = "final-weak"
rad2 = Y
rad3 = Y
variant = "short"
else
-- If one letter left, then it's a geminate verb. If the letter is alif or alif maqṣūra, it will trigger
-- an error down the line.
if vform_supports_geminate(vform) then
weakness = "geminate"
rad2 = ch[len]
rad3 = ch[len]
if vform == "III" or vform == "VI" then
variant = "short"
end
else
infer_err("Apparent geminate verb, but geminate verbs not allowed for this verb form")
end
end
elseif quadlit then
-- Process last two radicals of a quadriliteral verb form.
rad3 = ch[radstart]
rad4 = ch[radstart + 1]
expected_length = radstart + 1
check_len(expected_length)
if rad4 == AMAQ or rad4 == ALIF and rad3 == Y or rad4 == Y then
-- rad4 can be Y in passive-only verbs.
if vform_supports_final_weak(vform) then
weakness = "final-weak"
-- Ambiguous radical; randomly pick wāw as radical (but avoid two wāws in a row); it could be wāw or
-- yāʾ, but doesn't affect the conjugation.
rad4 = rad3 == W and {Y, W, ambig = true} or {W, Y, ambig = true}
else
infer_err("Last radical is " .. rad4 .. " but verb form " .. vform ..
" doesn't support final-weak verbs", "novform")
end
else
weakness = "sound"
end
else
-- Process last two radicals of a triliteral verb form.
rad2 = ch[radstart]
rad3 = ch[radstart + 1]
expected_length = radstart + 1
check_len(expected_length)
if vform == "I" and (is_waw_ya(rad3) or rad3 == ALIF or rad3 == AMAQ) then
local inferred_past_vowel, inferred_nonpast_vowel
-- Check for final-weak form I verb. It can end in tall alif (rad3 = wāw) or alif maqṣūra (rad3 = yāʾ)
-- or a wāw or yāʾ (with a past vowel of i or u, e.g. nasiya/yansā "forget" or with a passive-only
-- verb).
if rad1 == W and not form_I_w_non_assimilated() then
weakness = "assimilated+final-weak"
else
weakness = "final-weak"
end
if rad3 == ALIF then
rad3 = W
inferred_past_vowel = A
inferred_nonpast_vowel = U
if is_passive_only(passive) then
infer_err("Final-weak form-I passive verbs should end in yāʔ (ي), not tall alif (ا)", "novform")
end
elseif rad3 == AMAQ then
rad3 = Y
inferred_past_vowel = A
inferred_nonpast_vowel = I
if is_passive_only(passive) then
infer_err("Final-weak form-I passive verbs should end in yāʔ (ي), not alif maqṣūra (ى)",
"novform")
end
elseif rad1 == "ح" and rad2 == Y and rad3 == Y then
-- Long variant حَيِيَ.
inferred_past_vowel = I
inferred_nonpast_vowel = A
variant = "long"
else
if not is_passive_only(passive) then
-- does a non-passive final-weak verb in -uwa ever happen? (YES: e.g. [[رجو]] "to be slack")
inferred_past_vowel = rad3 == Y and I or U
inferred_nonpast_vowel = A
end
-- Ambiguous radical; randomly pick wāw as radical (but avoid two wāws); it could be wāw or yāʾ, but
-- doesn't affect the conjugation.
rad3 = (rad1 == W or rad2 == W) and {Y, W, ambig = true} or {W, Y, ambig = true} -- ambiguous
end
if inferred_past_vowel then
local raw_past_vowel = rget(past_vowel)
local raw_nonpast_vowel = rget(nonpast_vowel)
if raw_past_vowel ~= "-" then
if raw_past_vowel ~= inferred_past_vowel then
infer_err(("Final-weak form-I verb inferred past vowel %s, which disagrees with " ..
"explicitly specified %s"):format(undia[inferred_past_vowel], undia[raw_past_vowel]), "novform")
else
-- in case of footnote in past_vowel
inferred_past_vowel = past_vowel
end
end
if raw_nonpast_vowel ~= "-" and raw_nonpast_vowel ~= A and inferred_nonpast_vowel == U then
-- if inferred as I or A, the reality can be the reverse; form-I final-weak verbs with a~a and
-- i~i exist, e.g. سَعَى/يَسْعَى, وَلِيَ/يَلِي. Weird verb [[صها]] (also written [[صهى]]) has non-past
-- يصهى so we can't throw an error in this situation.
if raw_nonpast_vowel ~= inferred_nonpast_vowel then
infer_err(("Final-weak form-I verb inferred non-past vowel %s, which disagrees with " ..
"explicitly specified %s"):format(undia[inferred_nonpast_vowel], undia[raw_nonpast_vowel]), "novform")
else
-- in case of footnote in nonpast_vowel
inferred_nonpast_vowel = nonpast_vowel
end
end
end
if not is_passive_only(passive) then
if rget(past_vowel) == "-" then
past_vowel = inferred_past_vowel
end
if rget(nonpast_vowel) == "-" then
nonpast_vowel = inferred_nonpast_vowel
end
end
elseif vform == "IX" and is_waw_ya(rad3) and len == radstart + 2 and ch[len] == AMAQ then
-- Final-weak form IX verbs like اِرْعَوَى "to desist, to repent, to see the light".
weakness = "final-weak"
expected_length = radstart + 2
elseif vform == "X" and rad1 == "ح" and rad2 == Y and rad3 == ALIF then
-- Long variant اِسْتَحْيَا.
weakness = "final-weak"
rad3 = Y
variant = "long"
elseif rad3 == AMAQ or rad2 == Y and rad3 == ALIF or rad3 == Y then
-- rad3 == Y happens in passive-only verbs.
if vform_supports_final_weak(vform) then
weakness = "final-weak"
else
infer_err("Last radical is " .. rad3 .. " but verb form doesn't support final-weak verbs")
end
-- Ambiguous radical; randomly pick wāw as radical (but avoid two wāws); it could be wāw or yāʾ, but
-- doesn't affect the conjugation.
rad3 = (rad1 == W or rad2 == W) and {Y, W, ambig = true} or {W, Y, ambig = true}
elseif rad2 == ALIF then
if vform_supports_hollow(vform) then
weakness = "hollow"
local function set_past_to_a()
if req(past_vowel, A) then
-- already set
elseif req(past_vowel, "-") or req(past_vowel, rget(nonpast_vowel)) then
past_vowel = A
else
infer_err(("Form I hollow verb with nonpast vowel set to '%s' must have past vowel set to 'a' or the same value, not %s"):
format(undia[rget(nonpast_vowel)], undia[rget(past_vowel)]), "novform")
end
end
if vform == "I" and req(nonpast_vowel, U) then
rad2 = W
set_past_to_a()
elseif vform == "I" and req(nonpast_vowel, I) then
rad2 = Y
set_past_to_a()
else
if req(nonpast_vowel, A) and not req(past_vowel, I) then
infer_err(("Form I hollow verb with nonpast vowel set to 'a' must have past vowel set to 'i', not %s"):
format(undia[rget(past_vowel)]), "novform")
end
-- Ambiguous radical; could be wāw or yāʾ; if verb form I, it's critical to get this right, and
-- the caller checks for this situation and throws an error if non-past vowel is "a" and second
-- radical isn't explicitly given.
rad2 = {W, Y, ambig = true, need_radical = true}
end
else
infer_err("Second radical is alif but verb form doesn't support hollow verbs")
end
elseif vform == "I" and rad1 == W and not form_I_w_non_assimilated() then
weakness = "assimilated"
elseif rad2 == rad3 and (vform == "III" or vform == "VI") then
weakness = "geminate"
variant = "long"
else
weakness = "sound"
end
end
if expected_length then
check_len(expected_length, expected_length)
end
end
rad1 = convert(rad1, 1)
rad2 = convert(rad2, 2)
rad3 = convert(rad3, 3)
rad4 = convert(rad4, 4)
if not weakness then
error("Internal error: Returned weakness from infer_radicals() is nil")
end
return {
weakness = weakness,
rad1 = rad1,
rad2 = rad2,
rad3 = rad3,
rad4 = rad4,
past_vowel = past_vowel,
nonpast_vowel = nonpast_vowel,
form_viii_assim = form_viii_assim,
variant = variant,
}
end
-- bot interface to infer_radicals()
function export.infer_radicals_json(frame)
local iparams = {
headword = {},
vform = {},
passive = {},
past_vowel = {},
nonpast_vowel = {},
is_reduced = {type = "boolean"},
}
local iargs = require("Module:parameters").process(frame.args, iparams)
return require("Module:JSON").toJSON(export.infer_radicals(iargs))
end
-- Infer vocalization from participle headword (active or passive), verb form (I, II, etc.) and whether the headword is
-- active or passive. Throw an error if headword is malformed. Returned radicals may contain Latin letters "t", "w" or "y"
-- indicating ambiguous radicals guessed to be tāʾ, wāw or yāʾ respectively.
function export.infer_participle_vocalization(headword, vform, weakness, is_active)
local chars = {}
local orig_headword = headword
-- Sub out alif-madda for easier processing.
headword = rsub(headword, AMAD, HAMZA .. ALIF)
local len = ulen(headword)
-- Extract the headword letters into an array.
for i = 1, len do
table.insert(chars, usub(headword, i, i))
end
local function form_intro_error_msg()
return ("For verb form %s %s%s participle %s, "):format(vform, orig_headword ~= headword and "normalized " or
"", is_active and "active" or "passive", headword)
end
local function err(msg)
error(form_intro_error_msg() .. msg, 1)
end
-- Check that length of headword is within [min, max].
local function check_len(min, max)
if min and len < min then
err(("expected at least %s letters but saw %s"):format(min, len))
elseif max and len > max then
err(("expected at most %s letters but saw %s"):format(max, len))
end
end
-- Get the character at `ind`, making sure it exists.
local function c(ind)
check_len(ind)
return chars[ind]
end
-- Check that the letter at the given index is the given string, or is one of the members of the given array
local function check(index, must)
local letter = chars[index]
local function make_possible_values()
if type(must) == "string" then
return must
else
return list_to_text(must, nil, " or ")
end
end
if not letter then
err(("expected a letter (specifically %s) at position %s, but participle is too short"):format(
make_possible_values(), index))
end
local matches
if type(must) == "string" then
matches = letter == must
else
matches = m_table.contains(must, letter)
end
if not matches then
err(("letter %s at index %s must be %s"):format(letter, index, make_possible_values()))
end
end
local function check_weakness(values, allow_missing, invert_condition)
local function make_possible_weaknesses()
for i, val in ipairs(values) do
values[i] = "'" .. val .. "'"
end
return list_to_text(values, nil, " or ")
end
if allow_missing and invert_condition then
error("Internal error: Can't specify both allow_missing and invert_condition")
end
if not weakness then
if allow_missing or invert_condition then
return
else
err(("weakness is unspecified but must be %s"):format(make_possible_weaknesses()))
end
else
local matches = m_table.contains(values, weakness)
if invert_condition and matches then
err(("weakness '%s' must not be %s"):format(weakness, make_possible_weaknesses()))
elseif not invert_condition and not matches then
err(("weakness '%s' must be %s"):format(weakness, make_possible_weaknesses()))
end
end
end
local vocalized
local function handle_possibly_final_weak(sound_prefix, expected_length)
check_len(expected_length, expected_length)
if c(expected_length) == AMAQ then
-- passive final-weak
if is_active then
err("participle in -ِى only allowed for passive participles")
end
check_weakness({"final-weak", "assimilated+final-weak"}, "allow missing")
vocalized = sound_prefix .. AN .. AMAQ
else
-- all others behave as if sound
check_weakness({"final-weak", "assimilated+final-weak"}, nil, "invert condition")
vocalized = sound_prefix .. (is_active and I or A) .. c(expected_length)
end
end
if not (vform == "I" and is_active) then
-- all participles except verb form I active begin in م-.
check(1, M)
end
if vform == "I" then
if is_active then
check(2, ALIF)
local sound_prefix = c(1) .. AA .. c(3)
if len == 3 then
if c(3) == HAMZA then
-- Either hollow with hamzated third radical, e.g. [[شاء]] active participle 'شَاءٍ', or final-weak
-- with hamzated second radical, e.g. [[رأى]] active participle 'رَاءٍ'. Theoretically (?), also
-- geminate with hamzated second/third radical, but I don't know if any such verbs exist.
if weakness == "geminate" then
vocalized = sound_prefix .. SH
else
check_weakness({"hollow", "final-weak"}, "allow missing")
vocalized = sound_prefix .. IN
end
else
check_weakness({"final-weak", "geminate"})
if weakness == "geminate" then
vocalized = sound_prefix .. SH
else
vocalized = sound_prefix .. IN
end
end
else
check_len(4, 4)
-- we will convert back to alif maqṣūra below as needed
vocalized = sound_prefix .. I .. c(4)
end
else
-- assimilated verbs: regular, e.g. مَوْزُون "weighed"
-- geminate verbs: regular, e.g. مَبْلُول "moistened"
-- third-hamzated verbs: مَبْرُوء
-- hollow verbs: مَقُود "led, driven"; مَزِيد "added, increased"
-- hollow first-hamzated verbs: مَئِيض "returned, reverted"; مَأْيُوس "despaired" (NOTE: formation is sound);
-- مَأُود or مَؤُود "bent; depleted"
-- hollow third-hamzated verbs: مَشِيء "willed, intended", مَضُوء "glittered?"
-- final-weak: مَلْقِيّ "found, encountered"; مَصْغُوّ "inclined"
-- hollow + final-weak: مَشْوِيّ "fried, grilled", مَهْوِيّ "loved"
-- first-hamzated + hollow + final-weak: مَأْوِيّ "received hospitably"
local sound_prefix = MA .. c(2) .. SK .. c(3)
if len == 5 then
-- sound, assimilated or geminate
check(4, W)
vocalized = sound_prefix .. UU .. c(5)
else
check_len(4, 4)
if c(4) == W then
-- final-weak third-wāw
vocalized = sound_prefix .. U .. W .. SH
elseif c(4) == Y then
-- final-weak third-yāʾ
vocalized = sound_prefix .. I .. Y .. SH
else
-- hollow
check(3, {W, Y})
if c(3) == W then
vocalized = MA .. c(2) .. UU .. c(4)
else
vocalized = MA .. c(2) .. II .. c(4)
end
end
end
end
elseif vform == "II" or vform == "V" or vform == "XII" or vform == "XIII" or vform == "Iq" or vform == "IIq" or
vform == "IIIq" then
local sound_prefix, expected_length
if vform == "II" then
sound_prefix = MU .. c(2) .. A .. c(3) .. SH
expected_length = 4
elseif vform == "V" then
check(2, T)
sound_prefix = MU .. T .. A .. c(3) .. A .. c(4) .. SH
expected_length = 5
elseif vform == "XII" then
-- e.g. [[احدودب]] "to be or become convex or humpbacked", مُحْدَوْدِب (active);
-- [[اثنونى]] "to be bent; to be doubled up", مُثْنَوْنٍ (active)
check(4, W)
if c(3) ~= c(5) then
err(("third letter %s should be the same as the fifth letter %s"):format(c(3), c(5)))
end
sound_prefix = MU .. c(2) .. SK .. c(3) .. A .. W .. SK .. c(5)
expected_length = 6
elseif vform == "XIII" then
-- e.g. [[اخروط]] "to get entangled; to extend", مُخْرَوِّط (active), مُخْرَوَّط (passive)
check(4, W)
sound_prefix = MU .. c(2) .. SK .. c(3) .. A .. W .. SH
expected_length = 5
elseif vform == "Iq" then
sound_prefix = MU .. c(2) .. A .. c(3) .. SK .. c(4)
expected_length = 5
elseif vform == "IIq" then
check(2, T)
sound_prefix = MU .. T .. A .. c(3) .. A .. c(4) .. SK .. c(5)
expected_length = 6
elseif vform == "IIIq" then
-- e.g. [[اخرنطم]] "to be proud and angry"
check(4, T)
sound_prefix = MU .. c(2) .. SK .. c(3) .. A .. N .. SK .. c(5)
expected_length = 6
else
error("Internal error: Unhandled verb form " .. vform)
end
if len == expected_length - 1 then
-- active final-weak
if not is_active then
err(("length-%s participle only allowed for active participles"):format(len))
end
check_weakness({"final-weak", "assimilated+final-weak"}, "allow missing")
vocalized = sound_prefix .. IN
else
handle_possibly_final_weak(sound_prefix, expected_length)
end
elseif vform == "III" or vform == "VI" then
local sound_prefix, expected_length
if vform == "VI" then
check(2, T)
check(4, ALIF)
sound_prefix = MU .. T .. A .. c(3) .. AA .. c(5)
expected_length = 6
else
sound_prefix = MU .. c(2) .. AA .. c(4)
expected_length = 5
end
if len == expected_length - 1 then
-- active final-weak or active or passive geminate
if is_active then
check_weakness({"geminate", "final-weak", "assimilated+final-weak"})
if weakness == "geminate" then
vocalized = sound_prefix .. SH
else
vocalized = sound_prefix .. IN
end
else
check_weakness({"geminate"}, "allow missing")
vocalized = sound_prefix .. SH
end
else
handle_possibly_final_weak(sound_prefix, expected_length)
end
elseif vform == "IV" or vform == "X" then
-- form IV:
-- sound: مُرْسِخ (active, "entrenching"), مُرْسَخ (passive, "entrenched")
-- first-hamzated (like sound): مُؤْيِس (active, "causing to despair"), مُؤْيَس (passive, "caused to despair")
-- final-weak: مُكْرٍ (active, "renting out"), مُكْرًى (passive, "rented out")
-- assimilated: مُورِد (active, "transferring"), مُورَد (passive, "transferred"); same when first-Y, e.g.
-- أَيْقَنَ "to be certain of": مُوقِن (active), مُوقَن (passive)
-- assimilated + final-weak: مُورٍ (active, "setting fire, kindling"), مُورًى (passive, "set fire, kindled")
-- geminate: مُمِدّ (active, "granting, helping"), مُمَدّ (passive, "granted, helped")
-- hollow: مُزِيل (active, "eliminating"), مُزَال (passive, "eliminated")
-- hollow + final-weak: مُعْيٍ (active, "tiring"), مُعْيًى (passive, "tired")
local sound_prefix, expected_length
if vform == "X" then
check(2, S)
check(3, T)
sound_prefix = MU .. S .. SK .. T .. A .. c(4)
expected_length = 6
else
sound_prefix = MU .. c(2)
expected_length = 4
end
if len == expected_length and c(len - 1) == Y and c(len) ~= AMAQ then
-- active hollow
if not is_active then
err("this shape only allowed for active participles")
end
check_weakness({"hollow"}, "allow missing")
vocalized = sound_prefix .. II .. c(len)
elseif len == expected_length and c(len - 1) == ALIF then
-- passive hollow
if is_active then
err("this shape only allowed for passive participles")
end
check_weakness({"hollow"}, "allow missing")
vocalized = sound_prefix .. AA .. c(len)
elseif len == expected_length - 1 then
-- active final-weak or active or passive geminate
if is_active then
check_weakness({"geminate", "final-weak", "assimilated+final-weak"})
if weakness == "geminate" then
vocalized = sound_prefix .. I .. c(len) .. SH
elseif vform == "IV" and c(2) == W then
-- assimilated final-weak
vocalized = sound_prefix .. c(len) .. IN
else
vocalized = sound_prefix .. SK .. c(len) .. IN
end
else
check_weakness({"geminate"}, "allow missing")
vocalized = sound_prefix .. A .. c(len) .. SH
end
else
if vform == "IV" and c(2) == W then
-- assimilated, possibly final-weak
sound_prefix = sound_prefix .. c(expected_length - 1)
else
sound_prefix = sound_prefix .. SK .. c(expected_length - 1)
end
handle_possibly_final_weak(sound_prefix, expected_length)
end
elseif vform == "VII" or vform == "VIII" then
-- form VII (passive participles are fairly rare but do exist):
-- sound: مُنْكَتِب (active "subscribing"), مُنْكَتَب (passive "subscribed")
-- geminate: مُنْضَمّ (both active "joining, containing" and passive "joined, contained")
-- final-weak: مُنْطَلٍ (active "fooling (someone)"), مُنْطَلًى (passive "fooled")
-- final-weak with medial wāw: مُنْطَوٍ (active "involving"), مُنْطَوًى (passive "involved")
-- hollow: مُنْقَاد (both active "complying with" and passive "complied with")
--
-- for form VIII, the same variants exist but things are complicated by assimilations involving the template T.
-- sound third-hamzated no assimilation: مُبْتَدِئ (active "beginning"), مُبْتَدَأ (passive "begun")
-- geminate no assimilation: مُبْتَزّ (both active "robbing" and passive "robbed")
-- final-weak no assimilation: مُبْتَنٍ (active "building"), مُبْتَنًى (passive "built")
-- final-weak with medial wāw no assimilation: مُحْتَوٍ (active "containing"), مُحْتَوًى (passive "contained")
-- hollow no assimilation: مُخْتَار (both active "choosing" and passive "chosen")
--
-- sound with total assimilation: مُتَّبِع (active "following"), مُتَّبَع (passive "followed")
-- sound with total assimilation, assimilating wāw: مُتَّعِد (active "threatening"), مُتَّعَد (passive "threatened")
-- sound with total assimilation, irregularly assimilating hamza: مُتَّخِذ (active "taking"), مُتَّخَذ (passive "taken")
-- sound with total assimilation (to ḏāl, producing dāl): مُدَّخِر (active "reserving"), مُدَّخَر (passive "reserved")
-- sound with total assimilation (to ḏāl): مُذَّكِر (active "remembering"), مُذَّكَر (passive "remembered")
-- sound with total assimilation (to ṭāʔ): مُطَّرِح (active "discarding"), مُطَّرَح (passive "discarded")
-- sound with total assimilation (to ẓāʔ): مُظَّلِم (active "tolerating"), مُظَّلَم (passive "tolerated")
-- final-weak with total assimilation, assimilating wāw: مُتَّقٍ (active "guarding against"), مُتَّقًى (passive "guarded against")
-- final-weak with total assimilation (to ṯāʔ): مُثَّنٍ (active "undulating"), مُثَّنًى (passive "undulated")
-- final-weak with total assimilation (to dāl): مُدَّعٍ (active "claiming"), مُدَّعًى (passive "claimed")
-- sound with partial assimilation (to zayn): مُزْدَهِر (active "thriving"), مُزْدَهَر (passive "thrived")
-- sound with medial wāw with partial assimilation (to zayn): مُزْدَوِج (active "appearing twice")
-- sound with partial assimilation (to ṣād): مُصْطَبِح (active "illuminating"), مُصْطَبَح (passive, "illuminated")
-- sound with partial assimilation (to ḍād): مُضْطَرِب (active "to be disturbed"; no passive)
-- geminate with partial assimilation (to ṣād): مُصْطَبّ (both active "effusing" and passive "effused")
-- geminate with partial assimilation (to ḍād): مُضْطَرّ (both active "forcing" and passive "forced")
-- final-weak with partial assimilation (to ṣād): مُصْطَلٍ (active "warming"), مُصْطَلًى (passive "warmed")
-- hollow with partial assimilation (to zayn): مُزْدَاد (both active "increasing" and passive "increased")
-- hollow with partial assimilation (to ṣad): مُصْطَاد (both active "hunting" and passive "hunted")
local sound_prefix, sufind
if vform == "VII" then
check(2, N)
sound_prefix = MU .. N .. SK .. c(3)
sufind = 4
else
local c2 = c(2)
if c2 == T or c2 == "د" or c2 == "ث" or c2 == "ذ" or c2 == "ط" or c2 == "ظ" then
-- full assimilation
sound_prefix = MU .. c2 .. SH
sufind = 3
else
-- partial or no assimilation
if c2 == "ز" then
check(3, "د")
elseif c2 == "ص" or c2 == "ض" then
check(3, "ط")
else
check(3, T)
end
sound_prefix = MU .. c2 .. SK .. c(3)
sufind = 4
end
end
if c(sufind) == ALIF then
-- hollow, active or passive
check_len(sufind + 1, sufind + 1)
check_weakness({"hollow"}, "allow missing")
vocalized = sound_prefix .. AA .. c(sufind + 1)
elseif len == sufind then
-- active final-weak or active or passive geminate
if is_active then
check_weakness({"geminate", "final-weak", "assimilated+final-weak"})
if weakness == "geminate" then
vocalized = sound_prefix .. A .. c(len) .. SH
else
vocalized = sound_prefix .. A .. c(len) .. IN
end
else
check_weakness({"geminate"}, "allow missing")
vocalized = sound_prefix .. A .. c(len) .. SH
end
else
sound_prefix = sound_prefix .. A .. c(sufind)
handle_possibly_final_weak(sound_prefix, sufind + 1)
end
elseif vform == "IX" then
check_len(4, 4)
vocalized = MU .. c(2) .. SK .. c(3) .. A .. c(4) .. SH
elseif vform == "IVq" then
-- e.g. [[اذلعب]] "to scamper away", مُذْلَعِبّ (active), مُذْلَعَبّ (passive);
-- [[اطمأن]] "to remain quietly; to be certain", مُطْمَئِنّ (active), مُطْمَأَنّ (passive)
check_len(5, 5)
local sound_prefix = MU .. c(2) .. SK .. c(3) .. A .. c(4)
if is_active then
vocalized = sound_prefix .. I .. c(5) .. SH
else
vocalized = sound_prefix .. A .. c(5) .. SH
end
elseif vform == "XI" then
check_len(5, 5)
check(4, ALIF)
vocalized = MU .. c(2) .. SK .. c(3) .. AA .. c(5) .. SH
-- e.g. [[احمار]] "to turn red, to blush", مُحْمَارّ (active)
elseif vform == "XIV" or vform == "XV" then
-- FIXME: Implement. No examples in Wiktionary currently; need to look up in a grammar.
error("Support for verb form " .. vform .. " not implemented yet")
else
error("Don't recognize verb form " .. vform)
end
vocalized = rsub(vocalized, HAMZA .. AA, AMAD)
local reconstructed_headword = lang:makeEntryName(vocalized)
if reconstructed_headword ~= orig_headword then
error(("Internal error: Vocalized participle %s doesn't match original participle %s"):format(
vocalized, orig_headword))
end
-- Apply NFC-style normalization to match MediaWiki's automatic normalization
return apply_nfc_shadda(vocalized)
end
function export.infer_participle_vocalization_json(frame)
local iparams = {
[1] = {required = true},
[2] = {required = true},
["weakness"] = {},
["passive"] = {type = "boolean"}
}
local iargs = require("Module:parameters").process(frame.args, iparams)
return export.infer_participle_vocalization(iargs[1], iargs[2], iargs.weakness, not iargs.passive)
end
return export
2l2949w87xn9l5vdyjrp2yclbjqkhrc
1159107
1158999
2026-09-10T20:48:55Z
ForzaGreen
28665
إغلاق الاكتشاف ١٩: سالَ (نموذج ١٣٦) — صيغة الماضي المختصرة بالفتح إلى جانب الكسر، وفق حاشية الصفحة ٢٠٢
1159107
Scribunto
text/plain
local export = {}
--[=[
This module implements {{ar-conj}} and provides the underlying conjugation functions for {{ar-verb}}
(whose actual formatting is done in [[Module:ar-headword]]).
Author: User:Benwing, from an early version (2013-2014) by User:Atitarev, User:ZxxZxxZ.
]=]
--[=[
TERMINOLOGY:
-- "slot" = A particular combination of tense/mood/person/number/etc.
Example slot names for verbs are "past_1s" (past tense first-person singular), "juss_pass_3fp" (non-past jussive
passive third-person feminine plural) "ap" (active participle). Each slot is filled with zero or more forms.
-- "form" = The conjugated Arabic form representing the value of a given slot.
-- "lemma" = The dictionary form of a given Arabic term. For Arabic, normally the third person masculine singular past,
although other forms may be used if this form is missing (e.g. in passive-only verbs or verbs lacking the past).
]=]
--[=[
FIXME:
1. Finish unimplemented conjugation types. Only IX-final-weak left (extremely rare, possibly only one verb اِعْمَايَ
(according to Haywood and Nahmad p. 244, who are very specific about the irregular occurrence of alif + yā instead
of expected اِعْمَيَّ with doubled yā). Not in Hans Wehr. NOTE: Not true about this, cf. form IX اِرْعَوَى "to desist,
to repent, to see the light". Also note form XII اِخْضَوْضَرَ = form IX اِخْضَرَّ "to be or become green".
[DONE except for اِعْمَايَ]
2. Implement irregular verbs as special cases and recognize them, e.g.
-- laysa "to not be"; only exists in the past tense, no non-past, no imperative, no participles, no passive, no
verbal noun. Irregular alternation las-/lays-. [IMPLEMENTABLE USING OVERRIDES]
-- istaḥā yastaḥī "be ashamed of" -- this is complex according to Hans Wehr because there are two verbs, regular
istaḥyā yastaḥyī "to spare (someone)'s life" and irregular istaḥyā yastaḥyī "to be ashamed to face (someone)",
which is irregular because it has the alternate irregular form istaḥā yastaḥī which only applies to this meaning.
Currently we follow Haywood and Nahmad in saying that both varieties can be spelled istaḥyā/istaḥā/istaḥḥā, but we
should instead use a variant= param similar to حَيَّ to distinguish the two possibilities, and maybe not include
istaḥḥā.
-- ʿayya/ʿayiya yaʿayyu/yaʿyā "to not find the right way, be incapable of, stammer, falter, fall ill". This appears
to be a mixture of a geminate and final-weak verb. Unclear what the whole paradigm looks like. Do the
consonant-ending parts in the past follow the final-weak paradigm? Is it the same in the non-past? Or can you
conjugate the non-past fully as either geminate or final-weak?
-- اِنْمَحَى inmaḥā or يمَّحَى immaḥā "to be effaced, obliterated; to disappear, vanish" has irregular assimilation of inm-
to imm- as an alternative. inmalasa "to become smooth; to glide; to slip away; to escape" also has immalasa as an
alternative. The only other form VII verbs in Hans Wehr beginning with -m- are inmalaḵa "to be pulled out, torn
out, wrenched" and inmāʿa "to be melted, to melt, to dissolve", which are not listed with imm- alternatives, but
might have them; if so, we should handle this generally. [DONE]
-- يَرَعَ yaraʕa yariʕu "to be a coward, to be chickenhearted" as an alternative form of يَرِعَ yariʕa yayraʕu (as given in
Wehr). [IMPLEMENTABLE USING OVERRIDES]
3. Implement individual override parameters for each paradigm part. See Module:fro-verb for an example of how to do this
generally. Note that {{temp|ar-conj-I}} and other of the older templates already had such individual override params.
[DONE]
Irregular verbs already implemented:
-- [ḥayya/ḥayiya yaḥyā "live" -- behaves like a normal final-weak verb
(e.g. past first singular ḥayītu) except in the past-tense parts with
vowel-initial endings (all the third person except for the third feminine
plural). The normal singular and dual endings have -yiya- in them, which
compresses to -yya-, with the normal endings the less preferred ones.
In masculine third plural, expected ḥayū is replaced by ḥayyū by
analogy to the -yy- parts, and the regular form is not given as an
alternant in John Mace. Barron's 201 verbs appears to have the regular
ḥayū as the part, however. Note also that final -yā appears with tall
alif. This appears to be a spelling convention of Arabic, also applying
in ḥayyā (form II, "to keep (someone) alive") and 'aḥyā (form IV,
"to animate, revive, give birth to, give new life to").] -- implemented
-- [ittaxadha yattaxidhu "take"] -- implemented
-- [sa'ala yas'alu "ask" with alternative jussive/imperative yasal/sal] -- implemented
-- [ra'ā yarā "see"] -- implemented
-- ['arā yurī "show"] -- implemented
-- ['akala ya'kulu "eat" with imperative kul] -- implemented
-- ['axadha ya'xudhu "take" with imperative xudh] -- implemented
-- ['amara ya'muru "order" with imperative mur] -- implemented
--]=]
local force_cat = false -- set to true for debugging
-- if true, always maintain manual translit during processing, and compare against full translit at the end
local debug_translit = false
local lang = require("Module:languages").getByCode("ar")
local m_links = require("Module:links")
local m_string_utilities = require("Module:string utilities")
local m_table = require("Module:table")
local ar_utilities = require("Module:ar-utilities")
local iut = require("Module:inflection utilities")
local put = require("Module:parse utilities")
local list_to_text = mw.text.listToText
local rfind = m_string_utilities.find
local rsubn = m_string_utilities.gsub
local rmatch = m_string_utilities.match
local rsplit = m_string_utilities.split
local usub = m_string_utilities.sub
local ulen = m_string_utilities.len
local u = m_string_utilities.char
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local dump = mw.dumpObject
-- Within this module, conjugations are the functions that do the actual
-- conjugating by creating the parts of a basic verb.
-- They are defined further down.
local conjugations = {}
-- hamza variants
local HAMZA = u(0x0621) -- hamza on the line (stand-alone hamza) = ء
local HAMZA_ON_ALIF = u(0x0623)
local HAMZA_ON_W = u(0x0624)
local HAMZA_UNDER_ALIF = u(0x0625)
local HAMZA_ON_Y = u(0x0626)
local HAMZA_ANY = "[" .. HAMZA .. HAMZA_ON_ALIF .. HAMZA_UNDER_ALIF .. HAMZA_ON_W .. HAMZA_ON_Y .. "]"
local HAMZA_PH = u(0xFFF0) -- hamza placeholder
local BAD = u(0xFFF1)
local BORDER = u(0xFFF2)
local KEEP_W_PH = u(0xFFF3) -- retained-wāw placeholder; see postprocess_term()
local KEEP_HAMZA_PH = u(0xFFF4) -- quiescent-hamza placeholder; see postprocess_term()
local WAW_SEAT_PH = u(0xFFF5) -- pre-seated hamza-on-wāw placeholder; see postprocess_term()
local NO_MADDA_PH = u(0xFFF6) -- hamza held back from the madda rule; see postprocess_term()
-- diacritics
local A = u(0x064E) -- fatḥa
local AN = u(0x064B) -- fatḥatān (fatḥa tanwīn)
local U = u(0x064F) -- ḍamma
local UN = u(0x064C) -- ḍammatān (ḍamma tanwīn)
local I = u(0x0650) -- kasra
local IN = u(0x064D) -- kasratān (kasra tanwīn)
local SK = u(0x0652) -- sukūn = no vowel
local SH = u(0x0651) -- šadda = gemination of consonants
local DAGGER_ALIF = u(0x0670)
local DIACRITIC_ANY_BUT_SH = "[" .. A .. I .. U .. AN .. IN .. UN .. SK .. DAGGER_ALIF .. "]"
-- Pattern matching short vowels
local AIU = "[" .. A .. I .. U .. "]"
-- Pattern matching short vowels or sukūn
local AIUSK = "[" .. A .. I .. U .. SK .. "]"
-- Pattern matching any diacritics that may be on a consonant
local DIACRITIC = SH .. "?" .. DIACRITIC_ANY_BUT_SH
-- translit_patterns
local vowels = "aeiouāēīōū"
local NV = "[^" .. vowels .. "]"
local dia = {a = A, i = I, u = U}
local undia = {[A] = "a", [I] = "i", [U] = "u", ["-"] = "-"}
-- various letters and signs
local ALIF = u(0x0627) -- ʾalif = ا
local AMAQ = u(0x0649) -- ʾalif maqṣūra = ى
local AMAD = u(0x0622) -- ʾalif madda = آ
local TAM = u(0x0629) -- tāʾ marbūṭa = ة
local T = u(0x062A) -- tāʾ = ت
local HYPHEN = u(0x0640)
local N = u(0x0646) -- nūn = ن
local W = u(0x0648) -- wāw = و
local Y = u(0x064A) -- yāʾ = ي
local S = "س"
local M = "م"
local LRM = u(0x200e) -- left-to-right mark
-- common combinations
local AH = A .. TAM
local AT = A .. T
local AA = A .. ALIF
local AAMAQ = A .. AMAQ
local AAH = AA .. TAM
local AAT = AA .. T
local II = I .. Y
local UU = U .. W
local AY = A .. Y
local AW = A .. W
local AYSK = AY .. SK
local AWSK = AW .. SK
local NA = N .. A
local NI = N .. I
local AAN = AA .. N
local AANI = AA .. NI
local AYNI = AYSK .. NI
local AWNA = AWSK .. NA
local AYNA = AYSK .. NA
local AYAAT = AY .. AAT
local UNU = "[" .. UN .. U .. "]"
local MA = M .. A
local MU = M .. U
local TA = T .. A
local TU = T .. U
local _I = ALIF .. I
local _U = ALIF .. U
--W: Morphological pattern (الوزن الصرفي) to verb form mapping
local MORPHOLOGICAL_PATTERN_TO_FORM = {
["فعَل يفعُل"] = "I/a~u",
["فعَل يفعِل"] = "I/a~i",
["فعَل يفعَل"] = "I/a~a",
["فعُل يفعُل"] = "I/u~u",
["فعِل يفعَل"] = "I/i~a",
["فعِل يفعِل"] = "I/i~i",
["فعّل"] = "II",
["فاعل"] = "III",
["أفعل"] = "IV",
["تفعّل"] = "V",
["تفاعل"] = "VI",
["انفعل"] = "VII",
["افتعل"] = "VIII",
["افعلّ"] = "IX",
["استفعل"] = "X",
["افعالّ"] = "XI",
["افعوعل"] = "XII",
["افعوّل"] = "XIII",
["فعلل"] = "Iq",
["تفعلل"] = "IIq",
["افعنلل"] = "IIIq", -- "XIV" should not be used
["افعللّ"] = "IVq",
}
--W: Create reverse mapping from form to morphological pattern
local FORM_TO_MORPHOLOGICAL_PATTERN = {}
for pattern, form in pairs(MORPHOLOGICAL_PATTERN_TO_FORM) do
FORM_TO_MORPHOLOGICAL_PATTERN[form] = pattern
end
--W:
local MORPHOLOGICAL_PATTERN_TO_BASIC_DERIV = {
["فعَل يفعُل"] = "مُجرَّد",
["فعَل يفعِل"] = "مُجرَّد",
["فعَل يفعَل"] = "مُجرَّد",
["فعُل يفعُل"] = "مُجرَّد",
["فعِل يفعَل"] = "مُجرَّد",
["فعِل يفعِل"] = "مُجرَّد",
["فعّل"] = "مزيد بحرف",
["فاعل"] = "مزيد بحرف",
["أفعل"] = "مزيد بحرف",
["تفعّل"] = "مزيد بحرفين",
["تفاعل"] = "مزيد بحرفين",
["انفعل"] = "مزيد بحرفين",
["افتعل"] = "مزيد بحرفين",
["افعلّ"] = "مزيد بحرفين",
["استفعل"] = "مزيد بثلاثة أحرف",
["افعالّ"] = "مزيد بثلاثة أحرف",
["افعوعل"] = "مزيد بثلاثة أحرف",
["افعوّل"] = "مزيد بثلاثة أحرف",
["فعلل"] = "مُجرَّد",
["تفعلل"] = "مزيد بحرف",
["افعنلل"] = "مزيد بحرفين",
["افعللّ"] = "مزيد بحرفين",
}
local translit_cache = {
-- hamza variants
[HAMZA] = "ʔ",
[HAMZA_ON_ALIF] = "ʔ",
[HAMZA_ON_W] = "ʔ",
[HAMZA_UNDER_ALIF] = "ʔ",
[HAMZA_ON_Y] = "ʔ",
[HAMZA_PH] = "ʔ",
-- diacritics
[A] = "a",
[AN] = "an",
[U] = "u",
[UN] = "un",
[I] = "i",
[IN] = "in",
[SK] = "",
[SH] = "*", -- handled specially
[DAGGER_ALIF] = "ā",
-- various letters and signs
[""] = "",
[ALIF] = BAD, -- we should never be transliterating ALIF by itself, as its translit in isolation is ambiguous
[AMAQ] = BAD,
[AMAD] = "ʔā",
[TAM] = "",
[T] = "t",
[N] = "n",
[W] = "w",
[Y] = "y",
[S] = "s",
[M] = "m",
[LRM] = "",
-- common combinations
[AH] = "a",
[AT] = "at",
[AA] = "ā",
[AAMAQ] = "ā",
[AAH] = "āh",
[AAT] = "āt",
[II] = "ī",
[UU] = "ū",
[AY] = "ay",
[AW] = "aw",
[AYSK] = "ay",
[AWSK] = "aw",
[NA] = "na",
[NI] = "ni",
[AAN] = "ān",
[AANI] = "āni",
[AYNI] = "ayni",
[AWNA] = "awna",
[AYNA] = "ayna",
[AYAAT] = "ayāt",
[MA] = "ma",
[MU] = "mu",
[TA] = "ta",
[TU] = "tu",
[_I] = "i",
[_U] = "u",
}
local function transliterate(text)
local cached = translit_cache[text]
if cached then
if cached == BAD then
error(("Internal error: Unable to transliterate %s because explicitly marked as BAD"):format(text))
end
return cached
end
local tr = (lang:transliterate(text))
if not tr then
error(("Internal error: Unable to transliterate: %s"):format(text))
end
translit_cache[text] = tr
return tr
end
local all_person_number_list = {
"1s",
"2ms",
"2fs",
"3ms",
"3fs",
"2d",
"3md",
"3fd",
"1p",
"2mp",
"2fp",
"3mp",
"3fp"
}
local function make_person_number_slot_accel_list(list)
local slot_accel_list = {}
return slot_accel_list
end
local imp_person_number_list = {}
for _, pn in ipairs(all_person_number_list) do
if pn:find("^2") then
table.insert(imp_person_number_list, pn)
end
end
local passive_types = m_table.listToSet {
"pass", -- verb has both active and passive
"ipass", -- verb is active with impersonal passive
"nopass", -- verb is active-only
"onlypass", -- verb is passive-only
"onlypass-impers", -- verb itself is impersonal, meaning passive-only with impersonal passive
}
local indicator_flags = m_table.listToSet {
"nopast", "no_nonpast", "noimp",
"nocat", -- don't categorize or include annotations about this; useful in suppletive parts of verbs
"reduced", -- verb has assimilation/reduction of initial coronals
"altgem", -- form X with alternative past geminate forms with final-weak endings
}
export.potential_lemma_slots = {"past_3ms", "past_pass_3ms", "ind_3ms", "ind_pass_3ms", "imp_2ms"}
export.unsettable_slots = {}
for _, potential_lemma_slot in ipairs(export.potential_lemma_slots) do
table.insert(export.unsettable_slots, potential_lemma_slot .. "_linked")
end
-- We don't set the active participle directly for form I because we don't want stative verbs (with past vowel i or u)
-- to default to فَاعِل. Instead we set the special slot 'ap1' and later copy it to 'ap' for non-stative verbs. The user
-- meanwhile can explicitly request the فَاعِل form for active participles for stative verbs using `ap:+`.
table.insert(export.unsettable_slots, "ap1") -- primary default فَاعِل for form I active participles
table.insert(export.unsettable_slots, "ap2") -- secondary default فَعِيل for form I active participles (stative I)
table.insert(export.unsettable_slots, "ap3") -- secondary default فَعِل for form I active participles (stative II)
table.insert(export.unsettable_slots, "apcd") -- secondary default أَفْعَل for form I active participles (color/defect)
table.insert(export.unsettable_slots, "apan") -- secondary default فَعْلَان for form I active participles (in -ān)
table.insert(export.unsettable_slots, "pp2") -- secondary default فَعِيل for form I passive participles (same as ap2)
table.insert(export.unsettable_slots, "vn2") -- secondary default فِعَال for form III verbal nouns
export.unsettable_slots_set = m_table.listToSet(export.unsettable_slots)
local default_indicator_to_active_participle_slot = {
["+"] = "ap1",
["++"] = "ap2",
["+++"] = "ap3",
["+cd"] = "apcd",
["+an"] = "apan",
}
local slots_that_may_be_uncertain = {
vn = "verbal noun",
ap = "active participle",
}
-- Initialize all the slots for which we generate forms.
local function add_slots(alternant_multiword_spec)
alternant_multiword_spec.verb_slots = {
{"ap", "act|part"},
{"pp", "pass|part"},
{"vn", "vnoun"},
}
for _, unsettable_slot in ipairs(export.unsettable_slots) do
table.insert(alternant_multiword_spec.verb_slots, {unsettable_slot, "-"})
end
-- Add entries for a slot with person/number variants.
-- `slot_prefix` is the prefix of the slot, typically specifying the tense/aspect.
-- `tag_suffix` is a string listing the set of inflection tags to add after the person/number tags.
-- `person_number_list` is a list of the person/number slot suffixes to add to `slot_prefix`.
local function add_personal_slot(slot_prefix, tag_suffix, person_number_list)
for _, persnum in ipairs(person_number_list) do
local slot = slot_prefix .. "_" .. persnum
local accel = persnum:gsub("(.)", "%1|") .. tag_suffix
table.insert(alternant_multiword_spec.verb_slots, {slot, accel})
end
end
local tenses = {
{"past", "past|%s"},
{"ind", "non-past|%s|ind"},
{"sub", "non-past|%s|sub"},
{"juss", "non-past|%s|juss"},
}
for _, slot_accel in ipairs(tenses) do
local slot, accel = unpack(slot_accel)
for _, voice in ipairs {"act", "pass"} do
add_personal_slot(voice == "act" and slot or slot .. "_pass", accel:format(voice),
all_person_number_list)
end
end
add_personal_slot("imp", "imp", imp_person_number_list)
alternant_multiword_spec.verb_slots_map = {}
for _, slot_accel in ipairs(alternant_multiword_spec.verb_slots) do
local slot, accel = unpack(slot_accel)
alternant_multiword_spec.verb_slots_map[slot] = accel
end
end
local overridable_stems = {}
local slot_override_param_mods = {
footnote = {
item_dest = "footnotes",
store = "insert",
},
alt = {},
t = {
-- [[Module:links]] expects the gloss in "gloss".
item_dest = "gloss",
},
gloss = {},
g = {
-- [[Module:links]] expects the genders in "g". `sublist = true` automatically splits on comma (optionally
-- with surrounding whitespace).
item_dest = "genders",
sublist = true,
},
pos = {},
lit = {},
id = {},
--W: The q/qq/l/ll (qualifier and label) modifiers were removed: rendering them
-- needs [[Module:pron qualifier]], which does not exist on ar.wiktionary, so any
-- use of them raised a script error. Accepting them here again requires importing
-- that module first and restoring the block in generate_link() below.
}
local function generate_obj(formval, parse_err, prefix, is_slot_override)
local val, uncertain = formval:match("^(.*)(%?)$")
val = val or formval
uncertain = not not uncertain
local ar, translit = val:match("^(.*)//(.*)$")
if not ar then
ar = val
end
if ar == "" then
if uncertain then
ar = "?"
else
error(("Can't specify blank value for override for %s override '%s'"):format(
is_slot_override and "slot" or "stem", prefix))
end
end
return {form = ar, translit = translit, uncertain = uncertain}
end
local function parse_inline_modifiers(comma_separated_group, parse_err, prefix, is_slot_override)
local function this_generate_obj(formval, parse_err)
return generate_obj(formval, parse_err, prefix, is_slot_override)
end
return put.parse_inline_modifiers_from_segments {
group = comma_separated_group,
props = {
param_mods = slot_override_param_mods,
parse_err = parse_err,
generate_obj = this_generate_obj,
pre_normalize_modifiers = function(data)
local modtext = data.modtext
modtext = modtext:match("^(%[.*%])$")
if modtext then
return ("<footnote:%s>"):format(modtext)
end
return data.modtext
end,
},
}
end
local function allow_multiple_values_for_override(comma_separated_groups, data, is_slot_override)
local retvals = {}
for _, comma_separated_group in ipairs(comma_separated_groups) do
local retval
if is_slot_override then
--W: pass `prefix` and `is_slot_override` through; without them the error
-- raised for a blank override value formatted a nil prefix, which is a
-- crash on Lua 5.1 rather than the intended message. Reachable from e.g.
-- <I/a~u.vn:[[كتابة]]>, where the [[...]] is consumed as a footnote and
-- leaves the value empty.
retval = parse_inline_modifiers(comma_separated_group, data.parse_err, data.prefix,
is_slot_override)
else
retval = generate_obj(comma_separated_group[1], data.parse_err, data.prefix, is_slot_override)
retval.footnotes = data.fetch_footnotes(comma_separated_group)
end
table.insert(retvals, retval)
end
for _, form in ipairs(retvals) do
if form.form == "+" or default_indicator_to_active_participle_slot[form.form] then
if form.form ~= "+" and default_indicator_to_active_participle_slot[form.form] and not is_slot_override then
error(("Stem override '%s' cannot use %s to request a secondary default"):format(
data.prefix, form.form))
end
data.base.slot_override_uses_default[data.prefix] = true
end
end
for _, form in ipairs(retvals) do
if form.form == "-" then
data.base.slot_explicitly_missing[data.prefix] = true
break
end
end
if data.base.slot_explicitly_missing[data.prefix] then
for _, form in ipairs(retvals) do
if form.form ~= "-" then
data.parse_err(("For slot or stem '%s', saw both - and a value other than -, which isn't allowed"):
format(data.prefix))
end
end
return nil
end
return retvals
end
local function simple_choice(choices)
return function(separated_groups, data)
if #separated_groups > 1 then
data.parse_err("For spec '" .. data.prefix .. ":', only one value currently allowed")
end
if #separated_groups[1] > 1 then
data.parse_err("For spec '" .. data.prefix .. ":', no footnotes currently allowed")
end
local choice = separated_groups[1][1]
if not m_table.contains(choices, choice) then
data.parse_err("For spec '" .. data.prefix .. ":', saw value '" .. choice .. "' but expected one of '" ..
table.concat(choices, "،") .. "'")
end
return choice
end
end
for _, overridable_stem in ipairs {
"past",
"past_v",
"past_c",
"past_pass",
"past_pass_v",
"past_pass_c",
"nonpast",
"nonpast_v",
"nonpast_c",
"nonpast_pass",
"nonpast_pass_v",
"nonpast_pass_c",
"imp",
"imp_v",
"imp_c",
} do
overridable_stems[overridable_stem] = allow_multiple_values_for_override
end
overridable_stems.past_final_weak_vowel = simple_choice { "ay", "aw", "ī", "ū" }
overridable_stems.past_pass_final_weak_vowel = simple_choice { "ay", "aw", "ī", "ū" }
overridable_stems.nonpast_final_weak_vowel = simple_choice { "ā", "ī", "ū" }
overridable_stems.nonpast_pass_final_weak_vowel = simple_choice { "ā", "ī", "ū" }
-------------------------------------------------------------------------------
-- Utility functions --
-------------------------------------------------------------------------------
-- version of rsubn() that discards all but the first return value
local function rsub(term, foo, bar)
return (rsubn(term, foo, bar))
end
-- version of rsubn() that returns a 2nd argument boolean indicating whether a substitution was made.
local function rsubb(term, foo, bar)
local retval, nsubs = rsubn(term, foo, bar)
return retval, nsubs > 0
end
-- Concatenate one or more strings or form objects.
local function q(...)
local not_all_strings = debug_translit
local has_manual_translit = debug_translit
for i = 1, select("#", ...) do
local argt = select(i, ...)
if not argt then
error(("Internal error: Saw nil at index %s: %s"):format(i, dump({...})))
end
if type(argt) ~= "string" then
not_all_strings = true
if argt.translit then
has_manual_translit = true
break
end
end
end
if not not_all_strings then
-- just strings, concatenate directly
return table.concat({...})
end
local formvals = {}
local translit = has_manual_translit and {} or nil
local footnotes
for i = 1, select("#", ...) do
local argt = select(i, ...)
if type(argt) == "string" then
formvals[i] = argt
if has_manual_translit then
translit[i] = transliterate(argt)
end
else
formvals[i] = argt.form
if has_manual_translit then
translit[i] = argt.translit or transliterate(argt.form)
end
footnotes = iut.combine_footnotes(footnotes, argt.footnotes)
end
end
-- FIXME: Do we want to support other properties?
return {
form = table.concat(formvals),
translit = has_manual_translit and table.concat(translit) or nil,
footnotes = footnotes,
}
end
-- Return the formval associated with `rad` (a radical or past/non-past vowel, either a string or form object).
local function rget(rad)
if type(rad) == "string" then
return rad
elseif type(rad) == "table" then
return rad.form
else
error(("Internal error: Unexpected type for radical or past/non-past vowel: %s"):format(dump(rad)))
end
end
export.rget = rget -- for use in [[Module:ar-headword]]
-- Return the footnotes associated with `rad` (a radical or past/non-past vowel, either a string or form object).
local function rget_footnotes(rad)
if type(rad) == "string" then
return nil
elseif type(rad) == "table" then
return rad.footnotes
else
error(("Internal error: Unexpected type for radical or past/non-past vowel: %s"):format(dump(rad)))
end
end
-- Return true if the formval associated with `rad` (a radical or past/non-past vowel, either a string or form object)
-- is `val`.
local function req(rad, val)
return rget(rad) == val
end
-- True if a form-I verb whose first radical is wāw elides that wāw in the non-past (يَعِدُ for
-- *يَوْعِدُ) rather than keeping it (يَوْجَلُ). The elision belongs to the kasra non-past -- a~i
-- وَعَدَ يَعِدُ, i~i وَرِثَ يَرِثُ -- and to the fatḥa non-past that is a throat-letter lowering of
-- that same underlying kasra: a~a وَضَعَ يَضَعُ, وَهَبَ يَهَبُ. Everywhere else the wāw stays:
-- i~a وَجِلَ يَوْجَلُ، وَنِيَ يَوْنَى (a fatḥa non-past that is the regular partner of a kasra past,
-- not a lowered kasra)
-- *~u وَجَلَ يَوْجُلُ، وَجُهَ يَوْجُهُ (a ḍamma non-past is never a lowered kasra)
-- The two elided-anyway lexemes with a kasra past (وَسِعَ يَسَعُ, وَطِئَ يَطَأُ) are lexical and are
-- what the explicit `I-assimilated` weakness exists to express -- see the comment on it in
-- detect_indicator_spec().
--
-- The u-non-past half of this is attested directly: أنطوان الدحداح، معجم تصريف الأفعال العربية
-- prints يَوْجُلُ/اُوْجُلْ for وَجَلَ (ص136) and says so in the page's own note -- "لا تُحذَفُ واوُ
-- الفعلِ في المُضارعِ ولا تُقلَبُ في الأمرِ" -- and يَوْنَى/اِوْنَ for وَنِيَ (ص230).
--
-- Returns true when the vowels aren't known, which keeps the historical default for callers
-- that have radicals but no vowel pattern.
--W: Lexical exceptions to the rule below, keyed root..":"..past..nonpast so that a
-- listed verb is listed for the measure its source attests and no other. Both
-- directions occur and the vowels do not predict either:
--
-- وَطِئَ ـَ the i~a pattern normally keeps the wāw (وَجِلَ ـَ / يَوْجَلُ) and this
-- one drops it -- يَطَأُ, طَأْ, printed through both columns of نموذج ١٥٥.
-- Upstream's own commentary on this function names the verb: "there are
-- naturally exceptions, e.g. waṭiʔa~yaṭaʔu 'to tread, to trample'".
-- وَبَأَ ـَ the a~a pattern normally drops it (وَضَعَ / يَضَعُ) and this one keeps
-- it -- يَوْبَأُ, يَوْبَآنِ, يَوْبَؤُونَ, إِيبَأْ, printed through نموذج ١٣٥.
--
-- Same instrument as GEMINATE_ITBAA_ROOTS and for the same reason: the fact is about
-- the lexeme, so listing it is the only honest way to hold it, and listing keeps every
-- other root of the same shape exactly where it was.
local FORM_I_W_ASSIMILATION = {
["وطء:ia"] = true, -- وَطِئَ ـَ / يَطَأُ / طَأْ: الدحداح، نموذج ١٥٥
["وبء:aa"] = false, -- وَبَأَ ـَ / يَوْبَأُ / إِيبَأْ: الدحداح، نموذج ١٣٥
}
local function vowel_letter(v)
return req(v, A) and "a" or req(v, I) and "i" or req(v, U) and "u" or "?"
end
local function form_i_w_assimilated(past_vowel, nonpast_vowel, rad1, rad2, rad3)
if not past_vowel or not nonpast_vowel then
return true
end
if rad1 and rad2 and rad3 then
local listed = FORM_I_W_ASSIMILATION[rad1 .. rad2 .. rad3 .. ":" ..
vowel_letter(past_vowel) .. vowel_letter(nonpast_vowel)]
if listed ~= nil then
return listed
end
end
return req(nonpast_vowel, I) or req(nonpast_vowel, A) and req(past_vowel, A)
end
--W: Geminate form-I roots whose degemination vowel follows the مضارع by إتباع.
-- When gemination breaks under a consonant-initial suffix, the vowel that surfaces on the
-- second radical (مَدَدْتَ's second د) is normally the verb's own past vowel, which the وزن
-- fixes at one value per measure: فتح for فعَل يفعُل (مَدَدْتَ، فَرَرْتَ، عَضَضْتَ), كسر for
-- فعِل يفعَل (ظَلِلْتَ). Classical grammar also attests a minority إتباع variant on the
-- فعَل يفعُل measure, where that vowel instead follows the مضارع's own ضمة (هَمُمْتَ). Which
-- of the two a given verb takes is a fact about the lexeme, not about its وزن -- هَمَّ and
-- مَدَّ share the measure and differ here -- so it cannot be derived from جذر + وزن and is
-- listed, the same way SOUND_FORM_I_UU_ROOTS lists هَيُؤَ. Keyed rad1..rad2..rad3 and gated
-- on the a~u pattern, so a listed root still degeminates normally under any other pattern.
local GEMINATE_ITBAA_ROOTS = {
["همم"] = true, -- هَمَّ ـُ: أنطوان الدحداح، معجم تصريف الأفعال العربية، ص192
-- The Template-B page of the same model number, which prints two more of them:
["عشش"] = true, -- عَشَّ ـُ / عَشُشْتُ: الدحداح، نموذج ١٤١
["فكك"] = true, -- فَكَّ ـُ / فَكُكْتُ: الدحداح، نموذج ١٤١
}
-- The vowel that surfaces on the second radical of a geminate form-I verb once gemination
-- breaks. `past_vowel` unless the root is an attested إتباع lexeme; see GEMINATE_ITBAA_ROOTS.
local function geminate_degemination_vowel(rad1, rad2, rad3, past_vowel, nonpast_vowel)
if past_vowel and nonpast_vowel and req(past_vowel, A) and req(nonpast_vowel, U)
and GEMINATE_ITBAA_ROOTS[rad1 .. rad2 .. rad3] then
return nonpast_vowel
end
return past_vowel
end
--W: Form-I final-weak roots that keep rad3 as a consonant in the 2fs non-past and
-- imperative (تَسْهُوِينَ، اُسْهُوِي) instead of contracting it away (تَسْهِينَ، اِسْهِي).
--
-- This was briefly gated on the فعُل يفعُل measure alone, then narrowed to a root table,
-- then widened back to the measure -- and the middle step is why. The argument for the
-- measure was always that the measure is what keeps rad3 consonantal in the first place
-- (its past 3ms is سَهُوَ, not the سَها an a~u root like دَعَا gives), but at the time the
-- corpus held exactly one فعُل يفعُل final-weak page, so there was no second paradigm to
-- check it against and the rule it displaces -- contract before the 2fs -ī, as دَعَا does --
-- was the one the module had applied for years. Generalising an unverified reading over a
-- whole class of live entries is the wrong direction to be wrong in, so it went back to
-- listing سهو alone, keyed and gated exactly like SOUND_FORM_I_UU_ROOTS.
--
-- Checkpoint 4 supplied the second page, and it answers the question. p222 (model 147)
-- prints TWO فعُل يفعُل final-weak paradigms, حَلُوَ and سَرُوَ, and both retain rad3 in both
-- eligible slots: تَحْلُوِينَ / اُحْلُوِي and تَسْرُوِينَ / اُسْرُوِي, the wāw carrying its kasra
-- under it, all four read at 6x off the strip against the same columns' يَحْلُونَ / يَسْرُونَ.
-- Two independent roots, one page, agreeing with سهو on p204 -- and سَرُوَ is precisely the
-- root the narrowing had put back to تَسْرِينَ, so the cautious reading is the one the ink
-- refutes. So the gate is the vowel pattern after all and the table is gone.
local function final_weak_uu_retains_rad3(rad1, rad2, rad3, past_ending_vowel, nonpast_ending_vowel)
return past_ending_vowel == "ū" and nonpast_ending_vowel == "ū"
end
-- Map `vow` (a past/non-past vowel, either a string or form object without translit) by passing the formval through
-- `fn`. Don't call this on radicals because they may have manual translit and it isn't clear how to handle that.
local function map_vowel(vow, fn)
if type(vow) == "string" then
return fn(vow)
elseif type(vow) == "table" then
return {form = fn(vow.form), footnotes = vow.footnotes}
else
error(("Internal error: Unexpected type for past/non-past vowel: %s"):format(dump(vow)))
end
end
local function get_radicals_3(vowel_spec)
return vowel_spec.rad1, vowel_spec.rad2, vowel_spec.rad3, vowel_spec.past, vowel_spec.nonpast
end
local function get_radicals_4(vowel_spec)
return vowel_spec.rad1, vowel_spec.rad2, vowel_spec.rad3, vowel_spec.rad4
end
local function is_final_weak(base, vowel_spec)
return vowel_spec.weakness == "final-weak" or base.form == "XV"
end
--W: Create a simple link
local function link_term_simple(text)
return "[[" .. text .. "]]"
end
local function link_term(text, face, id)
return m_links.full_link({lang = lang, term = text, tr = "-", id = id}, face)
end
local function tag_text(text, tag, class)
return m_links.full_link({lang = lang, alt = text, tr = "-"})
end
local function track(page)
require("Module:debug/track")("ar-verb/" .. page)
return true
end
local function track_if_ar_conj(base, page)
if base.alternant_multiword_spec.source_template == "ar-conj" then
require("Module:debug/track")("ar-verb/" .. page)
end
return true
end
local function reorder_shadda(word)
-- shadda+short-vowel (including tanwīn vowels, i.e. -an -in -un) gets
-- replaced with short-vowel+shadda during NFC normalisation, which
-- MediaWiki does for all Unicode strings; however, it makes various
-- processes inconvenient, so undo it.
word = rsub(word, "(" .. DIACRITIC_ANY_BUT_SH .. ")" .. SH, SH .. "%1")
return word
end
local function apply_nfc_shadda(word)
-- Apply NFC-style normalization: reorder shadda+vowel to vowel+shadda
-- to match MediaWiki's automatic NFC normalization. This reverses the
-- internal shadda+vowel format used during processing.
word = rsub(word, SH .. "(" .. DIACRITIC_ANY_BUT_SH .. ")", "%1" .. SH)
return word
end
-------------------------------------------------------------------------------
-- Basic functions to inflect tenses --
-------------------------------------------------------------------------------
local function skip_slot(base, slot, allow_overrides)
if base.slot_explicitly_missing[slot] then
return true
end
if not allow_overrides and base.slot_overrides[slot] and not base.slot_override_uses_default[slot] then
-- Skip any slots for which there are overrides, except those that request the default value using +, ++, etc.
return true
end
if base.passive == "nopass" and (slot == "pp" or slot:find("_pass")) then
return true
elseif base.passive == "onlypass" and slot ~= "pp" and slot ~= "vn" and not slot:find("_pass") then
return true
elseif base.passive == "ipass" and slot:find("_pass") and not slot:find("3ms") then
return true
elseif base.passive == "onlypass-impers" and slot ~= "pp" and slot ~= "vn" and (not slot:find("_pass") or
slot:find("_pass") and not slot:find("3ms")) then
return true
end
if base.nopast and slot:find("^past_") then
return true
end
if base.noimp and slot:find("^imp_") then
return true
end
if base.no_nonpast and (slot:find("^ind_") or slot:find("^sub_") or slot:find("^juss")) then
return true
end
return false
end
local function basic_combine_stem_ending(stem, ending)
return stem .. ending
end
local function basic_combine_stem_ending_tr(stem, ending)
return stem .. ending
end
-- Concatenate `prefixes`, `stems` and `endings` (any of which may be an abbreviate form list, i.e. strings, form
-- objects or lists of strings or form objects) and store into `slot`. If a user-supplied override exists for the slot,
-- nothing will happen unless `allow_overrides` is provided.
local function add3(base, slot, prefixes, stems, endings, allow_overrides)
if skip_slot(base, slot, allow_overrides) then
return
end
-- Optimization since the prefixes are almost always single strings.
if type(prefixes) == "string" then
local function do_combine_stem_ending(stem, ending)
return prefixes .. stem .. ending
end
local function do_combine_stem_ending_tr(stem, ending)
return transliterate(prefixes) .. stem .. ending
end
iut.add_forms(base.forms, slot, stems, endings, do_combine_stem_ending, transliterate,
do_combine_stem_ending_tr, base.form_footnotes)
else
iut.add_multiple_forms(base.forms, slot, {prefixes, stems, endings}, basic_combine_stem_ending, transliterate,
basic_combine_stem_ending_tr, base.form_footnotes)
end
end
-- Insert one or more forms in `form_or_forms` into `slot`. `form_or_forms` is an abbreviated form list (see comment at
-- top of [[Module:inflection utilities]]). If a user-supplied override exists for the slot, nothing will happen unless
-- `allow_overrides` is provided. BEWARE: One form object should never occur in two different slots, or twice in a given
-- slot; if taking a form object from an existing slot, make sure to shallowCopy() it.
local function insert_form_or_forms(base, slot, form_or_forms, allow_overrides, uncertain)
if not skip_slot(base, slot, allow_overrides) then
-- Some optimizations of the most common case of inserting a single string.
if type(form_or_forms) == "string" and not base.form_footnotes then
form_or_forms = {form = form_or_forms, uncertain = uncertain}
iut.insert_form(base.forms, slot, form_or_forms)
else
local list = iut.convert_to_general_list_form(form_or_forms, base.form_footnotes)
if uncertain then
for _, formobj in ipairs(list) do
formobj.uncertain = true
end
end
iut.insert_forms(base.forms, slot, list)
end
end
end
-- Insert `string_or_form` into both the ap2 and pp2 slots, shallowCopying a form object to make sure no form objects
-- occur in two slots.
local function insert_ap2_pp2(base, string_or_form)
insert_form_or_forms(base, "ap2", string_or_form)
if type(string_or_form) == "table" then
string_or_form = m_table.shallowCopy(string_or_form)
end
insert_form_or_forms(base, "pp2", string_or_form)
end
-- Convert `stemforms` (a string, a form object, or a list of strings and/or form objects) into "general form" (a list
-- of form objects) and map `fn` over the list of objects. `fn` is passed two arguments (form value and translit) and
-- should likewise return the new form value and translit. Footnotes will be preserved. FIXME: Preserve other metadata.
local function map_general(stemforms, fn)
return iut.map_forms(iut.convert_to_general_list_form(stemforms), fn)
end
-- Similar to map_general() except that `fn` should return a single value (one or more strings or form objects), instead
-- of two values (form value and translit), and the resulting value(s) from all calls to `fn` will be flattened to
-- construct the overall return value. Footnotes will be preserved. FIXME: Preserve other metadata.
local function flatmap_general(stemforms, fn)
return iut.flatmap_forms(iut.convert_to_general_list_form(stemforms), fn)
end
-- Given user-supplied stem overrides in `base`, construct any derived stem overrides (e.g. vowel-specific or
-- consonant-specific variants), and truncate initial y-/ي- in any non-past overrides.
local function construct_stems(base)
local stems = base.stem_overrides
stems.past_v = stems.past_v or stems.past
stems.past_c = stems.past_c or stems.past
stems.past_pass_v = stems.past_pass_v or stems.past_pass
stems.past_pass_c = stems.past_pass_c or stems.past_pass
stems.nonpast_v = stems.nonpast_v or stems.nonpast
stems.nonpast_c = stems.nonpast_c or stems.nonpast
stems.nonpast_pass_v = stems.nonpast_pass_v or stems.nonpast_pass
stems.nonpast_pass_c = stems.nonpast_pass_c or stems.nonpast_pass
stems.imp_v = stems.imp_v or stems.imp
stems.imp_c = stems.imp_c or stems.imp
local function truncate_nonpast_initial_cons(stem_type, form, translit)
if form == "+" then
return form, translit
end
if not form:find("^" .. Y) then
error(("Form value %s for stem type '%s' should begin with ي"):format(form, stem_type))
end
form = form:gsub("^" .. Y, "")
if translit then
if not translit:find("^y") then
error(("Translit value %s for stem type '%s' should begin with y"):format(translit, stem_type))
end
translit = translit:gsub("^y", "")
end
return form, translit
end
for _, nonpast_stem_type in ipairs { "nonpast_v", "nonpast_c", "nonpast_pass_v", "nonpast_pass_c" } do
if stems[nonpast_stem_type] then
stems[nonpast_stem_type] = map_general(stems[nonpast_stem_type], function(form, translit)
return truncate_nonpast_initial_cons(nonpast_stem_type, form, translit)
end)
end
end
end
-- Given user-specified overrides for stem `stemname`, return overrides with occurrences of + replaced by
-- `default_stem`. If no overrides, return `default_stem`, or {} if no default.
local function override_stem_if_needed(base, stemname, default_stem)
local overrides = base.stem_overrides[stemname]
if not overrides then
return default_stem or {}
end
return map_general(overrides, function(form, translit)
if form ~= "+" and default_indicator_to_active_participle_slot[form] then
error(("Stem overrides cannot use secondary default indicators but saw %s in stem override '%s'"):format(
form, stemname))
end
if form == "+" then
if translit then
error(("Cannot supply manual translit along with + for stem override '%s'"):format(stemname))
end
if not default_stem then
error(("Cannot use + for stem override '%s' because no default is available"):format(stemname))
end
if type(default_stem) ~= "string" then
error(("Internal error: Default stem for '%s' is not a string: %s"):format(stemname, dump(default_stem)))
end
return default_stem
end
return form, translit
end)
end
-------------------------------------------------------------------------------
-- Properties of different verbal forms --
-------------------------------------------------------------------------------
local allowed_vforms = {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX",
"X", "XI", "XII", "XIII", "XIV", "XV", "Iq", "IIq", "IIIq", "IVq"}
local allowed_vforms_set = m_table.listToSet(allowed_vforms)
local allowed_vforms_with_weakness = m_table.shallowCopy(allowed_vforms)
-- The user needs to be able to explicitly specify that a form-I verb (specifically one whose initial radical is و) is
-- sound. Cf. wajiʕa yawjaʕu (not #yajaʕu) "to ache, to hurt". In general, i~a and u~u verbs whose initial radical is و
-- seem to not assimilate the first radical; cf. وقح "to be shameless", variously waqaḥa~yaqiḥu, waquḥa~yawquḥu and
-- waqiḥa~yawqaḥu, whereas a~i verbs (wafaḍa~yafiḍu "to rush"), i~i verbs (wafiqa~yafiqu "to be proper, to be suitable")
-- and a~a verbs (waḍaʕa~yaḍaʕu "to set down, to place") do assimilate. But there are naturally exceptions, e.g.
-- waṭiʔa~yaṭaʔu "to tread, to trample"; wasiʕa~yasaʕu "to be spacious; to be well-off"; waṯiʔa~yaṯaʔu "to get bruised,
-- to be sprained". Also beware of waniya~yawnā "to be faint; to languish", which is sound in the first radical and
-- final-weak in the last radical. Nonetheless, the regularity of the patterns mentioned above suggest we should provide
-- them as defaults.
-- Note that there are other cases of unexpectedly sound verbs, e.g. izdawaja~yazdawiju "to be in pairs", layisa~yalyasu
-- "to be valiant, to be brave", ʔaḥwaja~yuḥwiju "to need", istahwana~yastahwinu "to consider easy", sawisa~yaswasu "to
-- be or become moth-eaten or worm-eaten" (vs. sāsa~yasūsu "to govern, to rule" from the same radicals), ʕawira~yaʕwaru
-- "to be one-eyed", istajwaba~yastajwibu "to interrogate", etc. But in these cases there is no need for explicit user
-- specification as the lemma itself specifies the unexpected soundness.
for _, form_with_weakness in ipairs { "I-sound", "I-assimilated", "none-sound", "none-hollow", "none-geminate",
"none-final-weak" } do
table.insert(allowed_vforms_with_weakness, form_with_weakness)
end
local allowed_vforms_with_weakness_set = m_table.listToSet(allowed_vforms_with_weakness)
local function vform_supports_final_weak(vform)
return vform ~= "XI" and vform ~= "XV" and vform ~= "IVq"
end
local function vform_supports_geminate(vform)
return vform == "I" or vform == "III" or vform == "IV" or vform == "VI" or vform == "VII" or vform == "VIII" or
vform == "X"
end
local function vform_supports_hollow(vform)
return vform == "I" or vform == "IV" or vform == "VII" or vform == "VIII" or vform == "X"
end
local function vform_probably_impersonal_passive(vform, weakness, past_vowel, nonpast_vowel)
return vform == "I" and req(past_vowel, I) or vform == "V" or vform == "VI" or vform == "X" or vform == "IIq"
end
local function vform_probably_full_passive(vform)
return vform == "II" or vform == "III" or vform == "IV" or vform == "Iq"
end
local function vform_probably_no_passive(vform, weakness, past_vowel, nonpast_vowel)
return vform == "I" and req(past_vowel, U) or vform == "VII" or vform == "IX" or
vform == "XI" or vform == "XII" or vform == "XIII" or vform == "XIV" or vform == "XV" or
vform == "IIIq" or vform == "IVq"
end
-- Active vforms II, III, IV, Iq use non-past prefixes in -u- instead of -a-.
local function prefix_vowel_from_vform(vform)
if vform == "II" or vform == "III" or vform == "IV" or vform == "Iq" then
return "u"
else
return "a"
end
end
-- True if the active non-past takes a-vocalization rather than i-vocalization in its last syllable.
local function vform_nonpast_a_vowel(vform)
return vform == "V" or vform == "VI" or vform == "XV" or vform == "IIq"
end
-- True if the `passive` spec indicates a passive-only verb.
local function is_passive_only(passive)
return passive == "onlypass" or passive == "onlypass-impers"
end
export.is_passive_only = is_passive_only -- for use in [[Module:ar-headword]]
-------------------------------------------------------------------------------
-- Properties of specific sounds --
-------------------------------------------------------------------------------
-- Is radical wāw (و) or yāʾ (ي)?
local function is_waw_ya(rad)
return req(rad, W) or req(rad, Y)
end
-- Check that radical is wāw (و) or yāʾ (ي), error if not
local function check_waw_ya(rad)
if not is_waw_ya(rad) then
error("Expecting weak radical: '" .. rget(rad) .. "' should be " .. W .. " or " .. Y)
end
end
-- Form-I verb حيّ or حيي and form-X verb استحيا or استحى
local function hayy_radicals(rad1, rad2, rad3)
return req(rad1, "ح") and req(rad2, Y) and is_waw_ya(rad3)
end
-- FUCK ME HARD. "Lua error at line 1514: main function has more than 200 local variables".
local function create_conjugations()
-------------------------------------------------------------------------------
-- Radicals associated with various irregular verbs --
-------------------------------------------------------------------------------
-- Form-I verb أخذ or form-VIII verb اتخذ
local function axadh_radicals(rad1, rad2, rad3)
return req(rad1, HAMZA) and req(rad2, "خ") and req(rad3, "ذ")
end
-- Form-I verb whose imperative has a reduced form: أكل and أخذ and أمر. Return "shortonly" if only
-- short-form imperatives exist (أكل and أخذ) or "shortlong" if long-form imperatives also exist (أمر);
-- they are used after a clitic like فَ and وَ.
local function reduced_imperative_verb(rad1, rad2, rad3)
return axadh_radicals(rad1, rad2, rad3) and "shortonly" or
req(rad1, HAMZA) and req(rad2, "ك") and req(rad3, "ل") and "shortonly" or
req(rad1, HAMZA) and req(rad2, "م") and req(rad3, "ر") and "shortlong"
end
-- Form-I verb رأى and form-IV verb أرى
local function raa_radicals(rad1, rad2, rad3)
return req(rad1, "ر") and req(rad2, HAMZA) and is_waw_ya(rad3)
end
-- Form-I verb سأل
local function saal_radicals(rad1, rad2, rad3)
return req(rad1, "س") and req(rad2, HAMZA) and req(rad3, "ل")
end
-- Form-I verb كان
local function kaan_radicals(rad1, rad2, rad3)
return req(rad1, "ك") and req(rad2, W) and req(rad3, N)
end
-- Form-I hollow verb سالَ يَسالُ, the hamza-less variant of سَأَلَ. Distinct from
-- saal_radicals() above, which is the hamzated root itself.
local function saal_hollow_radicals(rad1, rad2, rad3)
return req(rad1, "س") and req(rad2, W) and req(rad3, "ل")
end
-------------------------------------------------------------------------------
-- Sets of past endings --
-------------------------------------------------------------------------------
-- The 13 endings of the sound/hollow/geminate past tense.
local past_endings = {
-- singular
SK .. TU, SK .. TA, SK .. "تِ", A, A .. "تْ",
--dual
SK .. "تُمَا", AA, A .. "تَا",
-- plural
SK .. "نَا", SK .. "تُمْ",
-- shadda + vowel diacritic ends up in the wrong order due to Unicode
-- bug, so keep them separate to avoid this
SK .. "تُن" .. SH .. A, UU .. ALIF, SK .. "نَ"
}
-- Make endings for final-weak past in -aytu or -awtu. AYAW is AY or AW as appropriate. Note that AA and AW are
-- global variables.
local function make_past_endings_ay_aw(ayaw, third_sg_masc)
return {
-- singular
ayaw .. SK .. TU, ayaw .. SK .. TA, ayaw .. SK .. "تِ",
third_sg_masc, A .. "تْ",
--dual
ayaw .. SK .. "تُمَا", ayaw .. AA, A .. "تَا",
-- plural
ayaw .. SK .. "نَا", ayaw .. SK .. "تُمْ",
-- shadda + vowel diacritic ends up in the wrong order due to Unicode
-- bug, so keep them separate to avoid this
ayaw .. SK .. "تُن" .. SH .. A, AW .. SK .. ALIF, ayaw .. SK .. "نَ"
}
end
-- past final-weak -aytu endings
local past_endings_ay = make_past_endings_ay_aw(AY, AAMAQ)
-- past final-weak -awtu endings
local past_endings_aw = make_past_endings_ay_aw(AW, AA)
-- used for alternative endings for form-X geminate verbs like اِسْتَمَرَّ
local past_endings_ay_12_person_only = {
-- singular
AY .. SK .. TU, AY .. SK .. TA, AY .. SK .. "تِ",
{}, {},
--dual
AY .. SK .. "تُمَا", {}, {},
-- plural
AY .. SK .. "نَا", AY .. SK .. "تُمْ",
-- shadda + vowel diacritic ends up in the wrong order due to Unicode
-- bug, so keep them separate to avoid this
AY .. SK .. "تُن" .. SH .. A, {}, {},
}
-- Make endings for final-weak past in -ītu or -ūtu. IIUU is ī or ū as appropriate. Note that AA and UU are global
-- variables.
local function make_past_endings_ii_uu(iiuu)
return {
-- singular
iiuu .. TU, iiuu .. TA, iiuu .. "تِ", iiuu .. A, iiuu .. A .. "تْ",
--dual
iiuu .. "تُمَا", iiuu .. AA, iiuu .. A .. "تَا",
-- plural
iiuu .. "نَا", iiuu .. "تُمْ",
-- shadda + vowel diacritic ends up in the wrong order due to Unicode
-- bug, so keep them separate to avoid this
iiuu .. "تُن" .. SH .. A, UU .. ALIF, iiuu .. "نَ"
}
end
-- past final-weak -ītu endings
local past_endings_ii = make_past_endings_ii_uu(II)
-- past final-weak -ūtu endings
local past_endings_uu = make_past_endings_ii_uu(UU)
-------------------------------------------------------------------------------
-- Sets of non-past prefixes and endings --
-------------------------------------------------------------------------------
local nonpast_prefix_consonants = {
-- singular
HAMZA, T, T, Y, T,
-- dual
T, Y, T,
-- plural
N, T, T, Y, Y
}
-- There are only five distinct endings in all non-past verbs. Make any set of non-past endings given these five
-- distinct endings.
local function make_nonpast_endings(null, fem, dual, pl, fempl)
return {
-- singular
null, null, fem, null, null,
-- dual
dual, dual, dual,
-- plural
null, pl, fempl, pl, fempl
}
end
-- endings for non-past indicative
local ind_endings = make_nonpast_endings(
U,
II .. NA,
AANI,
UU .. NA,
SK .. NA
)
-- Make the endings for non-past subjunctive/jussive, given the vowel diacritic used in "null" endings
-- (1s/2ms/3ms/3fs/1p).
local function make_sub_juss_endings(dia_null)
return make_nonpast_endings(
dia_null,
II,
AA,
UU .. ALIF,
SK .. NA
)
end
-- endings for non-past subjunctive
local sub_endings = make_sub_juss_endings(A)
-- endings for non-past jussive
local juss_endings = make_sub_juss_endings(SK)
-- endings for alternative geminate non-past jussive in -a; same as subjunctive
local juss_endings_alt_a = sub_endings
-- endings for alternative geminate non-past jussive in -i
local juss_endings_alt_i = make_sub_juss_endings(I)
-- Endings for final-weak non-past indicative in -ā. Note that AY, AW and AAMAQ are global variables.
local ind_endings_aa = make_nonpast_endings(
AAMAQ,
AYSK .. NA,
AY .. AANI,
AWSK .. NA,
AYSK .. NA
)
-- Make endings for final-weak non-past indicative in -ī or -ū; IIUU is ī or ū as appropriate. Note that II and UU
-- are global variables.
local function make_ind_endings_ii_uu(iiuu)
return make_nonpast_endings(
iiuu,
II .. NA,
iiuu .. AANI,
UU .. NA,
iiuu .. NA
)
end
-- endings for final-weak non-past indicative in -ī
local ind_endings_ii = make_ind_endings_ii_uu(II)
-- endings for final-weak non-past indicative in -ū
local ind_endings_uu = make_ind_endings_ii_uu(UU)
-- Endings for final-weak non-past subjunctive in -ā. Note that AY, AW, ALIF, AAMAQ are global variables.
local sub_endings_aa = make_nonpast_endings(
AAMAQ,
AYSK,
AY .. AA,
AWSK .. ALIF,
AYSK .. NA
)
-- Make endings for final-weak non-past subjunctive in -ī or -ū. IIUU is ī or ū as appropriate. Note that AA, II,
-- UU, ALIF are global variables.
local function make_sub_endings_ii_uu(iiuu)
return make_nonpast_endings(
iiuu .. A,
II,
iiuu .. AA,
UU .. ALIF,
iiuu .. NA
)
end
-- endings for final-weak non-past subjunctive in -ī
local sub_endings_ii = make_sub_endings_ii_uu(II)
-- endings for final-weak non-past subjunctive in -ū
local sub_endings_uu = make_sub_endings_ii_uu(UU)
-- endings for final-weak non-past jussive in -ā
local juss_endings_aa = make_nonpast_endings(
A,
AYSK,
AY .. AA,
AWSK .. ALIF,
AYSK .. NA
)
-- Make endings for final-weak non-past jussive in -ī or -ū. IU is short i or u, IIUU is long ī or ū as appropriate.
-- Note that AA, II, UU, ALIF are global variables.
local function make_juss_endings_ii_uu(iu, iiuu)
return make_nonpast_endings(
iu,
II,
iiuu .. AA,
UU .. ALIF,
iiuu .. NA
)
end
-- endings for final-weak non-past jussive in -ī
local juss_endings_ii = make_juss_endings_ii_uu(I, II)
-- endings for final-weak non-past jussive in -ū
local juss_endings_uu = make_juss_endings_ii_uu(U, UU)
-------------------------------------------------------------------------------
-- Sets of imperative endings --
-------------------------------------------------------------------------------
-- Extract the second person jussive endings to get corresponding imperative endings.
local function imperative_endings_from_jussive(endings)
return {endings[2], endings[3], endings[6], endings[10], endings[11]}
end
-- normal imperative endings
local imp_endings = imperative_endings_from_jussive(juss_endings)
-- alternative geminate imperative endings in -a
local imp_endings_alt_a = imperative_endings_from_jussive(juss_endings_alt_a)
-- alternative geminate imperative endings in -i
local imp_endings_alt_i = imperative_endings_from_jussive(juss_endings_alt_i)
-- final-weak imperative endings in -ā
local imp_endings_aa = imperative_endings_from_jussive(juss_endings_aa)
-- final-weak imperative endings in -ī
local imp_endings_ii = imperative_endings_from_jussive(juss_endings_ii)
-- final-weak imperative endings in -ū
local imp_endings_uu = imperative_endings_from_jussive(juss_endings_uu)
-------------------------------------------------------------------------------
-- Basic functions to inflect tenses --
-------------------------------------------------------------------------------
-- Add to `base` the inflections for the tense indicated by `tense` (the prefix in the slot names, e.g. 'past'
-- or 'juss_pass'), formed by combining the `prefixes`, `stems` and `endings`. Each of `prefixes`, `stems` and
-- `endings` is either a sequence of 5 (for the imperative) or 13 (for other tenses) abbreviated form lists (each of
-- which is either a string, a form object, or a list of strings and/or form objects; see
-- [[Module:inflection utilities]] for more info). Alternatively, any of `prefixes`, `stems` or `endings` can be a
-- single-element list containing an abbreviated form list, with an additional key `all_same` set to true, or (as a
-- special case) a single string; in the latter cases, the same value is used for all 5 or 13 slots. If existing
-- inflections already exist, they will be added to, not overridden. `pnums` is the list of person/number slot name
-- suffixes, which must match up with the elements in `prefixes`, `stems` and `endings` (i.e. 5 for imperative, 13
-- otherwise).
local function inflect_tense_1(base, tense, prefixes, stems, endings, pnums)
if not prefixes or not stems or not endings then
return
end
local function verify_affixes(affixname, affixes)
local function interr(msg)
error(("Internal error: For tense '%s', '%s' %s: %s"):format(tense, affixname, msg, dump(affixes)))
end
if type(affixes) == "string" then
-- do nothing
elseif type(affixes) ~= "table" then
interr("is not a table or string")
elseif affixes.all_same then
if #affixes ~= 1 then
interr(("with all_same = true should have length 1 but has length %s"):format(#affixes))
end
else
if #affixes ~= #pnums then
interr(("should have length %s but has length %s"):format(#pnums, #affixes))
end
end
end
verify_affixes("prefixes", prefixes)
verify_affixes("stems", stems)
verify_affixes("endings", endings)
local function get_affix(affixes, i)
if type(affixes) == "string" then
return affixes
elseif affixes.all_same then
return affixes[1]
else
return affixes[i]
end
end
for i, pnum in ipairs(pnums) do
local prefix = get_affix(prefixes, i)
local stem = get_affix(stems, i)
local ending = get_affix(endings, i)
local slot = tense .. "_" .. pnum
add3(base, slot, prefix, stem, ending)
end
end
-- Add to `base` the inflections for the tense indicated by `tense` (the prefix in the slot names, e.g. 'past'
-- or 'juss_pass'), formed by combining the `prefixes`, `stems` and `endings`. This is a simple wrapper around
-- inflect_tense_1() that applies to all tenses other than the imperative; see inflect_tense_1() for more
-- information about the parameters.
local function inflect_tense(base, tense, prefixes, stems, endings)
inflect_tense_1(base, tense, prefixes, stems, endings, all_person_number_list)
end
-- Like inflect_tense() but for the imperative, which has only five parts instead of 13 and no prefixes.
local function inflect_tense_imp(base, stems, endings)
inflect_tense_1(base, "imp", "", stems, endings, imp_person_number_list)
end
-------------------------------------------------------------------------------
-- Functions to inflect the past tense --
-------------------------------------------------------------------------------
-- Generate past verbs using specified vowel and consonant stems; works for sound, assimilated, hollow, and geminate
-- verbs, active and passive.
local function past_2stem_conj(base, tense, v_stem, c_stem, footnote_12)
local passive = tense:find("_pass") and "_pass" or ""
-- Override stems with user-specified stems if available.
v_stem = override_stem_if_needed(base, "past" .. passive .. "_v", v_stem)
local c_stem_12 = c_stem
if footnote_12 then
c_stem_12 = iut.combine_form_and_footnotes(c_stem_12, footnote_12)
end
c_stem_12 = override_stem_if_needed(base, "past" .. passive .. "_c", c_stem_12)
local c_stem_3 = override_stem_if_needed(base, "past" .. passive .. "_c", c_stem)
inflect_tense(base, tense, "", {
-- singular
c_stem_12, c_stem_12, c_stem_12, v_stem, v_stem,
--dual
c_stem_12, v_stem, v_stem,
-- plural
c_stem_12, c_stem_12, c_stem_12, v_stem, c_stem_3
}, past_endings)
end
-- Generate past verbs using single specified stem; works for sound and assimilated verbs, active and passive.
local function past_1stem_conj(base, tense, stem)
past_2stem_conj(base, tense, stem, stem)
end
-------------------------------------------------------------------------------
-- Functions to inflect non-past tenses --
-------------------------------------------------------------------------------
-- Generate non-past conjugation, with two stems, for vowel-initial and consonant-initial endings, respectively.
-- Useful for active and passive; for all forms; for all weaknesses (sound, assimilated, hollow, final-weak and
-- geminate) and for all types of non-past (indicative, subjunctive, jussive) except for the imperative. (There is a
-- separate wrapper function below for geminate jussives because they have three alternants.) Both stems may be the
-- same, e.g. for sound verbs.
-- `prefix_vowel` will be either "a" or "u". `endings` should be an array of 13 items. If `endings` is nil or
-- omitted, infer the endings from the tense. If `jussive` is true, or `endings` is nil and `tense` indicatives
-- jussive, use the jussive pattern of vowel/consonant stems (different from the normal ones).
local function nonpast_2stem_conj(base, tense, prefix_vowel, v_stem, c_stem, endings, jussive)
local passive = tense:find("_pass") and "_pass" or ""
-- Override stems with user-specified stems if available.
v_stem = override_stem_if_needed(base, "nonpast" .. passive .. "_v",
v_stem and q(dia[prefix_vowel], v_stem) or nil)
c_stem = override_stem_if_needed(base, "nonpast" .. passive .. "_c",
c_stem and q(dia[prefix_vowel], c_stem) or nil)
if not endings then
if tense:find("^ind") then
endings = ind_endings
elseif tense:find("^sub") then
endings = sub_endings
elseif tense:find("^juss") then
jussive = true
endings = juss_endings
else
error("Internal error: Unrecognized tense '" .. tense .."'")
end
end
if not jussive then
inflect_tense(base, tense, nonpast_prefix_consonants, {
-- singular
v_stem, v_stem, v_stem, v_stem, v_stem,
--dual
v_stem, v_stem, v_stem,
-- plural
v_stem, v_stem, c_stem, v_stem, c_stem
}, endings)
else
inflect_tense(base, tense, nonpast_prefix_consonants, {
-- singular
-- 'adlul, tadlul, tadullī, yadlul, tadlul
c_stem, c_stem, v_stem, c_stem, c_stem,
--dual
-- tadullā, yadullā, tadullā
v_stem, v_stem, v_stem,
-- plural
-- nadlul, tadullū, tadlulna, yadullū, yadlulna
c_stem, v_stem, c_stem, v_stem, c_stem
}, endings)
end
end
-- Generate non-past conjugation with one stem (no distinct stems for vowel-initial and consonant-initial endings).
-- See nonpast_2stem_conj().
local function nonpast_1stem_conj(base, tense, prefix_vowel, stem, endings, jussive)
nonpast_2stem_conj(base, tense, prefix_vowel, stem, stem, endings, jussive)
end
-- Generate active/passive jussive geminative. There are three alternants, two with terminations -a and -i and one
-- in a null termination with a distinct pattern of vowel/consonant stem usage. See nonpast_2stem_conj() for a
-- description of the arguments.
local function jussive_gem_conj(base, tense, prefix_vowel, v_stem, c_stem)
-- alternative in -a
nonpast_2stem_conj(base, tense, prefix_vowel, v_stem, c_stem, juss_endings_alt_a)
-- alternative in -i
nonpast_2stem_conj(base, tense, prefix_vowel, v_stem, c_stem, juss_endings_alt_i)
-- alternative in -null; requires different combination of v_stem and
-- c_stem since the null endings require the c_stem (e.g. "tadlul" here)
-- whereas the corresponding endings above in -a or -i require the v_stem
-- (e.g. "tadulla, tadulli" above)
nonpast_2stem_conj(base, tense, prefix_vowel, v_stem, c_stem, juss_endings, "jussive")
end
-------------------------------------------------------------------------------
-- Functions to inflect the imperative --
-------------------------------------------------------------------------------
-- Generate imperative conjugation, with two stems, for vowel-initial and consonant-initial endings, respectively.
-- Useful for all forms, and for all weaknesses other than final-weak. Note that the two stems may be the same
-- (specifically for sound and assimilated verbs). If `endings` is nil or omitted, use `imp_endings`. If `alt_gem`
-- is specified, use the pattern of vowel and consonant stems appropriate for the alternative geminate imperatives
-- that use a null ending of -a or -i instead of an empty ending.
local function make_2stem_imperative(base, v_stem, c_stem, endings, alt_gem)
endings = endings or imp_endings
-- Override stems with user-specified stems if available.
v_stem = override_stem_if_needed(base, "imp_v", v_stem)
c_stem = override_stem_if_needed(base, "imp_c", c_stem)
if alt_gem then
inflect_tense_imp(base, {v_stem, v_stem, v_stem, v_stem, c_stem}, endings)
else
inflect_tense_imp(base, {c_stem, v_stem, v_stem, v_stem, c_stem}, endings)
end
end
-- Generate imperative parts for sound or assimilated verbs.
local function make_1stem_imperative(base, stem)
make_2stem_imperative(base, stem, stem)
end
-- Generate imperative parts for geminate verbs form I (also IV, VII, VIII, X).
local function make_gem_imperative(base, v_stem, c_stem)
make_2stem_imperative(base, v_stem, c_stem, imp_endings_alt_a, "alt gem")
make_2stem_imperative(base, v_stem, c_stem, imp_endings_alt_i, "alt gem")
make_2stem_imperative(base, v_stem, c_stem)
end
-------------------------------------------------------------------------------
-- Functions to inflect entire verbs --
-------------------------------------------------------------------------------
-- Generate finite parts of a sound verb (also works for assimilated verbs) from five stems (past and non-past,
-- active and passive, plus imperative) plus the prefix vowel in the active non-past ("a" or "u").
local function make_sound_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem, imp_stem,
prefix_vowel)
past_1stem_conj(base, "past", past_stem)
past_1stem_conj(base, "past_pass", past_pass_stem)
nonpast_1stem_conj(base, "ind", prefix_vowel, nonpast_stem)
nonpast_1stem_conj(base, "sub", prefix_vowel, nonpast_stem)
nonpast_1stem_conj(base, "juss", prefix_vowel, nonpast_stem)
nonpast_1stem_conj(base, "ind_pass", "u", nonpast_pass_stem)
nonpast_1stem_conj(base, "sub_pass", "u", nonpast_pass_stem)
nonpast_1stem_conj(base, "juss_pass", "u", nonpast_pass_stem)
make_1stem_imperative(base, imp_stem)
end
local function past_final_weak_endings_from_vowel(vowel)
if vowel == "ay" then
return past_endings_ay
elseif vowel == "aw" then
return past_endings_aw
elseif vowel == "ī" then
return past_endings_ii
elseif vowel == "ū" then
return past_endings_uu
elseif not vowel then
return nil
else
error(("Internal error: Unrecognized past final-weak vowel spec '%s'"):format(vowel))
end
end
local function nonpast_final_weak_endings_from_vowel(vowel)
if vowel == "ā" then
return ind_endings_aa, sub_endings_aa, juss_endings_aa, imp_endings_aa
elseif vowel == "ī" then
return ind_endings_ii, sub_endings_ii, juss_endings_ii, imp_endings_ii
elseif vowel == "ū" then
return ind_endings_uu, sub_endings_uu, juss_endings_uu, imp_endings_uu
elseif not vowel then
return nil
else
error(("Internal error: Unrecognized non-past final-weak vowel spec '%s'"):format(vowel))
end
end
-- Generate finite parts of a final-weak verb from five stems (past and non-past, active and passive, plus
-- imperative), the past active ending vowel (ay, aw, ī or ū), the non-past active ending vowel (ā, ī or ū) and the
-- prefix vowel in the active non-past (a or u). All five imperative persons share `imp_stem`, so the
-- hamzat wasl carries the verb's own vowel class throughout -- اُدْعُ and اُدْعِي alike. The 2fs used to
-- take a kasra one of its own (finding #5, now #11): its ending is -ī regardless of vowel class, so the
-- stem vowel surfaces as a kasra there, and #5 read that as pulling the hamza with it. The book prints
-- the ḍamma -- اُدْعِي (p.141), اُعْلِي and اُغْزِي (p159) -- so the surfacing kasra is عارض and leaves the
-- hamza alone, exactly as the ḍamma of اِمْشُوا leaves it alone in the mirror case.
--
-- `retain_rad3_2fs`, if true, keeps rad3 as a consonant before that -ī instead of letting it
-- contract away: تَسْهُوِينَ / اُسْهُوِي rather than تَسْهِينَ / اِسْهِي. See README "Findings" #8
-- and final_weak_uu_retains_rad3().
local function make_final_weak_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem, imp_stem,
past_ending_vowel, nonpast_ending_vowel, prefix_vowel, retain_rad3_2fs)
past_stem = override_stem_if_needed(base, "past", past_stem)
past_pass_stem = override_stem_if_needed(base, "past_pass", past_pass_stem)
-- Don't call override_stem_if_needed() here for non-past stems; it's called in nonpast_2stem_conj().
imp_stem = override_stem_if_needed(base, "imp", imp_stem)
-- + not supported for ending vowel overrides
past_ending_vowel = base.stem_overrides.past_final_weak_vowel or past_ending_vowel
local past_pass_ending_vowel = base.stem_overrides.past_pass_final_weak_vowel or "ī"
nonpast_ending_vowel = base.stem_overrides.nonpast_final_weak_vowel or nonpast_ending_vowel
local nonpast_pass_ending_vowel = base.stem_overrides.nonpast_pass_final_weak_vowel or "ā"
local past_endings = past_final_weak_endings_from_vowel(past_ending_vowel)
local past_pass_endings = past_final_weak_endings_from_vowel(past_pass_ending_vowel)
local ind_endings, sub_endings, juss_endings, imp_endings =
nonpast_final_weak_endings_from_vowel(nonpast_ending_vowel)
local ind_pass_endings, sub_pass_endings, juss_pass_endings =
nonpast_final_weak_endings_from_vowel(nonpast_pass_ending_vowel)
if retain_rad3_2fs then
-- rad3 surfaces as a consonant carrying the class's own ḍamma, then the regular -ī:
-- سْهـ + ُوِينَ, not سْهـ + ِينَ. The 2fs sits at index 3 of a make_nonpast_endings()
-- table (`fem`) and at index 2 of the five imperative endings that
-- imperative_endings_from_jussive() extracts from it. Copied rather than mutated --
-- these ending tables are module-level constants shared by every final-weak verb.
-- Written out inline, not via a helper: create_conjugations() is at Lua's 60-upvalue
-- ceiling, and one more captured local stops the module loading at all.
local function set_2fs(endings, index, ending)
local out = {}
for i, v in ipairs(endings) do out[i] = v end
out[index] = ending
return out
end
ind_endings = set_2fs(ind_endings, 3, UU .. II .. NA)
sub_endings = set_2fs(sub_endings, 3, UU .. II)
juss_endings = set_2fs(juss_endings, 3, UU .. II)
imp_endings = set_2fs(imp_endings, 2, UU .. II)
end
inflect_tense(base, "past", "", {past_stem, all_same = 1}, past_endings)
inflect_tense(base, "past_pass", "", {past_pass_stem, all_same = 1}, past_pass_endings)
nonpast_1stem_conj(base, "ind", prefix_vowel, nonpast_stem, ind_endings)
nonpast_1stem_conj(base, "sub", prefix_vowel, nonpast_stem, sub_endings)
nonpast_1stem_conj(base, "juss", prefix_vowel, nonpast_stem, juss_endings)
nonpast_1stem_conj(base, "ind_pass", "u", nonpast_pass_stem, ind_pass_endings)
nonpast_1stem_conj(base, "sub_pass", "u", nonpast_pass_stem, sub_pass_endings)
nonpast_1stem_conj(base, "juss_pass", "u", nonpast_pass_stem, juss_pass_endings)
inflect_tense_imp(base, {imp_stem, all_same = 1}, imp_endings)
end
-- Generate finite parts of an augmented (form II+) final-weak verb from five stems (past and non-past, active and
-- passive, plus imperative) plus the prefix vowel in the active non-past ("a" or "u") and a flag indicating if it
-- behaves like a form V/VI verb in taking non-past endings in -ā instead of -ī.
local function make_augmented_final_weak_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem,
imp_stem, prefix_vowel, form56)
make_final_weak_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem, imp_stem, "ay",
form56 and "ā" or "ī", prefix_vowel)
end
-- Generate finite parts of an augmented (form II+) sound or final-weak verb, given:
-- * `base` (conjugation data structure);
-- * `vowel_spec` (radicals, weakness);
-- * `past_stem_base` (active past stem minus last syllable (= -al or -ā));
-- * `nonpast_stem_base` (non-past stem minus last syllable (= -al/-il or -ā/-ī);
-- * `past_pass_stem_base` (passive past stem minus last syllable (= -il or -ī));
-- * `vn` (verbal noun).
local function make_augmented_sound_final_weak_verb(base, vowel_spec, past_stem_base, nonpast_stem_base,
past_pass_stem_base, vn)
insert_form_or_forms(base, "vn", vn)
local lastrad = base.quadlit and vowel_spec.rad4 or vowel_spec.rad3
local final_weak = is_final_weak(base, vowel_spec)
local prefix_vowel = prefix_vowel_from_vform(base.verb_form)
local form56 = vform_nonpast_a_vowel(base.verb_form)
local a_base_suffix = final_weak and "" or q(A, lastrad)
local i_base_suffix = final_weak and "" or q(I, lastrad)
-- past and non-past stems, active and passive
local past_stem = q(past_stem_base, a_base_suffix)
-- In forms 5 and 6, non-past has /a/ as last stem vowel in the non-past
-- in both active and passive, but /i/ in the active participle and /a/
-- in the passive participle. Elsewhere, consistent /i/ in active non-past
-- and participle, consistent /a/ in passive non-past and participle.
-- Hence, forms 5 and 6 differ only in the non-past active (but not
-- active participle), so we have to split the finite non-past stem and
-- active participle stem.
local nonpast_stem = q(nonpast_stem_base, form56 and a_base_suffix or i_base_suffix)
local ap_stem = q(nonpast_stem_base, i_base_suffix)
local past_pass_stem = q(past_pass_stem_base, i_base_suffix)
local nonpast_pass_stem = q(nonpast_stem_base, a_base_suffix)
-- imperative stem
local imp_stem = q(past_stem_base, form56 and a_base_suffix or i_base_suffix)
-- make parts
if final_weak then
make_augmented_final_weak_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem, imp_stem,
prefix_vowel, form56)
else
make_sound_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem, imp_stem, prefix_vowel)
end
-- active and passive participle
if final_weak then
insert_form_or_forms(base, "ap", q(MU, ap_stem, IN))
insert_form_or_forms(base, "pp", q(MU, nonpast_pass_stem, AN, AMAQ))
else
insert_form_or_forms(base, "ap", q(MU, ap_stem))
insert_form_or_forms(base, "pp", q(MU, nonpast_pass_stem))
end
end
-- Generate finite parts of a hollow or geminate verb from ten stems (vowel and consonant stems for each of past and
-- non-past, active and passive, plus imperative) plus the prefix vowel in the active non-past ("a" or "u"), plus a
-- flag indicating if we are a geminate verb.
local function make_hollow_geminate_verb(base, geminate, past_v_stem, past_c_stem, past_pass_v_stem,
past_pass_c_stem, nonpast_v_stem, nonpast_c_stem, nonpast_pass_v_stem, nonpast_pass_c_stem, imp_v_stem,
imp_c_stem, prefix_vowel, altgem_note)
past_2stem_conj(base, "past", past_v_stem, past_c_stem, altgem_note)
past_2stem_conj(base, "past_pass", past_pass_v_stem, past_pass_c_stem)
nonpast_2stem_conj(base, "ind", prefix_vowel, nonpast_v_stem, nonpast_c_stem)
nonpast_2stem_conj(base, "sub", prefix_vowel, nonpast_v_stem, nonpast_c_stem)
nonpast_2stem_conj(base, "ind_pass", "u", nonpast_pass_v_stem, nonpast_pass_c_stem)
nonpast_2stem_conj(base, "sub_pass", "u", nonpast_pass_v_stem, nonpast_pass_c_stem)
if geminate then
jussive_gem_conj(base, "juss", prefix_vowel, nonpast_v_stem, nonpast_c_stem)
jussive_gem_conj(base, "juss_pass", "u", nonpast_pass_v_stem, nonpast_pass_c_stem)
make_gem_imperative(base, imp_v_stem, imp_c_stem)
else
nonpast_2stem_conj(base, "juss", prefix_vowel, nonpast_v_stem, nonpast_c_stem)
nonpast_2stem_conj(base, "juss_pass", "u", nonpast_pass_v_stem, nonpast_pass_c_stem)
make_2stem_imperative(base, imp_v_stem, imp_c_stem)
end
end
-- Generate finite parts of an augmented (form II+) hollow verb, given:
-- * `base` (conjugation data structure);
-- * `vowel_spec` (radicals, weakness);
-- * `past_stem_base` (invariable part of active past stem);
-- * `nonpast_stem_base` (invariable part of nonpast stem);
-- * `past_pass_stem_base` (invariable part of passive past stem);
-- * `vn` (verbal noun).
local function make_augmented_hollow_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base,
vn)
insert_form_or_forms(base, "vn", vn)
local lastrad = base.quadlit and vowel_spec.rad4 or vowel_spec.rad3
local form410 = base.verb_form == "IV" or base.verb_form == "X"
local prefix_vowel = prefix_vowel_from_vform(base.verb_form)
local a_base_suffix_v, a_base_suffix_c
local i_base_suffix_v, i_base_suffix_c
a_base_suffix_v = q(AA, lastrad) -- 'af-āl-a, inf-āl-a
a_base_suffix_c = q(A, lastrad) -- 'af-al-tu, inf-al-tu
i_base_suffix_v = q(II, lastrad) -- 'uf-īl-a, unf-īl-a
i_base_suffix_c = q(I, lastrad) -- 'uf-il-tu, unf-il-tu
-- past and non-past stems, active and passive, for vowel-initial and
-- consonant-initial endings
local past_v_stem = q(past_stem_base, a_base_suffix_v)
local past_c_stem = q(past_stem_base, a_base_suffix_c)
-- yu-f-īl-u, ya-staf-īl-u but yanf-āl-u, yaft-āl-u
local nonpast_v_stem = q(nonpast_stem_base, form410 and i_base_suffix_v or a_base_suffix_v)
local nonpast_c_stem = q(nonpast_stem_base, form410 and i_base_suffix_c or a_base_suffix_c)
local past_pass_v_stem = q(past_pass_stem_base, i_base_suffix_v)
local past_pass_c_stem = q(past_pass_stem_base, i_base_suffix_c)
local nonpast_pass_v_stem = q(nonpast_stem_base, a_base_suffix_v)
local nonpast_pass_c_stem = q(nonpast_stem_base, a_base_suffix_c)
-- imperative stem
local imp_v_stem = q(past_stem_base, form410 and i_base_suffix_v or a_base_suffix_v)
local imp_c_stem = q(past_stem_base, form410 and i_base_suffix_c or a_base_suffix_c)
-- make parts
make_hollow_geminate_verb(base, false, past_v_stem, past_c_stem, past_pass_v_stem,
past_pass_c_stem, nonpast_v_stem, nonpast_c_stem, nonpast_pass_v_stem,
nonpast_pass_c_stem, imp_v_stem, imp_c_stem, prefix_vowel)
-- active participle
insert_form_or_forms(base, "ap", q(MU, nonpast_v_stem))
-- passive participle
insert_form_or_forms(base, "pp", q(MU, nonpast_pass_v_stem))
end
-- Generate finite parts of an augmented (form II+) geminate verb, given:
-- * `base` (conjugation data structure);
-- * `vowel_spec` (radicals, weakness);
-- * `past_stem_base` (invariable part of active past stem; this and the stem bases below will end with a consonant
-- for forms IV, X, IVq, and a short vowel for the others);
-- * `nonpast_stem_base` (invariable part of nonpast stem);
-- * `past_pass_stem_base` (invariable part of passive past stem);
-- * `vn` (verbal noun);
-- * `altgem_note` (footnote to add to active past 1/2-person forms, when alternative forms are supplied [form X]).
local function make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base,
past_pass_stem_base, vn, altgem_note)
insert_form_or_forms(base, "vn", vn)
local vform = base.verb_form
local lastrad = base.quadlit and vowel_spec.rad4 or vowel_spec.rad3
local prefix_vowel = prefix_vowel_from_vform(vform)
local a_base_suffix_v, a_base_suffix_c
local i_base_suffix_v, i_base_suffix_c
if vform == "IV" or vform == "X" or vform == "IVq" then
a_base_suffix_v = q(A, lastrad, SH) -- 'af-all
a_base_suffix_c = q(SK, lastrad, A, lastrad) -- 'af-lal
i_base_suffix_v = q(I, lastrad, SH) -- yuf-ill
i_base_suffix_c = q(SK, lastrad, I, lastrad) -- yuf-lil
else
a_base_suffix_v = q(lastrad, SH) -- fā-ll, infa-ll
a_base_suffix_c = q(lastrad, A, lastrad) -- fā-lal, infa-lal
i_base_suffix_v = q(lastrad, SH) -- yufā-ll, yanfa-ll
i_base_suffix_c = q(lastrad, I, lastrad) -- yufā-lil, yanfa-lil
end
-- past and non-past stems, active and passive, for vowel-initial and
-- consonant-initial endings
local past_v_stem = q(past_stem_base, a_base_suffix_v)
local past_c_stem = q(past_stem_base, a_base_suffix_c)
local nonpast_v_stem = q(nonpast_stem_base, vform_nonpast_a_vowel(vform) and a_base_suffix_v or i_base_suffix_v)
local nonpast_c_stem = q(nonpast_stem_base, vform_nonpast_a_vowel(vform) and a_base_suffix_c or i_base_suffix_c)
-- NOTE: Formerly had a comment that "vform III and VI passive past do not have contracted parts, only
-- uncontracted parts, which are added separately by those functions". This is based on Mace
-- "Arabic Verbs and Essential Grammar" (1999) entry 63 (continued), which shows passive ḥūjija but no ḥūjja;
-- but that is apparently a mistake, as (1) verb tables in other books do show contracted passive parts for
-- these forms; (2) there is no mention of such an exception on p. 99, which explains how geminate ("doubled")
-- verbs work (on the contrary, it says "The contracted and uncontracted pairs (see above) are found all
-- over Forms III and VI of the doubled verbs").
local past_pass_v_stem = q(past_pass_stem_base, i_base_suffix_v)
local past_pass_c_stem = q(past_pass_stem_base, i_base_suffix_c)
local nonpast_pass_v_stem = q(nonpast_stem_base, a_base_suffix_v)
local nonpast_pass_c_stem = q(nonpast_stem_base, a_base_suffix_c)
-- imperative stem
local imp_v_stem = q(past_stem_base, vform_nonpast_a_vowel(vform) and a_base_suffix_v or i_base_suffix_v)
local imp_c_stem = q(past_stem_base, vform_nonpast_a_vowel(vform) and a_base_suffix_c or i_base_suffix_c)
-- make parts
make_hollow_geminate_verb(base, "geminate", past_v_stem, past_c_stem, past_pass_v_stem,
past_pass_c_stem, nonpast_v_stem, nonpast_c_stem, nonpast_pass_v_stem,
nonpast_pass_c_stem, imp_v_stem, imp_c_stem, prefix_vowel, altgem_note)
-- active participle
insert_form_or_forms(base, "ap", q(MU, nonpast_v_stem))
-- passive participle
insert_form_or_forms(base, "pp", q(MU, nonpast_pass_v_stem))
end
-------------------------------------------------------------------------------
-- Conjugation functions for specific conjugation types --
-------------------------------------------------------------------------------
local function form_i_imp_stem_through_rad1(base, nonpast_vowel, rad1)
local imp_vowel = map_vowel(nonpast_vowel, function(vow)
if vow == A or vow == I then
return I
elseif vow == U then
return U
elseif not skip_slot(base, "imp_2ms") then
error(("Internal error: Non-past vowel %s isn't a, i, or u, should have been caught earlier"):format(
dump(nonpast_vowel)))
else
-- Passive-only; imperative won't ever be displayed so it doesn't matter.
return I
end
end)
-- Mace ("Arabic Verbs and Essentials of Grammar" p. 63: [https://archive.org/details/arabicverbsessen00john/page/62/mode/2up])
-- claims that initial hamza is assimilated/elided into a long vowel in the form-I imperative, but apparently
-- this isn't corrrect.
local vowel_on_alif = map_vowel(imp_vowel, function(vow)
return ALIF .. vow
end)
return q(vowel_on_alif, rad1, SK)
end
-- Implement form-I sound or assimilated verb. ASSIMILATED is true for assimilated verbs.
local function make_form_i_sound_assimilated_verb(base, vowel_spec, assimilated)
local rad1, rad2, rad3, past_vowel, nonpast_vowel = get_radicals_3(vowel_spec)
-- Verbal nouns (maṣādir) for form I are unpredictable and have to be supplied
-- past and non-past stems, active and passive
local past_stem = q(rad1, A, rad2, past_vowel, rad3)
local nonpast_stem = assimilated and q(rad2, nonpast_vowel, rad3) or
q(rad1, SK, rad2, nonpast_vowel, rad3)
local past_pass_stem = q(rad1, U, rad2, I, rad3)
local nonpast_pass_stem = q(rad1, SK, rad2, A, rad3)
-- imperative stem
-- check for irregular verb with reduced imperative (أَخَذَ or أَكَلَ or أَمَرَ)
local reducedimp = reduced_imperative_verb(rad1, rad2, rad3)
if reducedimp then
base.irregular = true
end
local imp_stem_suffix = q(rad2, nonpast_vowel, rad3)
local long_imp_stem_base = form_i_imp_stem_through_rad1(base, nonpast_vowel, rad1)
local short_imp_stem_base = ""
local imp_stem = q((assimilated or reducedimp) and "" or long_imp_stem_base, imp_stem_suffix)
-- A form-I mithal that keeps its wāw spells its imperative on a hamzat wasl,
-- اِوْجَلْ / اِوْنَ. Tell postprocess_term() not to reduce that اِوْ to اِي -- see #10
-- there for why the substitution list can't decide this for itself.
if not assimilated and req(rad1, W) then
base.orth.keep_initial_w = true
end
-- make parts
make_sound_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem, imp_stem, "a")
if reducedimp == "shortlong" then
make_1stem_imperative(base, iut.combine_form_and_footnotes(q(long_imp_stem_base, imp_stem_suffix),
mw.getCurrentFrame():preprocess("[used especially with a clitic such as {{m|ar|فَ}} or {{m|ar|وَ}}]")))
end
-- Check for irregular verb سَأَلَ with alternative jussive and imperative. Calling this after make_sound_verb()
-- adds additional entries to the paradigm parts.
if saal_radicals(rad1, rad2, rad3) then
base.irregular = true
nonpast_1stem_conj(base, "juss", "a", "سَل")
nonpast_1stem_conj(base, "juss_pass", "u", "سَل")
make_1stem_imperative(base, "سَل")
end
-- Active participle.
insert_form_or_forms(base, "ap1", q(rad1, AA, rad2, I, rad3))
-- Insert alternative active participle (stative type I) فَعِيل. Since not all verbs have this, we require that
-- verbs that do have it specify it explicitly; a shortcut ++ is provided to make this easier (e.g. <ap:++> to
-- indicate that the alternative form should be used for the active participle, <ap:+,++> to indicate that both
-- forms can be used, and <ap:-> to indicate that there is no active participle). The same form is used for
-- secondary default passive participle.
insert_ap2_pp2(base, q(rad1, A, rad2, II, rad3))
-- Active participle, stative type II فَعِل (+++).
insert_form_or_forms(base, "ap3", q(rad1, A, rad2, I, rad3))
-- Active participle, color/defect أَفْعَل (+cd).
insert_form_or_forms(base, "apcd", q(HAMZA, A, rad1, SK, rad2, A, rad3))
-- Active participle, -ān فَعْلَان (+an).
insert_form_or_forms(base, "apan", q(rad1, A, rad2, SK, rad3, AAN))
-- Passive participle.
insert_form_or_forms(base, "pp", q(MA, rad1, SK, rad2, UU, rad3))
end
conjugations["I-sound"] = function(base, vowel_spec)
make_form_i_sound_assimilated_verb(base, vowel_spec, false)
end
conjugations["none-sound"] = function(base, vowel_spec)
-- All default stems are nil.
make_sound_verb(base)
end
conjugations["none-hollow"] = function(base, vowel_spec)
-- All default stems are nil.
make_hollow_geminate_verb(base, false)
end
conjugations["none-geminate"] = function(base, vowel_spec)
-- All default stems are nil.
make_hollow_geminate_verb(base, "geminate")
end
conjugations["none-final-weak"] = function(base, vowel_spec)
-- All default stems are nil.
make_final_weak_verb(base)
end
conjugations["I-assimilated"] = function(base, vowel_spec)
make_form_i_sound_assimilated_verb(base, vowel_spec, "assimilated")
end
local function make_form_i_hayy_verb(base, vowel_spec)
-- Verbal nouns (maṣādir) for form I are unpredictable and have to be supplied
base.irregular = true
-- past and non-past stems, active and passive, and imperative stem
local past_c_stem = "حَيِي"
local past_v_stem_long = past_c_stem
local past_v_stem_short = "حَيّ"
-- 3mp of the long variant (حَيِيَ) is حَيُوا, not the geminated حَيُّوا of the short
-- variant (حَيَّ) -- rad2 (ي) here is a plain radical, not doubled; see README
-- "Open findings" #4. Needs its own stem, distinct from both the long and short ones.
local past_v_stem_3mp = "حَي"
local past_pass_c_stem = "حُيِي"
local past_pass_v_stem_long = past_pass_c_stem
local past_pass_v_stem_short = "حُيّ"
local past_pass_v_stem_3mp = "حُي"
local nonpast_stem = "حْي"
local nonpast_pass_stem = nonpast_stem
local imp_stem = _I .. nonpast_stem
-- make parts
past_2stem_conj(base, "past", {}, past_c_stem)
past_2stem_conj(base, "past_pass", {}, past_pass_c_stem)
local variant = vowel_spec.variant or "both"
if variant == "short" or variant == "both" then
past_2stem_conj(base, "past", past_v_stem_short, {})
past_2stem_conj(base, "past_pass", past_pass_v_stem_short, {})
end
function inflect_long_variant(tense, long_stem, mp_stem)
inflect_tense_1(base, tense, "",
{long_stem, long_stem, long_stem, long_stem, mp_stem},
{past_endings[4], past_endings[5], past_endings[7], past_endings[8],
past_endings[12]},
{"3ms", "3fs", "3md", "3fd", "3mp"})
end
if variant == "long" or variant == "both" then
inflect_long_variant("past", past_v_stem_long, past_v_stem_3mp)
inflect_long_variant("past_pass", past_pass_v_stem_long, past_pass_v_stem_3mp)
end
nonpast_1stem_conj(base, "ind", "a", nonpast_stem, ind_endings_aa)
nonpast_1stem_conj(base, "sub", "a", nonpast_stem, sub_endings_aa)
nonpast_1stem_conj(base, "juss", "a", nonpast_stem, juss_endings_aa)
nonpast_1stem_conj(base, "ind_pass", "u", nonpast_pass_stem, ind_endings_aa)
nonpast_1stem_conj(base, "sub_pass", "u", nonpast_pass_stem, sub_endings_aa)
nonpast_1stem_conj(base, "juss_pass", "u", nonpast_pass_stem, juss_endings_aa)
inflect_tense_imp(base, {imp_stem, all_same = 1}, imp_endings_aa)
-- active and passive participles apparently do not exist for this verb
end
-- Implement form-I final-weak assimilated+final-weak verb. ASSIMILATED is true for assimilated verbs.
local function make_form_i_final_weak_verb(base, vowel_spec, assimilated)
local rad1, rad2, rad3, past_vowel, nonpast_vowel = get_radicals_3(vowel_spec)
-- حَيَّ or حَيِيَ is weird enough that we handle it as a separate function.
if hayy_radicals(rad1, rad2, rad3) then
make_form_i_hayy_verb(base, vowel_spec)
return
end
-- Verbal nouns (maṣādir) for form I are unpredictable and have to be supplied.
-- Past and non-past stems, active and passive, and imperative stem.
local past_stem = q(rad1, A, rad2)
local past_pass_stem = q(rad1, U, rad2)
local nonpast_stem, nonpast_pass_stem, imp_stem
if raa_radicals(rad1, rad2, rad3) then
base.irregular = true
nonpast_stem = rad1
nonpast_pass_stem = rad1
imp_stem = rad1
else
nonpast_pass_stem = q(rad1, SK, rad2)
if assimilated then
nonpast_stem = rad2
imp_stem = rad2
else
nonpast_stem = nonpast_pass_stem
imp_stem = q(form_i_imp_stem_through_rad1(base, nonpast_vowel, rad1), rad2)
end
end
-- A form-I mithal that keeps its wāw spells its imperative on a hamzat wasl,
-- اِوْجَلْ / اِوْنَ. Tell postprocess_term() not to reduce that اِوْ to اِي -- see #10
-- there for why the substitution list can't decide this for itself.
if not assimilated and req(rad1, W) then
base.orth.keep_initial_w = true
end
-- Make parts.
local past_ending_vowel =
req(rad3, Y) and req(past_vowel, A) and "ay" or
req(rad3, W) and req(past_vowel, A) and "aw" or
req(past_vowel, I) and "ī" or "ū"
-- Try to preserve footnotes attached to the third radical and/or past and/or non-past vowels.
local past_footnotes = iut.combine_footnotes(rget_footnotes(rad3), rget_footnotes(past_vowel))
local nonpast_ending_vowel = req(nonpast_vowel, A) and "ā" or req(nonpast_vowel, I) and "ī" or "ū"
local nonpast_footnotes = iut.combine_footnotes(rget_footnotes(rad3), rget_footnotes(nonpast_vowel))
make_final_weak_verb(base,
iut.combine_form_and_footnotes(past_stem, past_footnotes),
iut.combine_form_and_footnotes(past_pass_stem, past_footnotes),
iut.combine_form_and_footnotes(nonpast_stem, nonpast_footnotes),
iut.combine_form_and_footnotes(nonpast_pass_stem, nonpast_footnotes),
iut.combine_form_and_footnotes(imp_stem, nonpast_footnotes),
past_ending_vowel, nonpast_ending_vowel, "a",
final_weak_uu_retains_rad3(rad1, rad2, rad3, past_ending_vowel, nonpast_ending_vowel))
-- Active participle.
insert_form_or_forms(base, "ap1", q(rad1, AA, rad2, IN))
-- Active participle, stative type I فَعِيّ (++). FIXME: Is this correct when rad3 is W?
insert_ap2_pp2(base, q(rad1, A, rad2, II, SH))
-- Active participle, stative type II فَعٍ (+++). FIXME: Any examples of this to verify it's correct?
insert_form_or_forms(base, "ap3", q(rad1, A, rad2, IN))
-- Active participle, color/defect أَفْعَى (+cd).
insert_form_or_forms(base, "apcd", q(HAMZA, A, rad1, SK, rad2, AAMAQ))
-- Active participle, -ān فَعْيَان or فَعْوَان (+an).
-- FIXME: Any examples of this for both rad3 = W and y to verify it's correct?
insert_form_or_forms(base, "apan", q(rad1, A, rad2, SK, rad3, AAN))
-- Passive participle.
insert_form_or_forms(base, "pp", q(MA, rad1, SK, rad2, req(rad3, Y) and II or UU, SH))
end
conjugations["I-final-weak"] = function(base, vowel_spec)
make_form_i_final_weak_verb(base, vowel_spec, false)
end
conjugations["I-assimilated+final-weak"] = function(base, vowel_spec)
make_form_i_final_weak_verb(base, vowel_spec, "assimilated")
end
conjugations["I-hollow"] = function(base, vowel_spec)
local rad1, rad2, rad3, past_vowel, nonpast_vowel = get_radicals_3(vowel_spec)
-- In some sense, hollow vowels i~i and u~u are more "correct" than a~i and a~u, but the latter follow the
-- pattern of other form-I verbs, so we map i~i to a~i and u~u to a~u in infer_radicals(). Now however we have
-- to undo this to get the actual past vowel based on the non-past vowel.
if req(past_vowel, A) then
past_vowel = map_vowel(past_vowel, function(vow)
return req(nonpast_vowel, A) and I or rget(nonpast_vowel)
end)
end
local lengthened_nonpast = map_vowel(nonpast_vowel, function(vow)
return vow == U and UU or vow == I and II or AA
end)
-- Verbal nouns (maṣādir) for form I are unpredictable and have to be supplied.
-- active past stems - vowel (v) and consonant (c)
local past_v_stem = q(rad1, AA, rad3)
local past_c_stem = q(rad1, past_vowel, rad3)
-- active non-past stems - vowel (v) and consonant (c)
local nonpast_v_stem = q(rad1, lengthened_nonpast, rad3)
local nonpast_c_stem = q(rad1, nonpast_vowel, rad3)
-- passive past stems - vowel (v) and consonant (c)
-- 'ufīla always; the contracted stem takes whichever of i/u the active past_c_stem
-- *isn't* -- xāfa/xiftu (i) -> passive xufta (u), qāla/qultu (u) -> passive qilta (i).
-- Contraction drops rad2, so this vowel is the only thing distinguishing active from
-- passive in these forms, hence the two roots' behaviour is opposite, not independent.
-- Confirmed on two printed pages (خافَ p.224 "خُفْتَ", قالَ p.138 "قِلْتَ"); previously
-- hardcoded to u from خافَ alone, which is only half the pattern -- see README.
local past_pass_v_stem = q(rad1, II, rad3)
local past_pass_c_stem = q(rad1, map_vowel(past_vowel, function(vow)
return vow == I and U or I
end), rad3)
-- passive non-past stems - vowel (v) and consonant (c)
-- yufāla/yufalna
-- stem is built differently but conjugation is identical to sound verbs
local nonpast_pass_v_stem = q(rad1, AA, rad3)
local nonpast_pass_c_stem = q(rad1, A, rad3)
-- imperative stem
local imp_v_stem = nonpast_v_stem
local imp_c_stem = nonpast_c_stem
-- make parts
make_hollow_geminate_verb(base, false, past_v_stem, past_c_stem, past_pass_v_stem,
past_pass_c_stem, nonpast_v_stem, nonpast_c_stem, nonpast_pass_v_stem,
nonpast_pass_c_stem, imp_v_stem, imp_c_stem, "a")
if kaan_radicals(rad1, rad2, rad3) then
local endings = make_nonpast_endings(U, {}, {}, {}, {})
inflect_tense(base, "juss", nonpast_prefix_consonants, q(A, rad1), endings)
base.irregular = true
end
-- سالَ يَسالُ keeps سَأَلْتُ's fatha in its contracted past -- سَلْتَ, not the سِلْتَ
-- the a~a pair would give -- and the book says why in as many words, under p202's
-- own table: "سالَ يَسالُ، لغة في سَأَلَ المهموز ... ويُقالُ في الماضي سَلْتُ بفتحِ
-- أوّلهِ مثلَ سَأَلْتُ فحُذِفَتِ الهمزةُ كما حُذِفَتْ مِنْ رَأَيْتُ فقيلَ فيه رَيْتُ".
-- So this is not a hollow-vowel exception and no rule about the a~a pair should be
-- touched for it: it is سَأَلْتُ with the hamza dropped, the way رَأَيْتُ gives رَيْتُ.
-- Added as an extra variant rather than a replacement, for the same reason
-- saal_radicals() adds سَلْ beside اِسْأَلْ instead of replacing it -- the book prints
-- both, in different places (p202 sets سَلْتَ, p176 sets سَأَلْتَ). Gated on the a~a
-- pair, because a سول verb with a u non-past is a different verb. README finding #19.
if saal_hollow_radicals(rad1, rad2, rad3) and req(nonpast_vowel, A) then
base.irregular = true
past_2stem_conj(base, "past", past_v_stem, q(rad1, A, rad3))
end
-- Active participle.
insert_form_or_forms(base, "ap1", req(rad3, HAMZA) and q(rad1, AA, HAMZA, IN) or
q(rad1, AA, HAMZA, I, rad3))
-- Active participle, stative type I فَيِّد (++). FIXME: Any examples of this to verify it's correct?
insert_ap2_pp2(base, q(rad1, A, Y, SH, I, rad3))
-- Active participle, stative type II فَيِد (+++). FIXME: Any examples of this to verify it's correct?
insert_form_or_forms(base, "ap3", q(rad1, A, Y, I, rad3))
-- Active participle, color/defect أَفّيَد or أَفّوَد (+cd). FIXME: Any examples of this to verify it's correct?
insert_form_or_forms(base, "apcd", q(HAMZA, A, rad1, SK, rad2, A, rad3))
-- Active participle, -ān فَيْدَان or فَوْدَان (+an). Example: جَاعَ "to be hungry", act part جَوْعَان
insert_form_or_forms(base, "apan", q(rad1, A, rad2, SK, rad3, AAN))
-- Passive participle.
insert_form_or_forms(base, "pp", q(MA, rad1, req(rad2, Y) and II or UU, rad3))
end
conjugations["I-geminate"] = function(base, vowel_spec)
local rad1, rad2, rad3, past_vowel, nonpast_vowel = get_radicals_3(vowel_spec)
-- Verbal nouns (maṣādir) for form I are unpredictable and have to be supplied.
-- active past stems - vowel (v) and consonant (c)
-- The contracted stem's vowel is the past vowel for most roots (مَدَدْتَ) but follows the
-- مضارع for the إتباع lexemes (هَمُمْتَ); see geminate_degemination_vowel().
local past_v_stem = q(rad1, A, rad2, SH)
local past_c_stem = q(rad1, A, rad2,
geminate_degemination_vowel(rad1, rad2, rad3, past_vowel, nonpast_vowel), rad2)
-- active non-past stems - vowel (v) and consonant (c)
local nonpast_v_stem = q(rad1, nonpast_vowel, rad2, SH)
local nonpast_c_stem = q(rad1, SK, rad2, nonpast_vowel, rad2)
-- passive past stems - vowel (v) and consonant (c)
-- dulla/dulilta
local past_pass_v_stem = q(rad1, U, rad2, SH)
local past_pass_c_stem = q(rad1, U, rad2, I, rad2)
-- passive non-past stems - vowel (v) and consonant (c)
--yudallu/yudlalna
-- stem is built differently but conjugation is identical to sound verbs
local nonpast_pass_v_stem = q(rad1, A, rad2, SH)
local nonpast_pass_c_stem = q(rad1, SK, rad2, A, rad2)
-- imperative stem
local imp_v_stem = q(rad1, nonpast_vowel, rad2, SH)
local imp_c_stem = q(form_i_imp_stem_through_rad1(base, nonpast_vowel, rad1), rad2, nonpast_vowel, rad2)
-- make parts
make_hollow_geminate_verb(base, "geminate", past_v_stem, past_c_stem, past_pass_v_stem,
past_pass_c_stem, nonpast_v_stem, nonpast_c_stem, nonpast_pass_v_stem,
nonpast_pass_c_stem, imp_v_stem, imp_c_stem, "a")
-- Active participle.
insert_form_or_forms(base, "ap1", q(rad1, AA, rad2, SH))
-- Active participle, stative type I فَعِيع (++). FIXME: Any examples of this to verify it's correct?
insert_ap2_pp2(base, q(rad1, A, rad2, II, rad2))
-- Active participle, stative type II فَعّ (+++). Example: بَرَّ "to be pious", active participle بَرّ
insert_form_or_forms(base, "ap3", q(rad1, A, rad2, SH))
-- Active participle, color/defect أَفَعّ (+cd).
-- Example: لَصَّ "to be thievish, to steal repeatedly", active participle أَلَصّ.
insert_form_or_forms(base, "apcd", q(HAMZA, A, rad1, A, rad2, SH))
-- Active participle, -ān فَعَّان (+an). FIXME: Any examples of this to verify it's correct?
insert_form_or_forms(base, "apan", q(rad1, A, rad2, SH, AAN))
-- Passive participle.
insert_form_or_forms(base, "pp", q(MA, rad1, SK, rad2, UU, rad2))
end
-- Return the ta- (active, past and non-past) and tu- (passive past) prefixes for a form II/III/V/VI verb.
-- Form V and VI verbs normally use ta- and tu-, but reduced (base.reduced) verbs use different prefixes. Form II
-- and III verbs have no prefix.
local function form_ii_iii_v_vi_ta_tu_prefix(base, rad1)
local vform = base.verb_form
if vform == "V" or vform == "VI" then
if base.reduced then
-- To simplify the code, we generate two rad1's with a sukūn between them, which is cleaned up in
-- postprocessing.
return q(_I, rad1, SK), q(rad1, SK), q(_U, rad1, SK)
else
return TA, TA, TU
end
else
return "", "", ""
end
end
-- Make form II or V sound or final-weak verb.
local function make_form_ii_v_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local final_weak = is_final_weak(base, vowel_spec)
local vform = base.verb_form
local ta_past_prefix, ta_nonpast_prefix, tu_past_prefix = form_ii_iii_v_vi_ta_tu_prefix(base, rad1)
local vn = vform == "V" and
q(ta_past_prefix, rad1, A, rad2, SH, final_weak and IN or q(U, rad3)) or
q(TA, rad1, SK, rad2, II, final_weak and AH or rad3)
-- various stem bases
local past_stem_base = q(ta_past_prefix, rad1, A, rad2, SH)
local nonpast_stem_base = q(ta_nonpast_prefix, rad1, A, rad2, SH)
local past_pass_stem_base = q(tu_past_prefix, rad1, U, rad2, SH)
-- make parts
make_augmented_sound_final_weak_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base,
vn)
end
conjugations["II-sound"] = function(base, vowel_spec)
make_form_ii_v_sound_final_weak_verb(base, vowel_spec)
end
conjugations["II-final-weak"] = function(base, vowel_spec)
make_form_ii_v_sound_final_weak_verb(base, vowel_spec)
end
local function make_form_iii_alt_vn(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local final_weak = is_final_weak(base, vowel_spec)
-- Insert alternative verbal noun فِعَال. Since not all verbs have this, we require that verbs that do have it
-- specify it explicitly; a shortcut ++ is provided to make this easier (e.g. <vn:+,++> to indicate that
-- both the normal verbal noun مُفَاعَلَة and secondary verbal noun فِعَال are available).
insert_form_or_forms(base, "vn2", q(rad1, I, rad2, AA, final_weak and HAMZA or rad3))
end
-- Make form III or VI sound or final-weak verb.
local function make_form_iii_vi_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local final_weak = is_final_weak(base, vowel_spec)
local vform = base.verb_form
local ta_past_prefix, ta_nonpast_prefix, tu_past_prefix = form_ii_iii_v_vi_ta_tu_prefix(base, rad1)
local vn = vform == "VI" and
q(ta_past_prefix, rad1, AA, rad2, final_weak and IN or q(U, rad3)) or
q(MU, rad1, AA, rad2, final_weak and AAH or q(A, rad3, AH))
-- various stem bases
local past_stem_base = q(ta_past_prefix, rad1, AA, rad2)
local nonpast_stem_base = q(ta_nonpast_prefix, rad1, AA, rad2)
local past_pass_stem_base = q(tu_past_prefix, rad1, UU, rad2)
-- make parts
make_augmented_sound_final_weak_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base,
vn)
if vform == "III" then
make_form_iii_alt_vn(base, vowel_spec)
end
end
conjugations["III-sound"] = function(base, vowel_spec)
make_form_iii_vi_sound_final_weak_verb(base, vowel_spec)
end
conjugations["III-final-weak"] = function(base, vowel_spec)
make_form_iii_vi_sound_final_weak_verb(base, vowel_spec)
end
-- Make form III or VI geminate verb.
local function make_form_iii_vi_geminate_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vform = base.verb_form
local ta_past_prefix, ta_nonpast_prefix, tu_past_prefix = form_ii_iii_v_vi_ta_tu_prefix(base, rad1)
-- Alternative verbal noun فِعَال will be inserted when we add sound parts below.
local vn = vform == "VI" and q(ta_past_prefix, rad1, AA, rad2, SH) or q(MU, rad1, AA, rad2, SH, AH)
-- Various stem bases.
local past_stem_base = q(ta_past_prefix, rad1, AA)
local nonpast_stem_base = q(ta_nonpast_prefix, rad1, AA)
local past_pass_stem_base = q(tu_past_prefix, rad1, UU)
-- Make parts.
local variant = vowel_spec.variant or "short"
if variant == "short" or variant == "both" then
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
-- Also add alternative sound (non-compressed) parts. This will lead to some duplicate entries, but they are
-- removed during addition.
if variant == "long" or variant == "both" then
make_form_iii_vi_sound_final_weak_verb(base, vowel_spec)
elseif vform == "III" then
-- Still need to add the alternative form-III verbal noun.
make_form_iii_alt_vn(base, vowel_spec)
end
end
conjugations["III-geminate"] = function(base, vowel_spec)
make_form_iii_vi_geminate_verb(base, vowel_spec)
end
-- Make form IV sound or final-weak verb.
local function make_form_iv_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local final_weak = is_final_weak(base, vowel_spec)
-- core of stem base, minus stem prefixes
local stem_core
-- check for irregular verb أَرَى
local is_raa = raa_radicals(rad1, rad2, rad3)
if is_raa then
base.irregular = true
stem_core = rad1
else
stem_core = q(rad1, SK, rad2)
end
-- verbal noun
local vn = is_raa and
q(HAMZA, I, stem_core, AA, HAMZA, AH) or
q(HAMZA, I, stem_core, AA, final_weak and HAMZA or rad3)
-- various stem bases
local past_stem_base = q(HAMZA, A, stem_core)
local nonpast_stem_base = stem_core
local past_pass_stem_base = q(HAMZA, U, stem_core)
-- make parts
make_augmented_sound_final_weak_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base,
vn)
end
conjugations["IV-sound"] = function(base, vowel_spec)
make_form_iv_sound_final_weak_verb(base, vowel_spec)
end
conjugations["IV-final-weak"] = function(base, vowel_spec)
make_form_iv_sound_final_weak_verb(base, vowel_spec)
end
conjugations["IV-hollow"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
-- verbal noun
local vn = q(HAMZA, I, rad1, AA, rad3, AH)
-- various stem bases
local past_stem_base = q(HAMZA, A, rad1)
local nonpast_stem_base = rad1
local past_pass_stem_base = q(HAMZA, U, rad1)
-- make parts
make_augmented_hollow_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["IV-geminate"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = q(HAMZA, I, rad1, SK, rad2, AA, rad2)
-- various stem bases
local past_stem_base = q(HAMZA, A, rad1)
local nonpast_stem_base = rad1
local past_pass_stem_base = q(HAMZA, U, rad1)
-- make parts
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["V-sound"] = function(base, vowel_spec)
make_form_ii_v_sound_final_weak_verb(base, vowel_spec)
end
conjugations["V-final-weak"] = function(base, vowel_spec)
make_form_ii_v_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VI-sound"] = function(base, vowel_spec)
make_form_iii_vi_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VI-final-weak"] = function(base, vowel_spec)
make_form_iii_vi_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VI-geminate"] = function(base, vowel_spec)
make_form_iii_vi_geminate_verb(base, vowel_spec)
end
-- Make a verbal noun of the general form that applies to forms VII and above. RAD12 is the first consonant cluster
-- (after initial اِ) and RAD34 is the second consonant cluster. RAD5 is the final consonant.
local function high_form_verbal_noun(rad12, rad34, rad5)
return q(_I, rad12, I, rad34, AA, rad5)
end
-- Populate a sound or final-weak verb for any of the various high-numbered augmented forms (form VII and up) that
-- have up to 5 consonants in two clusters in the stem and the same pattern of vowels between. Some of these
-- consonants in certain verb parts are w's, which leads to apparent anomalies in certain stems of these parts, but
-- these anomalies are handled automatically in postprocessing, where we resolve sequences of iwC -> īC, uwC -> ūC,
-- w + sukūn + w -> w + shadda.
-- RAD12 is the first consonant cluster (after initial اِ) and RAD34 is the second consonant cluster. RAD5 is the
-- final consonant.
local function make_high_form_sound_final_weak_verb(base, vowel_spec, rad12, rad34, rad5)
local final_weak = is_final_weak(base, vowel_spec)
local vn = high_form_verbal_noun(rad12, rad34, final_weak and HAMZA or rad5)
-- various stem bases
local nonpast_stem_base = q(rad12, A, rad34)
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, rad12, U, rad34)
-- make parts
make_augmented_sound_final_weak_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base,
vn)
end
local function form_vii_nrad1(base, rad1)
if base.reduced then
if not req(rad1, M) then
error(("Internal error: Form VII first radical %s is not م but .reduced specified; should have been caught earlier"):
format(rget(rad1)))
end
return M .. SH
else
return q("نْ", rad1)
end
end
-- Make form VII sound or final-weak verb.
local function make_form_vii_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
make_high_form_sound_final_weak_verb(base, vowel_spec, form_vii_nrad1(base, rad1), rad2, rad3)
end
conjugations["VII-sound"] = function(base, vowel_spec)
make_form_vii_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VII-final-weak"] = function(base, vowel_spec)
make_form_vii_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VII-hollow"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local nrad1 = form_vii_nrad1(base, rad1)
local vn = high_form_verbal_noun(nrad1, Y, rad3)
-- various stem bases
local nonpast_stem_base = nrad1
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, nrad1)
-- make parts
make_augmented_hollow_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["VII-geminate"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local nrad1 = form_vii_nrad1(base, rad1)
local vn = high_form_verbal_noun(nrad1, rad2, rad2)
-- various stem bases
local nonpast_stem_base = q(nrad1, A)
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, nrad1, U)
-- make parts
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
-- Return Form VIII verbal noun.
local function form_viii_verbal_noun(base, vowel_spec, rad1, rad2, rad3)
local final_weak = is_final_weak(base, vowel_spec)
rad3 = final_weak and HAMZA or rad3
return {high_form_verbal_noun(vowel_spec.form_viii_assim, rad2, rad3)}
end
-- Make form VIII sound or final-weak verb.
local function make_form_viii_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
-- check for irregular verb اِتَّخَذَ
if axadh_radicals(rad1, rad2, rad3) then
base.irregular = true
rad1 = T
end
make_high_form_sound_final_weak_verb(base, vowel_spec, vowel_spec.form_viii_assim, rad2, rad3)
end
conjugations["VIII-sound"] = function(base, vowel_spec)
make_form_viii_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VIII-final-weak"] = function(base, vowel_spec)
make_form_viii_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VIII-hollow"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = form_viii_verbal_noun(base, vowel_spec, rad1, Y, rad3)
-- various stem bases
local nonpast_stem_base = vowel_spec.form_viii_assim
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, nonpast_stem_base)
-- make parts
make_augmented_hollow_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["VIII-geminate"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = form_viii_verbal_noun(base, vowel_spec, rad1, rad2, rad2)
-- various stem bases
local nonpast_stem_base = q(vowel_spec.form_viii_assim, A)
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, vowel_spec.form_viii_assim, U)
-- make parts
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["IX-sound"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = q(_I, rad1, SK, rad2, I, rad3, AA, rad3)
-- various stem bases
local nonpast_stem_base = q(rad1, SK, rad2, A)
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, rad1, SK, rad2, U)
-- make parts
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["IX-final-weak"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
make_high_form_sound_final_weak_verb(base, vowel_spec, q(rad1, SK, rad2), rad3, rad3)
end
-- Populate a sound or final-weak verb for any of the various high-numbered
-- augmented forms that have 5 consonants in the stem and the same pattern of
-- vowels. Some of these consonants in certain verb parts are w's, which leads to
-- apparent anomalies in certain stems of these parts, but these anomalies
-- are handled automatically in postprocessing, where we resolve sequences of
-- iwC -> īC, uwC -> ūC, w + sukūn + w -> w + shadda.
local function make_high5_form_sound_final_weak_verb(base, vowel_spec, rad1, rad2, rad3, rad4, rad5)
make_high_form_sound_final_weak_verb(base, vowel_spec, q(rad1, SK, rad2), q(rad3, SK, rad4), rad5)
end
-- Make form X sound or final-weak verb.
local function make_form_x_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
-- check for irregular verb اِسْتَحْيَا (also اِسْتَحَى)
local is_hayy = hayy_radicals(rad1, rad2, rad3)
local variant = vowel_spec.variant or "both"
if not is_hayy or variant == "long" or variant == "both" then
make_high5_form_sound_final_weak_verb(base, vowel_spec, S, T, rad1, rad2, rad3)
end
if is_hayy and (variant == "short" or variant == "both") then
base.irregular = true
-- Add alternative entries to the verbal paradigms. Any duplicates are removed during addition.
make_high_form_sound_final_weak_verb(base, vowel_spec, S .. SK .. T, rad1, rad3)
end
end
conjugations["X-sound"] = function(base, vowel_spec)
make_form_x_sound_final_weak_verb(base, vowel_spec)
end
conjugations["X-final-weak"] = function(base, vowel_spec)
make_form_x_sound_final_weak_verb(base, vowel_spec)
end
conjugations["X-hollow"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = q(base.reduced and "اِسْ" or "اِسْتِ", rad1, AA, rad3, AH)
-- various stem bases
local past_stem_base = q(base.reduced and "اِسْ" or "اِسْتَ", rad1)
local nonpast_stem_base = q(base.reduced and "سْ" or "سْتَ", rad1)
local past_pass_stem_base = q(base.reduced and "اُسْ" or "اُسْتُ", rad1)
-- make parts
make_augmented_hollow_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["X-geminate"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = q("اِسْتِ", rad1, SK, rad2, AA, rad2)
-- various stem bases
local past_stem_base = q("اِسْتَ", rad1)
local nonpast_stem_base = q("سْتَ", rad1)
local past_pass_stem_base = q("اُسْتُ", rad1)
-- make parts
if base.altgem then
inflect_tense(base, "past", "", {q(past_stem_base, A, rad2, SH), all_same = 1},
past_endings_ay_12_person_only)
end
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn,
base.altgem and "[uncommon]" or nil)
end
conjugations["XI-sound"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = q(_I, rad1, SK, rad2, II, rad3, AA, rad3)
-- various stem bases
local nonpast_stem_base = q(rad1, SK, rad2, AA)
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, rad1, SK, rad2, UU)
-- make parts
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
-- Probably no form XI final-weak, since already geminate in form; would behave as XI-sound.
-- Make form XII sound or final-weak verb.
local function make_form_xii_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
make_high5_form_sound_final_weak_verb(base, vowel_spec, rad1, rad2, W, rad2, rad3)
end
conjugations["XII-sound"] = function(base, vowel_spec)
make_form_xii_sound_final_weak_verb(base, vowel_spec)
end
conjugations["XII-final-weak"] = function(base, vowel_spec)
make_form_xii_sound_final_weak_verb(base, vowel_spec)
end
-- Make form XIII sound or final-weak verb.
local function make_form_xiii_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
make_high5_form_sound_final_weak_verb(base, vowel_spec, rad1, rad2, W, W, rad3)
end
conjugations["XIII-sound"] = function(base, vowel_spec)
make_form_xiii_sound_final_weak_verb(base, vowel_spec)
end
conjugations["XIII-final-weak"] = function(base, vowel_spec)
make_form_xiii_sound_final_weak_verb(base, vowel_spec)
end
-- Make a form XIV or XV sound or final-weak verb. Last radical appears twice (if`anlala / yaf`anlilu) so if it were
-- w or y you'd get if`anwā / yaf`anwī or if`anyā / yaf`anyī, i.e. unlike for most augmented verbs, the identity of
-- the radical matters.
local function make_form_xiv_xv_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local lastrad = base.verb_form == "XV" and Y or rad3
make_high5_form_sound_final_weak_verb(base, vowel_spec, rad1, rad2, N, rad3, lastrad)
end
conjugations["XIV-sound"] = function(base, vowel_spec)
make_form_xiv_xv_sound_final_weak_verb(base, vowel_spec)
end
conjugations["XIV-final-weak"] = function(base, vowel_spec)
make_form_xiv_xv_sound_final_weak_verb(base, vowel_spec)
end
conjugations["XV-sound"] = function(base, vowel_spec)
make_form_xiv_xv_sound_final_weak_verb(base, vowel_spec)
end
-- Probably no form XV final-weak, since already final-weak in form; would behave as XV-sound.
-- Make form Iq or IIq sound or final-weak verb.
local function make_form_iq_iiq_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3, rad4 = get_radicals_4(vowel_spec)
local final_weak = is_final_weak(base, vowel_spec)
local vform = base.verb_form
local vn = vform == "IIq" and
q(TA, rad1, A, rad2, SK, rad3, (final_weak and IN or q(U, rad4))) or
q(rad1, A, rad2, SK, rad3, (final_weak and AAH or q(A, rad4, AH)))
local ta_pref = vform == "IIq" and TA or ""
local tu_pref = vform == "IIq" and TU or ""
-- various stem bases
local past_stem_base = q(ta_pref, rad1, A, rad2, SK, rad3)
local nonpast_stem_base = past_stem_base
local past_pass_stem_base = q(tu_pref, rad1, U, rad2, SK, rad3)
-- make parts
make_augmented_sound_final_weak_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base,
vn)
end
conjugations["Iq-sound"] = function(base, vowel_spec)
make_form_iq_iiq_sound_final_weak_verb(base, vowel_spec)
end
conjugations["Iq-final-weak"] = function(base, vowel_spec)
make_form_iq_iiq_sound_final_weak_verb(base, vowel_spec)
end
conjugations["IIq-sound"] = function(base, vowel_spec)
make_form_iq_iiq_sound_final_weak_verb(base, vowel_spec)
end
conjugations["IIq-final-weak"] = function(base, vowel_spec)
make_form_iq_iiq_sound_final_weak_verb(base, vowel_spec)
end
-- The نون of اِفْعَنْلَلَ, or the إدغام that replaces it. Where ل1 is weak the reference
-- prints the نون assimilated into it: model 427 (p.415) sets اِهْبَنْيَخَ as اِهْبَيَّخَ,
-- and its own footnote gives the root as أصْلُهُ هَبْيَخَ, so the ي is ل1 and the نون is
-- the wazn's. Emitting ل1 twice with a sukūn between them is how reduced forms V/VI
-- write their تاء التفعّل too -- postprocess_subs' "same letter separated by sukūn"
-- rule turns the pair into the šadda, and the مضارع and أمر come out اِهْبَيِّخْ /
-- يَهْبَيِّخُ, which is what the page prints.
--
-- Requested with |مدغم=, never inferred from the radical -- the same call forms V/VI,
-- VII and X already make. p.415 is the only افعنلل paradigm in the corpus with a weak
-- ل1 (the other five, اِفْعَنْلَلَ اِحْوَنْصَلَ اِحْرَنْجَمَ اِفْرَنْقَعَ اِسْلَنْطَأَ
-- اِطْلَنْفَأَ, are all sound there), and one attestation is not enough to make every
-- root of the shape assimilate for every caller on ar.wiktionary.
local function form_iiiq_n_augment(base, rad3)
if not base.reduced then
return N
end
if not (req(rad3, W) or req(rad3, Y)) then
error(("Form IIIq .reduced assimilates the نون into ل1, which must be و or ي, but saw %s"):
format(rget(rad3)))
end
return rad3
end
-- Make form IIIq sound or final-weak verb.
local function make_form_iiiq_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3, rad4 = get_radicals_4(vowel_spec)
make_high5_form_sound_final_weak_verb(base, vowel_spec, rad1, rad2,
form_iiiq_n_augment(base, rad3), rad3, rad4)
end
conjugations["IIIq-sound"] = function(base, vowel_spec)
make_form_iiiq_sound_final_weak_verb(base, vowel_spec)
end
conjugations["IIIq-final-weak"] = function(base, vowel_spec)
make_form_iiiq_sound_final_weak_verb(base, vowel_spec)
end
conjugations["IVq-sound"] = function(base, vowel_spec)
local rad1, rad2, rad3, rad4 = get_radicals_4(vowel_spec)
local vn = q(_I, rad1, SK, rad2, I, rad3, SK, rad4, AA, rad4)
-- various stem bases
local past_stem_base = q(_I, rad1, SK, rad2, A, rad3)
local nonpast_stem_base = q(rad1, SK, rad2, A, rad3)
local past_pass_stem_base = q(_U, rad1, SK, rad2, U, rad3)
-- make parts
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
-- Probably no form IVq final-weak, since already geminate in form; would behave as IVq-sound.
end
create_conjugations()
-------------------------------------------------------------------------------
-- Guts of main conjugation function --
-------------------------------------------------------------------------------
--W: Lexical exceptions — roots the sources conjugate SOUND in a form whose general
-- rule would not. Two rules are overridden here, and both are regular enough that the
-- exceptions have to be listed rather than derived:
--
-- * إعلال — a wāw or yāʾ second radical contracting to a long vowel (أَفَالَ,
-- اِسْتَجَابَ). The listed roots keep the consonant: أَفْيَلَ, اِسْتَجْوَبَ.
-- * إدغام — a geminate root assimilating rad2 into rad3 (عَالَّ, تَعَاثَّ). The listed
-- roots print the فكّ instead: عالَلَ, تَعاثَثَ.
--
-- Keyed by verb form .. ":" .. rad1..rad2..rad3, with the radicals as normalize_root()
-- leaves them (every hamza seat folded to bare ء). The form belongs in the key because
-- soundness is a fact about the lexeme *in that form*, not about the root: جوب is sound
-- in form X (اِسْتَجْوَبَ) and hollow in form I (جَابَ), and the source prints both.
--
-- Upstream's own commentary names several such verbs — izdawaja, istaḥwana, istajwaba,
-- ʕawira — and observes that a caller supplying a *lemma* needs no table, because the
-- lemma spells the soundness out. This repo's callers supply a root and a وزن, which do
-- not, so this is what carries it.
local SOUND_ROOTS = {
-- Form IV keeping a yāʾ middle radical (أَفْيَلَ). Attested verbs, not the صفة مشبهة
-- like أَخْيَف/خَيْفاء; each is sourced. Forms VII/VIII/X of these roots stay hollow.
["IV:خيل"] = true, -- أَخْيَلَ: أخيلت السماءُ تهيأت للمطر — المعجم الوسيط ج1 ص266 (وبه أَخالت أيضًا)
["IV:غيل"] = true, -- أَغْيَلَ: أغيلته فهي مُغْيِل، سقته الغَيْل — لسان العرب ج11 ص111 (وبه أغالت أيضًا)
["IV:حيج"] = true, -- أَحْيَجَ: أحيجت الأرضُ، على خلاف القياس — تاج العروس ج5 ص500
["IV:حين"] = true, -- أَحْيَنَ: أحين القومُ آن لهم أن يبلغوا ما أملوه — المعجم الوسيط ج1 ص212
["IV:خيف"] = true, -- أَخْيَفَ: أخيف الحاجُّ نزلوا خيف منى — كتاب الأفعال لابن القوطية ص35
["IV:ريف"] = true, -- أَرْيَفَ: أريفت الأرضُ إريافًا (خصبت) — المحيط في اللغة ج10 ص256
["IV:زين"] = true, -- أَزْيَنَ: أزينت الأرضُ، حسّنها عشبها — مقاييس اللغة ج3 ص41
-- أنطوان الدحداح، معجم تصريف الأفعال العربية. Each of these is a printed paradigm in
-- its own right under the model number given — the number on the page's own disk — and
-- is in fixtures/ as a whole page rather than as a single cited form.
["IV:ثوب"] = true, -- أَثْوَبَ / يُثْوِبُ، نموذج ٢٢٦ (beside أَثَابَ from the same root)
["IV:نيء"] = true, -- أَنْيَأَ / يُنْيِئُ، نموذج ٢٢٦ (أنيأ اللحمَ، من النِّيء)
["VII:سيء"] = true, -- اِنْسَيَأَ / يَنْسَيِئُ، نموذج ٢٥٦
["VIII:عول"] = true, -- اِعْتَوَلَ / يَعْتَوِلُ، نموذج ٢٦٦
["X:جوب"] = true, -- اِسْتَجْوَبَ / يَسْتَجْوِبُ، نموذج ٢٨٦
["III:علل"] = true, -- عالَلَ / يُعالِلُ، نموذج ٢١١
["III:فرر"] = true, -- فارَرَ / يُفارِرُ، نموذج ٢١١
["VI:عثث"] = true, -- تَعاثَثَ / يَتَعاثَثُ، نموذج ٢٤١
["VI:غضض"] = true, -- تَغاضَضَ / يَتَغاضَضُ، نموذج ٢٤١
}
-- Given form, weakness and radicals, check to make sure the radicals present are allowable for the weakness. Hamzas on
-- alif/wāw/yāʾ seats are never allowed (should always appear as hamza-on-the-line), and various weaknesses have various
-- strictures on allowable consonants.
local function check_radicals(form, weakness, rad1, rad2, rad3, rad4)
local function hamza_check(index, rad)
if rad == HAMZA_ON_ALIF or rad == HAMZA_UNDER_ALIF or
rad == HAMZA_ON_W or rad == HAMZA_ON_Y then
error("Radical " .. index .. " is " .. rad .. " but should be ء (hamza on the line)")
end
end
local function check_waw_ya(index, rad)
if not is_waw_ya(rad) then
error("Radical " .. index .. " is " .. rad .. " but should be و or ي")
end
end
local function check_not_waw_ya(index, rad)
if is_waw_ya(rad) then
error("In a sound verb, radical " .. index .. " should not be و or ي")
end
end
hamza_check(rad1)
hamza_check(rad2)
hamza_check(rad3)
hamza_check(rad4)
if weakness == "assimilated" or weakness == "assimilated+final-weak" then
if rad1 ~= W then
error("Radical 1 is " .. rad1 .. " but should be و")
end
-- don't check that non-assimilated form I verbs don't have wāw as their
-- first radical because some form-I verbs exist where a first-radical wāw
-- behaves as sound, e.g. wajuha yawjuhu "to be distinguished".
end
if weakness == "final-weak" or weakness == "assimilated+final-weak" then
if rad4 then
check_waw_ya(4, rad4)
else
check_waw_ya(3, rad3)
end
elseif vform_supports_final_weak(form) then
-- non-final-weak verbs cannot have weak final radical if there's a corresponding
-- final-weak verb category. I think this is safe. We may have problems with
-- ḥayya/ḥayiya yaḥyā if we treat it as a geminate verb.
if rad4 then
check_not_waw_ya(4, rad4)
else
check_not_waw_ya(3, rad3)
end
end
if weakness == "hollow" then
check_waw_ya(2, rad2)
-- don't check that non-hollow verbs in forms that support hollow verbs
-- don't have wāw or yāʾ as their second radical because some verbs exist
-- where a middle-radical wāw/yāʾ behaves as sound, e.g. form-VIII izdawaja
-- "to be in pairs".
end
if weakness == "geminate" then
if rad4 then
error("Internal error: No geminate quadrilaterals, should not be seen")
end
if rad2 ~= rad3 then
error("Weakness is geminate; radical 3 is " .. rad3 .. " but should be same as radical 2 " .. rad2)
end
elseif vform_supports_geminate(form) then
-- non-geminate verbs cannot have second and third radical same if there's
-- a corresponding geminate verb category. I think this is safe. We
-- don't fuss over double wāw or double yāʾ because this could legitimately
-- be a final-weak verb with middle wāw/yāʾ, treated as sound.
if rad4 then
error("Internal error: No quadrilaterals should support geminate verbs")
end
if rad2 == rad3 and not is_waw_ya(rad2) and not SOUND_ROOTS[form .. ":" .. rad1 .. rad2 .. rad3] then
error("Weakness is '" .. weakness .. "'; radical 2 and 3 are same at " .. rad2 .. " but should not be; consider making weakness 'geminate'")
end
end
end
-- array of substitutions; each element is a 2-entry array FROM, TO; do it
-- this way so the concatenations only get evaluated once
local postprocess_subs = {
-- reorder short-vowel + shadda -> shadda + short-vowel for easier processing
{"(" .. AIU .. ")" .. SH, SH .. "%1"},
----------same letter separated by sukūn should instead use shadda---------
------------happens e.g. in kun-nā "we were".-----------------
{"(.)" .. SK .. "%1", "%1" .. SH},
---------------------------- assimilated verbs ----------------------------
-- iw, iy -> ī (assimilated verbs)
{I .. W .. SK, II},
{I .. Y .. SK, II},
-- uw, uy -> ū (assimilated verbs)
{U .. W .. SK, UU},
{U .. Y .. SK, UU},
-------------- final -yā uses tall alif not alif maqṣūra ------------------
{"(" .. Y .. SH .. "?" .. A .. ")" .. AMAQ, "%1" .. ALIF},
----------------------- handle hamza assimilation -------------------------
-- initial hamza + short-vowel + hamza + sukūn -> hamza + long vowel
{HAMZA .. A .. HAMZA .. SK, HAMZA .. A .. ALIF},
{HAMZA .. I .. HAMZA .. SK, HAMZA .. I .. Y},
{HAMZA .. U .. HAMZA .. SK, HAMZA .. U .. W}
}
local postprocess_tr_subs = {
{"ī([" .. vowels .. "y*])", "iy%1"},
{"ū([" .. vowels .. "w*])", "uw%1"},
{"(.)%*", "%1%1"}, -- implement shadda
---------------------------- assimilated verbs ----------------------------
-- iw, iy -> ī (assimilated verbs)
{"iw([^" .. vowels .. "w])", "ī%1"},
{"iy([^" .. vowels .. "y])", "ī%1"},
-- uw, uy -> ū (assimilated verbs)
{"uw([^" .. vowels .. "w])", "ū%1"},
{"uy([^" .. vowels .. "y])", "ū%1"},
----------------------- handle hamza assimilation -------------------------
-- initial hamza + short-vowel + hamza + sukūn -> hamza + long vowel
{"ʔaʔ(" .. NV .. ")", "ʔā%1"},
{"ʔiʔ(" .. NV .. ")", "ʔī%1"},
{"ʔuʔ(" .. NV .. ")", "ʔū%1"},
}
-- Post-process verb parts to eliminate phonological anomalies. Many of the changes, particularly the tricky ones,
-- involve converting hamza to have the proper seat. The rules for this are complicated and are documented on the
-- [[w:Hamza]] Wikipedia page. In some cases there are alternatives allowed, and we handle them below by returning
-- multiple possibilities.
--
-- ORTHOGRAPHIC EXEMPTIONS (`orth`, set on `base` by the code that knows the fact)
--
-- postprocess_subs above and ar_utilities.process_hamza apply general Arabic orthography
-- to a finished word. A handful of the reference's verb spellings are decisions neither
-- pass can make, because what settles them is not in the string: that a hamza is a
-- *radical*, that a short vowel is the stem's rather than iʿrāb, that a verb is form VIII
-- rather than form I. Each of the three has both halves in the corpus. Form I أَتَى and
-- form VIII اِئْتَمَنَ reach this function's 1s مضارع as the same ءَ + ءْ + ت, and the book
-- prints آتِي for the one and أَأْتَمِنُ for the other (#14). شَأَى's imperative اُشْؤُ and
-- جَرُؤَ's past both end in hamza + a short vowel, and only the first of the two vowels
-- belongs to the stem (#12).
--
-- module/ar-utilities.lua is byte-identical to module/vendor/ar-utilities.lua, and its
-- other callers are on-wiki nominal templates that cannot be regression-tested from this
-- repo, so none of this is fixed by editing it. Each case is instead handled on the
-- caller's side of the shared passes, in one of three ways:
--
-- * park the sequence on a placeholder so a shared rule cannot see it, and restore it
-- afterwards -- #10's original mechanism, now also #14's;
-- * add a spelling beside whatever the shared code returns, because the reference
-- attests both and this module already carries alternatives elsewhere -- #16, #17; or
-- * rewrite the sequence, either before the shared pass so its rule never matches
-- (#12's past clause writes the ā as an ألف مقصورة, which the madda rule does not
-- look for) or after it, where the shared code has made a decision the caller's fact
-- overrides (#12's seating clause, #18's).
--
-- Adding one is three things: a key in `base.orth` set by the builder that knows the
-- fact, a clause here naming the finding, and the XFAIL entries in tests/run.lua deleted
-- in the same commit.
--
-- Three of the clauses below are unconditional, and deliberately so: they repair a
-- spelling the shared code produces that Arabic does not use (#18), restore one it
-- discards (#17), or extend one of its rules to a seat it never reaches (#15). None of
-- the three needs a fact from the caller -- only a place to live that is not the shared
-- file.
local function postprocess_term(term, orth)
if term == "?" then
return "?"
end
orth = orth or {}
-- Phase 1: the reductions in postprocess_subs, with the parked exemptions held out
-- across them. `park_w` is a parameter rather than read from `orth` because #16 runs
-- this phase both ways -- see below.
local function reduce(t, park_w)
-- Add BORDER at text boundaries.
t = BORDER .. t .. BORDER
-- #10: a word-initial hamzat wasl + wāw + sukūn is how a form-I mithal that keeps
-- its wāw spells its imperative (اِوْنَ، اِوْجَلْ). The iw -> ī reduction is right
-- everywhere else and cannot simply be dropped -- it is what turns the form VIII
-- mithal past اِوْتَعَدَ into اِيتَعَدَ, in the same word-initial position, so position
-- alone doesn't separate the two cases.
if park_w then
t = rsub(t, BORDER .. ALIF .. I .. W .. SK, BORDER .. ALIF .. I .. KEEP_W_PH .. SK)
end
-- #14: the reference spells the 1s مضارع of a hamza-initial form VIII analytically,
-- أَأْتَمِنُ -- the prefix hamza, then the quiescent radical hamza on its own seat --
-- where the أَ + أْ -> آ contraction below and the alif-madda rule in process_hamza
-- between them return آتَمِنُ. Form I of a hamza-initial root arrives here with the
-- identical sequence and *is* printed contracted (آكُلُ، آخُذُ، آتِي), so the string
-- cannot decide this and the flag does.
if orth.analytic_hamza then
t = rsub(t, BORDER .. HAMZA .. A .. HAMZA .. SK,
BORDER .. HAMZA .. A .. KEEP_HAMZA_PH .. SK)
end
-- Do the main post-processing, based on the pattern substitutions in postprocess_subs.
for _, sub in ipairs(postprocess_subs) do
t = rsub(t, sub[1], sub[2])
end
-- #12, the past half: a form-I final-weak verb on a wāw rad3 builds its past 3ms ā
-- as a real alif (دَعَا), and after a hamza rad2 that puts hamza-on-alif + fatḥa +
-- alif in front of process_hamza's madda rule (أَا -> آ), which swallows the seat:
-- شَأَى comes out شَآ. The rule itself is right -- it is what gives قَرَأَ its dual قَرَآ --
-- and it keys on ALIF, not on AMAQ, which is why the module already gets رَأَى and
-- نَأَى right: a yāʾ rad3 never produces the second alif. So the ā is written as an
-- ألف مقصورة here instead, which sidesteps the madda rule rather than suppressing
-- it. Only the past 3ms of an -aw verb reaches this sequence; every derived form
-- already ends its past 3ms in AMAQ.
if orth.hamza_rad2_final_weak then
t = rsub(t, HAMZA .. A .. ALIF .. BORDER, HAMZA .. A .. AMAQ .. BORDER)
end
t = t:gsub(KEEP_W_PH, W)
-- Restored as a plain hamza, not a seat: the seating pass below still has to place it,
-- and gets it right (a quiescent medial hamza after a fatḥa takes the alif).
t = t:gsub(KEEP_HAMZA_PH, HAMZA)
return (t:gsub(BORDER, ""))
end
-- Phase 2: hamza seats. Returns the list of spellings for one reduced term.
local function seat(t)
if not rfind(t, HAMZA) then
return { t }
end
-- #17: after a long ū, process_hamza treats و + ؤُ + و as having no acceptable
-- original spelling and returns only its two alternatives (ئُو، ءُو) -- while the
-- same function keeps the original beside the alternative after a long ā, which is
-- what gives سَاؤُوا. The reference prints the wāw seat after a long ū throughout
-- (يَسُوؤُونَ، تَسُوؤُونَ، سُوؤُوا, against its own تَسُوئِينَ / سُوئِي for the kasra: the
-- seat follows the hamza's own vowel). So the discarded spelling is added back
-- here, after theirs rather than instead of them -- the same order the long-ā
-- branch of that function already uses.
local waw_seat
if rfind(t, W .. HAMZA .. U .. W) then
local parked = t:gsub(W .. HAMZA .. U .. W, W .. WAW_SEAT_PH .. U .. W)
waw_seat = ar_utilities.process_hamza(parked:gsub(HAMZA, HAMZA_PH))[1]
waw_seat = waw_seat:gsub(WAW_SEAT_PH, HAMZA_ON_W)
end
local out = ar_utilities.process_hamza(t:gsub(HAMZA, HAMZA_PH))
if waw_seat then
out[#out + 1] = waw_seat
end
-- #12, the imperative/jussive half: apocopation strands the radical hamza at the
-- end of the word, where process_hamza takes its seat from the *preceding* letter's
-- vowel and, finding a sukūn, drops it on the line -- اُشْءُ, أَفْءِ. That rule is right
-- for a hamza whose own vowel is iʿrāb (جُزْء), and cannot be made position-sensitive
-- inside the shared file: the fatḥa of جَرُؤَ is the ماضٍ ending and the ḍamma before
-- it rightly wins the seat. Here the short vowel left after rad3 goes is the stem's
-- own, which is the fact this flag carries. The reference seats it: اُشْؤُ (p160, شأو,
-- form I) and أَفْإِ (p300, فأو, form IV) -- two roots, two measures, two pages, and
-- the two vowels between them.
--
-- The seat is the wāw for a ḍamma and the alif otherwise; #18's substitution below
-- then writes the alif's hamza underneath when the vowel is a kasra, which is how
-- the alif branch comes out as إ. That is not a third rule invented here: the same
-- إ is what p368's اِرْتَإِ and p182's imperative إ already print, and what the module
-- already produces for both, having reached the alif seat by its own route (a
-- preceding fatḥa, and word-initial position). Only p300 needed the seat itself.
--
-- Gated on a preceding sukūn, which is the whole of what the two pages attest. The
-- hamza after a *long* vowel is left alone (وأي's passive jussive تُوءَ), where the
-- shared code also leaves it on the line and no page here prints the slot; and the
-- pattern wants the vowel directly after the hamza, so a šadda'd seat (p271's رَأِّ)
-- is not matched, the same gate #18 gets for free.
if orth.hamza_rad2_final_weak then
for i, v in ipairs(out) do
v = rsub(BORDER .. v .. BORDER, SK .. HAMZA .. "(" .. AIU .. ")" .. BORDER,
function(vowel)
return SK .. (vowel == U and HAMZA_ON_W or HAMZA_ON_ALIF) .. vowel .. BORDER
end)
out[i] = (v:gsub(BORDER, ""))
end
end
-- #15: a hamza left on the line, carrying a fatḥa, with an alif after it, is
-- printed as a madda -- but not when that would end the word directly after an
-- alif. The reference sets يَداآنِ / تَداآنِ (p201, دوء), يَهاآنِ / تَهاآنِ (p242,
-- هوء) and يَسُوآنِ / تَسُوآنِ (p157, سوء) for the مضارع duals, and سُوآ for p157's
-- imperative dual, while the same three verbs print their *word-final* duals
-- داءا / هاءا / سَاءَا with the hamza on the line -- so the exception is carried by
-- the preceding alif, not by the position alone: سُوآ is word-final too and does
-- contract, after a long ū. Ten cells, three roots, three pages, and the blocked
-- case attested on all three. process_hamza applies this rule only to a hamza it
-- has seated on an alif (which is what gives تَدَرْبَآ); after a long vowel it
-- leaves the seat on the line and the rule never fires, so the extension is here.
--
-- Confined to a hamza after a *long vowel*, which is the whole of what those three
-- pages attest. Written without that gate it also contracts the فَعْلان participle
-- سَوْءَان to سَوْآن -- a hamza after the sukūn of a diphthong, not after a long vowel,
-- in a slot no fixture covers and no page here prints. The mater carries no sukūn
-- in a long vowel as this module builds one, so requiring the two to be adjacent
-- is the gate.
for i, v in ipairs(out) do
v = BORDER .. v .. BORDER
v = rsub(v, ALIF .. HAMZA .. A .. ALIF .. BORDER, ALIF .. NO_MADDA_PH .. A .. ALIF .. BORDER)
v = rsub(v, "([" .. AMAD .. ALIF .. W .. Y .. "])" .. HAMZA .. A .. ALIF, "%1" .. AMAD)
v = v:gsub(NO_MADDA_PH, HAMZA)
out[i] = (v:gsub(BORDER, ""))
end
-- #18: a hamza seated on an alif and carrying a bare kasra is written *below* the
-- alif. The seat is chosen from the preceding letter's vowel, which is right when
-- the hamza's own vowel is iʿrāb (مَلْجَأٍ) and is why the rule lives in the shared
-- code; in a verb there is no iʿrāb, and the kasra that follows an apocopated
-- radical hamza is the stem's own -- so اِرْتَأَى's jussive is اِرْتَإِ.
--
-- Not when the alif also carries a šadda, and the corpus is what says so: رَأَّى
-- (p271, form II of the *same* root رأو as p368's اِرْتَأَى) prints its apocopated
-- imperative رَأِّ, hamza above, where the doubled radical puts a šadda on the seat.
-- Written unconditionally first, this rule broke that cell and nothing else in 379
-- paradigms, which is both the counter-example and its own control: one root, two
-- forms, two pages, and the presence of the šadda the only difference between them.
-- No test for the šadda is needed: postprocess_subs has already reordered it in
-- front of the vowel, so أ + šadda + kasra simply isn't the sequence below.
for i, v in ipairs(out) do
out[i] = v:gsub(HAMZA_ON_ALIF .. I, HAMZA_UNDER_ALIF .. I)
end
return out
end
local out = seat(reduce(term, orth.keep_initial_w))
-- #16: a retained-wāw مثال reduces اِوْ to اِيْ in the imperative on p240 (اِيْجَعْ, all
-- five cells) and does not on p247 (اِوْنَ) -- the book carries both spellings and
-- grammar allows both, so the module carries both too, the way it already carries
-- سَائُوا | سَاؤُوا. #10's park is still right; what was missing is the second form
-- beside the first. Widening loose() instead would retire the suite's only check on
-- the mithal-wāwī / mithal-yāʾī imperative distinction, which is why this is here.
if orth.keep_initial_w then
for _, reduced in ipairs(seat(reduce(term, false))) do
local seen = false
for _, v in ipairs(out) do
if v == reduced then
seen = true
break
end
end
if not seen then
out[#out + 1] = reduced
end
end
end
if #out == 1 then
return out[1]
end
return out
end
local function postprocess_translit(translit)
if translit == "?" then
return "?"
end
-- Add BORDER at text boundaries.
translit = BORDER .. translit .. BORDER
-- Do the main post-processing, based on the pattern substitutions in postprocess_tr_subs.
for _, sub in ipairs(postprocess_tr_subs) do
translit = rsub(translit, sub[1], sub[2])
end
translit = translit:gsub(BORDER, "")
return translit
end
-- #13: نقل الحركة + إدغام in a لفيف مقرون verb outside form I. Where the paradigm brings
-- two vowelled yāʾs together on a *quiescent* radical, the reference moves the first
-- yāʾ's vowel back onto that radical and geminates the pair: أَحْيَيَا -> أَحَيَّا,
-- يُحْيِيَانِ / تُحْيِيَانِ -> يُحِيَّانِ / تُحِيَّانِ, أَحْيِيَا -> أَحِيَّا (p302, form IV on حيي),
-- and the same five slots of اِسْتَحْيَا (p389, form X on the same root).
--
-- Only the نقل is done here. The إدغام is postprocess_subs' own "same letter separated
-- by a sukūn -> šadda" rule, which already puts the šadda in front of the vowel the way
-- the rest of the module writes it -- so this has to run *before* postprocess_forms(),
-- and does, from conjugate_verb().
--
-- The gate is that sukūn, and the reference's pages calibrate it from both sides:
-- * a *long* vowel in front of the first yāʾ can host nothing, and عايا (p287, form
-- III on عيي) prints يُعايِيانِ، تُعايِيانِ and عايِيا with both yāʾs. The pattern below
-- does not match them because there is no consonant + sukūn there to match;
-- * the second yāʾ has to carry a short vowel of its own. The control is in the same
-- columns of the pages that do contract: يُحْيِي (3ms), يُحْيِينَ (3fp) and تُحْيِينَ
-- (2fs), where it is the mater of a long ī, are printed uncontracted, and the
-- pattern does not match those either.
-- Between them the two conditions pick out exactly the five slots of p302 and p389 that
-- contract, against the twenty-odd cells of the same two paradigms that do not.
--
-- Form I is excluded, and by attestation rather than by phonology: حَيِيَ (p229, 017_159)
-- and عَيِيَ (p250, 238_159) put the identical consonant + sukūn + yāʾ sequence in their
-- مضارع and imperative duals and both print them uncontracted -- يَحْيَيانِ، اِحْيَيا،
-- يَعْيَيانِ، اِعْيَيا. Form I has its own version of this alternation, حَيَّ beside حَيِيَ,
-- and it is a different mechanism: the vowel is dropped rather than moved, which is why
-- make_form_i_hayy_verb() spells it out as a stem pair instead.
--
-- Added beside the uncontracted form and never instead of it: both spellings are
-- current, and form X already carries the two the module builds from its own stems
-- (اِسْتَحْيَيَا | اِسْتَحَيَا), so this is a third entry in a slot that already had a choice.
local NAQL_FROM = "(.)" .. SK .. Y .. "(" .. AIU .. ")" .. Y .. "(" .. AIU .. ")"
local NAQL_TO = "%1%2" .. Y .. SK .. Y .. "%3"
local function add_naql_idgham_forms(base)
-- "none" is a user-supplied paradigm with no verb form to reason from; form I is
-- excluded on the evidence above.
if base.verb_form == "I" or base.verb_form == "none" then
return
end
-- Collected first and inserted afterwards: inserting into base.forms while iterating
-- over it would let a contracted form be re-read as a source in the same pass.
local additions
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
local naql, changed = rsubb(form.form, NAQL_FROM, NAQL_TO)
if changed then
additions = additions or {}
additions[#additions + 1] = {slot, {form = naql, footnotes = form.footnotes}}
end
end
end
if additions then
for _, addition in ipairs(additions) do
iut.insert_form(base.forms, addition[1], addition[2])
end
end
end
local function postprocess_forms(base)
local converted_values = {}
for slot, forms in pairs(base.forms) do
local need_dedup = false
for i, form in ipairs(forms) do
local term = postprocess_term(form.form, base.orth)
local translit = form.translit and postprocess_translit(form.translit) or nil
if term ~= form.form or translit ~= form.translit then
need_dedup = true
end
converted_values[i] = {term, translit}
end
if need_dedup then
local temp_dedup = {}
for i = 1, #forms do
local new_term, new_translit = unpack(converted_values[i])
if type(new_term) == "table" then
for _, nt in ipairs(new_term) do
local new_formobj = {
form = nt,
translit = new_translit,
footnotes = forms[i].footnotes,
}
iut.insert_form(temp_dedup, "temp", new_formobj)
end
else
local new_formobj = {
form = new_term,
translit = new_translit,
footnotes = forms[i].footnotes,
}
iut.insert_form(temp_dedup, "temp", new_formobj)
end
end
base.forms[slot] = temp_dedup.temp
end
end
end
local function process_slot_overrides(base)
for slot, forms in pairs(base.slot_overrides) do
local existing_values = base.forms[slot]
base.forms[slot] = nil
for _, form in ipairs(forms) do
-- + in active participle for form I requests slot ap1
if form.form == "+" and (base.verb_form ~= "I" or slot ~= "ap") then
if not existing_values then
error(("Slot '%s' requested the default value but no such value available"):format(slot))
end
-- We maintain an invariant that no two slots share a form object (although they may share the footnote
-- lists inside the form objects). However, there is no need to copy the form objects here because there
-- is a one-to-one correspondence between slots and slot overrides, i.e. you can't have a default value
-- go into two slots.
insert_form_or_forms(base, slot, existing_values, "allow overrides", form.uncertain)
elseif default_indicator_to_active_participle_slot[form.form] then
if form.form == "++" then
if slot ~= "vn" and slot ~= "ap" and slot ~= "pp" then
error(("Secondary default value request '++' only applicable to verbal nouns and pariciples, but found in slot '%s'"):
format(slot))
end
else
if slot ~= "ap" then
error(("Secondary default value request '%s' only applicable to active pariciples, but found in slot '%s'"):
format(form.form, slot))
end
end
local secondary_default_slot =
slot == "vn" and "vn2" or slot == "pp" and "pp2" or
default_indicator_to_active_participle_slot[form.form]
local existing_values = base.forms[secondary_default_slot]
if not existing_values then
error(("Slot '%s' requested a secondary default value using '%s' but no such value available"):
format(slot, form.form))
end
-- See comment above about the lack of need to copy the form objects.
insert_form_or_forms(base, slot, existing_values, "allow overrides", form.uncertain)
-- To make sure there aren't shared form objects.
base.forms[secondary_default_slot] = nil
else
insert_form_or_forms(base, slot, form, "allow overrides", form.uncertain)
end
end
end
-- Now, for non-stative form-I verbs, fill the active participle slot from ap1 unless it should be missing (e.g.
-- passive-only or user specified 'ap:-').
if base.verb_form == "I" and not base.forms.ap and base.forms.ap1 and not skip_slot(base, "ap") then
local saw_non_stative = false
for _, vowel_spec in ipairs(base.conj_vowels) do
if req(vowel_spec.past, A) then
saw_non_stative = true
break
end
end
if saw_non_stative then
base.forms.ap = base.forms.ap1
-- To make sure there aren't shared form objects.
base.forms.ap1 = nil
end
end
end
local function handle_lemma_linked(base)
-- Compute linked versions of potential lemma slots, for use in {{ar-verb}}. We substitute the original lemma
-- (before removing links) for forms that are the same as the lemma, if the original lemma has links.
for _, slot in ipairs(export.potential_lemma_slots) do
if base.forms[slot] then
insert_form_or_forms(base, slot .. "_linked", iut.map_forms(base.forms[slot], function(form)
if form == base.lemma and rfind(base.linked_lemma, "%[%[") then
return base.linked_lemma
else
return form
end
end))
end
end
end
-- Process specs given by the user using 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'.
local function process_addnote_specs(base)
for _, spec in ipairs(base.addnote_specs) do
for _, slot_spec in ipairs(spec.slot_specs) do
slot_spec = "^" .. slot_spec .. "$"
for slot, forms in pairs(base.forms) do
if rfind(slot, slot_spec) then
-- To save on memory, side-effect the existing forms.
for _, form in ipairs(forms) do
form.footnotes = iut.combine_footnotes(form.footnotes, spec.footnotes)
end
end
end
end
end
end
local function add_missing_links_to_forms(base)
-- Any forms without links should get them now. Redundant ones will be stripped later.
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
form.form = "[[" .. form.form .. "]]"
end
end
end
end
local function conjugate_verb(base)
construct_stems(base)
-- Orthographic exemptions the shared hamza/reduction passes can't decide for
-- themselves; see the block comment on postprocess_term(). Most are set by the
-- stem builder that knows the fact, so this table has to exist before dispatch.
base.orth = base.orth or {}
for _, vowel_spec in ipairs(base.conj_vowels) do
-- Reconstruct conjugation type from verb form and (possibly inferred) weakness.
conj_type = base.verb_form .. "-" .. vowel_spec.weakness
-- #14: a hamza-initial form VIII spells its 1s مضارع analytically (أَأْتَمِنُ), where
-- form I of a hamza-initial root contracts to a madda (آتِي) from the identical
-- sequence. Declared here rather than in the four VIII builders because it holds
-- for all of them and depends on nothing else they compute.
if base.verb_form == "VIII" and vowel_spec.rad1 and rfind(rget(vowel_spec.rad1) or "", HAMZA_ANY) then
base.orth.analytic_hamza = true
end
-- #12: a final-weak verb whose rad2 is a hamza. Two of the shared passes read that
-- radical as an ordinary word-final hamza and get it wrong in the two slots where
-- rad3 stops being a consonant -- see the two clauses in postprocess_term(). Like
-- #14 this is declared here rather than in a builder: it holds for every form the
-- root can take (شأو, فأو, رأو, وأي in the corpus, forms I, II, IV and VIII) and
-- depends on nothing else the builders compute.
if rfind(vowel_spec.weakness or "", "final%-weak") and vowel_spec.rad2 and
rfind(rget(vowel_spec.rad2) or "", HAMZA_ANY) then
base.orth.hamza_rad2_final_weak = true
end
-- Check that the conjugation type is recognized.
if not conjugations[conj_type] then
error("Unknown conjugation type '" .. conj_type .. "'")
end
-- The way the conjugation functions work is they always add entries to the appropriate parts of the paradigm
-- (each of which is an array), rather than setting the values. This makes it possible to call more than one
-- conjugation function and essentially get a paradigm of the "either A or B" kind. Doing this may insert
-- duplicate entries into a particular paradigm part, but this is not a problem because we check for duplicate
-- entries when adding them, and don't insert in that case.
conjugations[conj_type](base, vowel_spec)
end
-- #13: before postprocess_forms(), which supplies the إدغام half of the alternation.
add_naql_idgham_forms(base)
postprocess_forms(base)
process_slot_overrides(base)
-- This should happen before add_missing_links_to_forms() so that the comparison `form == base.lemma` in
-- handle_lemma_linked() works correctly and compares unlinked forms to unlinked forms.
handle_lemma_linked(base)
process_addnote_specs(base)
if not base.alternant_multiword_spec.args.noautolinkverb then
add_missing_links_to_forms(base)
end
end
local function parse_indicator_spec(angle_bracket_spec)
-- Store the original angle bracket spec so we can reconstruct the overall conj spec with the lemma(s) in them.
local base = {
angle_bracket_spec = angle_bracket_spec,
conj_vowels = {},
root_consonants = {},
user_stem_overrides = {},
user_slot_overrides = {},
slot_explicitly_missing = {},
slot_uncertain = {},
slot_override_uses_default = {},
addnote_specs = {},
}
local function parse_err(msg)
error(msg .. ": " .. angle_bracket_spec)
end
local function fetch_footnotes(separated_group)
local footnotes
for j = 2, #separated_group - 1, 2 do
if separated_group[j + 1] ~= "" then
parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'")
end
if not footnotes then
footnotes = {}
end
table.insert(footnotes, separated_group[j])
end
return footnotes
end
local inside = angle_bracket_spec:match("^<(.*)>$")
assert(inside)
local segments = put.parse_multi_delimiter_balanced_segment_run(inside, {{"[", "]"}, {"<", ">"}})
local dot_separated_groups = put.split_alternating_runs_and_strip_spaces(segments, "%.")
-- The first dot-separated element must specify the verb form, e.g. IV or IIq. If the form is I, it needs to include
-- the the past and non-past vowels, e.g. I/a~u for kataba ~ yaktubu. More than one vowel can be given,
-- comma-separated, and more than one past~non-past pair can be given, slash-separated, e.g. I/a,u~u/i~a for form I
-- كمل, which can be conjugated as kamala/kamula ~ yakmulu or kamila ~ yakmalu. An individual vowel spec must be one
-- of a, i or u and in general (a) at least one past~non-past pair most be given, and (b) both past and non-past
-- vowels must be given even though sometimes the vowel can be determined from the unvocalized form. An exception is
-- passive-only verbs, where the vowels can't in general be determined (except indirectly in some cases by looking
-- at an associated non-passive verb); in that case, the vowel~vowel spec can left out.
local slash_separated_groups = put.split_alternating_runs_and_strip_spaces(dot_separated_groups[1], "/")
local form_spec = slash_separated_groups[1]
base.form_footnotes = fetch_footnotes(form_spec)
if form_spec[1] == "" then
parse_err("Missing verb form")
end
if not allowed_vforms_with_weakness_set[form_spec[1]] then
parse_err(("Unrecognized verb form '%s', should be one of %s"):format(
form_spec[1], list_to_text(allowed_vforms, nil, " or ")))
end
if form_spec[1]:find("%-") then
base.verb_form, base.explicit_weakness = form_spec[1]:match("^(.-)%-(.*)$")
else
base.verb_form = form_spec[1]
end
if #slash_separated_groups > 1 then
if base.verb_form ~= "I" then
parse_err(("Past~non-past vowels can only be specified when verb form is I, but saw form '%s'"):format(
base.verb_form))
end
for i = 2, #slash_separated_groups do
local slash_separated_group = slash_separated_groups[i]
local tilde_separated_groups = put.split_alternating_runs_and_strip_spaces(slash_separated_group, "~")
if #tilde_separated_groups ~= 2 then
parse_err(("Expected two tilde-separated vowel specs: %s"):format(table.concat(slash_separated_group)))
end
local function parse_conj_vowels(tilde_separated_group, vtype)
local conj_vowel_objects = {}
local comma_separated_groups = put.split_alternating_runs_and_strip_spaces(tilde_separated_group, ",")
for _, comma_separated_group in ipairs(comma_separated_groups) do
local conj_vowel = comma_separated_group[1]
if conj_vowel ~= "a" and conj_vowel ~= "i" and conj_vowel ~= "u" then
parse_err(("Expected %s conjugation vowel '%s' to be one of a, i or u in %s"):format(
vtype, conj_vowel, table.concat(slash_separated_group)))
end
conj_vowel = dia[conj_vowel]
local conj_vowel_footnotes = fetch_footnotes(comma_separated_group)
-- Try to use strings when possible as it makes q() significantly more efficient.
if conj_vowel_footnotes then
table.insert(conj_vowel_objects, {form = conj_vowel, footnotes = conj_vowel_footnotes})
else
table.insert(conj_vowel_objects, conj_vowel)
end
end
return conj_vowel_objects
end
local conj_vowel_spec = {
past = parse_conj_vowels(tilde_separated_groups[1], "past"),
nonpast = parse_conj_vowels(tilde_separated_groups[2], "non-past"),
}
table.insert(base.conj_vowels, conj_vowel_spec)
end
end
for i = 2, #dot_separated_groups do
local dot_separated_group = dot_separated_groups[i]
local first_element = dot_separated_group[1]
if first_element == "addnote" then
local spec_and_footnotes = fetch_footnotes(dot_separated_group)
if #spec_and_footnotes < 2 then
parse_err("Spec with 'addnote' should be of the form 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'")
end
local slot_spec = table.remove(spec_and_footnotes, 1)
local slot_spec_inside = rmatch(slot_spec, "^%[(.*)%]$")
if not slot_spec_inside then
parse_err("Internal error: slot_spec " .. slot_spec .. " should be surrounded with brackets")
end
local slot_specs = rsplit(slot_spec_inside, ",")
-- FIXME: Here, [[Module:it-verb]] called strip_spaces(). Generally we don't do this. Should we?
table.insert(base.addnote_specs, {slot_specs = slot_specs, footnotes = spec_and_footnotes})
elseif first_element:find("^var:") then
if #dot_separated_group > 1 then
parse_err(("Can't attach footnotes to 'var:' spec '%s'"):format(first_element))
end
base.variant = first_element:match("^var:(.*)$")
elseif first_element:find("^I+V?:") then
local root_cons, root_cons_value = first_element:match("^(I+V?):(.*)$")
local root_index
if root_cons == "I" then
root_index = 1
elseif root_cons == "II" then
root_index = 2
elseif root_cons == "III" then
root_index = 3
elseif root_cons == "IV" then
root_index = 4
if not base.verb_form:find("q$") then
parse_err(("Can't specify root consonant IV for non-quadriliteral verb form '%s': %s"):format(
base.verb_form, first_element))
end
end
local cons, translit = root_cons_value:match("^(.*)//(.*)$")
if not cons then
cons = root_cons_value
end
local root_footnotes = fetch_footnotes(dot_separated_group)
if not translit and not root_footnotes then
base.root_consonants[root_index] = cons
else
base.root_consonants[root_index] = {form = cons, translit = translit, footnotes = root_footnotes}
end
elseif first_element:find("^[a-z][a-z0-9_]*:") then
local slot_or_stem, remainder = first_element:match("^(.-):(.*)$")
dot_separated_group[1] = remainder
local comma_separated_groups = put.split_alternating_runs_and_strip_spaces(dot_separated_group, "[,،]")
if overridable_stems[slot_or_stem] then
if base.user_stem_overrides[slot_or_stem] then
parse_err("Overridable stem '" .. slot_or_stem .. "' specified twice")
end
base.user_stem_overrides[slot_or_stem] = overridable_stems[slot_or_stem](comma_separated_groups,
{prefix = slot_or_stem, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
else -- assume a form override; we validate further later when the possible slots are available
if base.user_slot_overrides[slot_or_stem] then
parse_err("Form override '" .. slot_or_stem .. "' specified twice")
end
base.user_slot_overrides[slot_or_stem] = allow_multiple_values_for_override(comma_separated_groups,
{prefix = slot_or_stem, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes},
"is form override")
end
elseif indicator_flags[first_element] then
if #dot_separated_group > 1 then
parse_err("No footnotes allowed with '" .. first_element .. "' spec")
end
if base[first_element] then
parse_err("Spec '" .. first_element .. "' specified twice")
end
base[first_element] = true
else
local passive, uncertain = first_element:match("^(.*)(%?)$")
passive = passive or first_element
uncertain = not not uncertain
if passive_types[passive] then
if #dot_separated_group > 1 then
parse_err("No footnotes allowed with '" .. passive .. "' spec")
end
if base.passive then
parse_err("Value for passive type specified twice")
end
base.passive = passive
base.passive_uncertain = uncertain
else
parse_err("Unrecognized spec '" .. first_element .. "'")
end
end
end
return base
end
-- Normalize all lemmas, substituting the pagename for blank lemmas and adding links to multiword lemmas.
local function normalize_all_lemmas(alternant_multiword_spec, head)
-- (1) Add links to all before and after text. Remember the original text so we can reconstruct the verb spec later.
if not alternant_multiword_spec.args.noautolinktext then
iut.add_links_to_before_and_after_text(alternant_multiword_spec, "remember original")
end
-- (2) Remove any links from the lemma, but remember the original form so we can use it below in the 'lemma_linked'
-- form.
iut.map_word_specs(alternant_multiword_spec, function(base)
if base.lemma == "" then
base.lemma = head
end
base.user_specified_lemma = base.lemma
base.lemma = m_links.remove_links(base.lemma)
base.user_specified_verb = base.lemma
base.verb = base.user_specified_verb
local linked_lemma
if alternant_multiword_spec.args.noautolinkverb or base.user_specified_lemma:find("%[%[") then
linked_lemma = base.user_specified_lemma
else
-- Add links to the lemma so the user doesn't specifically need to, since we preserve
-- links in multiword lemmas and include links in non-lemma forms rather than allowing
-- the entire form to be a link.
linked_lemma = iut.add_links(base.user_specified_lemma)
end
base.linked_lemma = linked_lemma
end)
end
--W: Lexical exceptions — hollow roots in the Form I فَعُلَ pattern (past~non-past u~u)
-- that keep the middle radical SOUND instead of contracting to a long vowel (هَيُؤَ /
-- يَهْيُؤُ, not هَاءَ / يَهُوءُ). This is not the general rule for u~u hollow verbs --
-- طَالَ / يَطُولُ (ط-و-ل) contracts as normal -- so each entry here is a specific
-- attested exception, not a phonological class.
-- Keyed by rad1..rad2..rad3.
-- Keyed with bare hamza (ء) for rad3, matching normalize_root()'s canonicalization of root radicals
-- (HAMZA_ON_ALIF etc. all fold to HAMZA) -- the raw root "هيأ" normalizes to radicals ه, ي, ء.
local SOUND_FORM_I_UU_ROOTS = {
["هي" .. HAMZA] = true, -- هَيُؤَ ـُ: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان، ط2، 1995، ص203
}
-- Determine weakness from radicals. Used when root given in place of lemma (e.g. for {{ar-verb forms}}).
-- `past_vowel`/`nonpast_vowel`, if given, are the past/non-past vowel of a form-I verb (a string or
-- footnote-bearing form object, per `req()`); they let SOUND_FORM_I_UU_ROOTS single out the specific
-- vowel pattern under which a hollow root is attested as sound, without affecting its other patterns
-- (e.g. a root could still contract normally under a different past~non-past pairing).
local function weakness_from_radicals(form, rad1, rad2, rad3, rad4, past_vowel, nonpast_vowel)
local weakness = nil
local quadlit = form:find("q$")
-- If weakness unspecified, derive from radicals.
if not quadlit then
if is_waw_ya(rad3) and rad1 == W and form == "I" then
weakness = form_i_w_assimilated(past_vowel, nonpast_vowel, rad1, rad2, rad3) and "assimilated+final-weak" or
"final-weak"
elseif is_waw_ya(rad3) and vform_supports_final_weak(form) then
weakness = "final-weak"
elseif rad2 == rad3 and vform_supports_geminate(form) then
-- ...unless the source prints the فكّ rather than the إدغام for this
-- lexeme in this form (عالَلَ, تَعاثَثَ); see SOUND_ROOTS.
weakness = SOUND_ROOTS[form .. ":" .. rad1 .. rad2 .. rad3] and "sound" or "geminate"
elseif is_waw_ya(rad2) and vform_supports_hollow(form) then
--W: Both wāw (و) and yāʾ (ي) in the middle position create hollow verbs, in form I
-- (قَالَ from ق-و-ل, بَاعَ from ب-ي-ع) and in the augmented forms IV, VII, VIII, X
-- (أَتَاسَ from ت-ي-س, أَبَانَ from ب-ي-ن, أَطَاحَ from ط-ي-ح — معجم متن اللغة).
if SOUND_ROOTS[form .. ":" .. rad1 .. rad2 .. rad3] then
-- Lexical exceptions that keep the middle radical sound (أَفْيَلَ,
-- اِسْتَجْوَبَ) instead of contracting it; see SOUND_ROOTS.
weakness = "sound"
elseif form == "I" and past_vowel and nonpast_vowel and req(past_vowel, U) and req(nonpast_vowel, U) and
SOUND_FORM_I_UU_ROOTS[rad1 .. rad2 .. rad3] then
-- Lexical exceptions whose Form I فَعُلَ keeps the middle radical sound (هَيُؤَ); see
-- SOUND_FORM_I_UU_ROOTS. Gated to u~u specifically since that's the attested pattern.
weakness = "sound"
else
weakness = "hollow"
end
elseif rad1 == W and form == "I" then
-- Vowel-conditioned, like the lemma path below: a wāw-initial form-I verb only
-- elides its wāw under a kasra (or lowered-kasra) non-past. Before this, the two
-- inference paths in this module disagreed -- infer_radicals() kept the wāw for
-- i~a and u~u while this one dropped it for every vowel pattern.
weakness = form_i_w_assimilated(past_vowel, nonpast_vowel, rad1, rad2, rad3) and "assimilated" or "sound"
else
weakness = "sound"
end
else
if is_waw_ya(rad4) then
weakness = "final-weak"
else
weakness = "sound"
end
end
return weakness
end
-- Join the infixed tāʔ (ت) to the first radical in form VIII verbs. This may cause assimilation of the tāʔ to the
-- radical or in some cases the radical to the tāʔ. Used when a root is supplied instead of a lemma (which already has
-- the appropriate assimilation in it).
--W: `reduced` is |مدغم=. A hamza first radical assimilates into the infixed tāʾ the
-- same way a wāw does -- اِئْتَحَدَ becomes اِتَّحَدَ, اِئْتَزَرَ becomes اِتَّزَرَ, اِئْتَخَذَ
-- becomes اِتَّخَذَ -- but unlike the wāw it is optional, and this book prints the class
-- both ways: p358's اِئْتَمَنَ and اِئْتَشَرَ unassimilated beside p359's اِتَّحَدَ and
-- اِتَّزَرَ, all four under model 262 (افتعل مهموز الفاء). p359 states the derivation in
-- its own footnotes -- «أصلُ الفعلِ اِئْتَحَدَ» and «أصلُ الفعلِ اِئْتَزَرَ وهوَ الأصحُّ» --
-- so the أصل is the module's default and the assimilation is what the caller asks for.
-- Requested, never inferred from the radical: the same rule |مدغم= follows everywhere
-- else, and the reason p358 does not have to be wrong for p359 to be right.
local function form_viii_join_ta(rad, reduced)
if rad == W or rad == Y or rad == "ت" then return "تّ"
elseif rad == HAMZA and reduced then return "تّ"
elseif rad == "د" then return "دّ"
elseif rad == "ث" then return "ثّ"
elseif rad == "ذ" then return "ذّ"
elseif rad == "ز" then return "زْد"
elseif rad == "ص" then return "صْط"
elseif rad == "ض" then return "ضْط"
elseif rad == "ط" then return "طّ"
elseif rad == "ظ" then return "ظّ"
else return rad .. SK .. "ت"
end
end
local function detect_indicator_spec(base)
base.forms = {}
base.stem_overrides = {}
base.slot_overrides = {}
if not base.conj_vowels[1] then
-- These may be converted to inferred vowels. If not, we throw an error if form I and not passive-only.
base.conj_vowels = {{
past = "-",
nonpast = "-",
}}
else
-- If multiple vowels specified for a given vowel type (e.g. a,u~u), expand so that each spec in
local expansion = {}
for _, spec in ipairs(base.conj_vowels) do
for _, past in ipairs(spec.past) do
for _, nonpast in ipairs(spec.nonpast) do
table.insert(expansion, {past = past, nonpast = nonpast})
end
end
end
base.conj_vowels = expansion
end
local vform = base.verb_form
-- check for quadriliteral form (Iq, IIq, IIIq, IVq)
base.quadlit = not not vform:find("q$")
-- Infer radicals as necessary. We infer a separate set of radicals for each past~non-past vowel combination because
-- they may be different (particularly with form-I hollow verbs).
for _, vowel_spec in ipairs(base.conj_vowels) do
-- NOTE: rad1, rad2, etc. refer to user-specified radicals, which are formobj tables that optionally specify an
-- explicit manual translit, whereas ir1, ir2, etc. refer to inferred radicals, which are either strings or
-- lists of possible radicals.
local rads = base.root_consonants
local rad1, rad2, rad3, rad4 = rads[1], rads[2], rads[3], rads[4]
-- Default any unspecified radicals to radicals determined from the headword. The returned radicals may be
-- lists of possible radicals, where the first radical should be chosen if the user didn't explicitly specify a
-- radical but all are allowed. If `ambig = true` is set in the table, the radical is considered ambiguous and
-- categories won't be created for weak radicals.
local weakness, ir1, ir2, ir3, ir4
if vform ~= "none" then
ir1, ir2, ir3 = rmatch(base.lemma, "^([^_])_([^_])_([^_])$")
if not ir1 then
ir1, ir2, ir3, ir4 = rmatch(base.lemma, "^([^_])_([^_])_([^_])_([^_])$")
end
if ir1 then
-- root given instead of lemma
weakness = weakness_from_radicals(vform, ir1, ir2, ir3, ir4, vowel_spec.past, vowel_spec.nonpast)
if vform == "VIII" then
vowel_spec.form_viii_assim = form_viii_join_ta(ir1, base.reduced)
end
else
local ret = export.infer_radicals {
headword = base.lemma,
vform = vform,
passive = base.passive,
past_vowel = vowel_spec.past,
nonpast_vowel = vowel_spec.nonpast,
is_reduced = base.reduced,
}
weakness, ir1, ir2, ir3, ir4 = ret.weakness, ret.rad1, ret.rad2, ret.rad3, ret.rad4
vowel_spec.form_viii_assim = ret.form_viii_assim
vowel_spec.past = ret.past_vowel
vowel_spec.nonpast = ret.nonpast_vowel
vowel_spec.variant = base.variant or ret.variant
end
end
-- For most ambiguous radicals, the choice of radical doesn't matter because it doesn't affect the conjugation
-- one way or another. For form I hollow verbs, however, it definitely does. In fact, the choice of radical is
-- critical even beyond the past and non-past vowels because it affects the form of the passive participle. So,
-- check for this and signal an error if the radical could not be inferred and is not given explicitly.
if vform == "I" and type(ir2) == "table" and ir2.need_radical and not rad2 then
error("Unable to guess middle radical of hollow form I verb; need to specify radical explicitly")
end
if vform == "I" and not is_passive_only(base.passive) and (
rget(vowel_spec.past) == "-" or rget(vowel_spec.nonpast) == "-") then
error("Form I verb that isn't passive-only or final-weak must have past~non-past vowels specified")
end
-- Convert ambiguous radicals.
local function regularize_inferred_radical(rad)
if type(rad) == "table" then
if rad.ambig then
return {form = rad[1], ambig = true}
else
return rad[1]
end
else
return rad
end
end
-- Return the appropriate radical at index `index` (1 through 4), based either on the user-specified radical
-- `user_radical` or (if unspecified) `inferred_radical`, inferred from the unvocalized lemma. Two values are
-- returned, the "regularized" version of the radical (where ambiguous inferred radicals are converted to their
-- most likely actual radical) and the non-regularized version. The returned values are form objects rather than
-- strings.
local function fetch_radical(user_radical, inferred_radical, index)
if not user_radical then
return regularize_inferred_radical(inferred_radical), inferred_radical
else
local rad_formval = rget(user_radical)
if type(inferred_radical) == "table" then
local allowed_radical_set = m_table.listToSet(inferred_radical)
if not allowed_radical_set[rad_formval] then
error(("For lemma %s, radical %s ambiguously inferred as %s but user radical incompatibly given as %s"):
format(base.lemma, index,
list_to_text(inferred_radical, nil, " or "), rad_formval))
end
elseif rad_formval ~= inferred_radical then
error(("For lemma %s, radical %s inferred as %s but user radical incompatibly given as %s"):
format(base.lemma, index, inferred_radical, rad_formval))
end
return user_radical, user_radical
end
end
if vform ~= "none" then
vowel_spec.rad1, vowel_spec.unreg_rad1 = fetch_radical(rad1, ir1, 1)
vowel_spec.rad2, vowel_spec.unreg_rad2 = fetch_radical(rad2, ir2, 2)
vowel_spec.rad3, vowel_spec.unreg_rad3 = fetch_radical(rad3, ir3, 3)
if base.quadlit then
vowel_spec.rad4, vowel_spec.unreg_rad4 = fetch_radical(rad4, ir4, 4)
end
end
if vform == "I" then
-- If explicit weakness given using 'I-sound' or 'I-assimilated', we may need to adjust the inferred weakness.
if base.explicit_weakness == "sound" then
if weakness == "assimilated" then
weakness = "sound"
elseif weakness == "assimilated+final-weak" then
-- Verbs like waniya~yawnā "to be faint; to languish" (although the defaults should handle this
-- correctly)
weakness = "final-weak"
else
error(("Can't specify form 'I-sound' when inferred weakness is '%s' for lemma %s"):format(
weakness, base.lemma))
end
elseif base.explicit_weakness == "assimilated" then
if weakness == "sound" then
-- i~a verbs like waṭiʔa~yaṭaʔu "to tread, to trample"; wasiʕa~yasaʕu "to be spacious; to be well-off";
-- waṯiʔa~yaṯaʔu "to get bruised, to be sprained", which would default to sound.
weakness = "assimilated"
elseif weakness == "final-weak" then
-- For completeness; not clear if any verbs occur where this is needed. (There are plenty of
-- assimilated+final-weak verbs but the defaults should take care of them.)
weakness = "assimilated+final-weak"
else
error(("Can't specify form 'I-assimilated' when inferred weakness is '%s' for lemma %s"):format(
weakness, base.lemma))
end
elseif base.explicit_weakness then
error(("Internal error: Unrecognized value '%s' for base.explicit_weakness"):format(base.explicit_weakness))
end
elseif vform == "none" then
weakness = base.explicit_weakness
elseif base.explicit_weakness then
error(("Internal error: Explicit weakness should not be specifiable except with forms I and none, but saw explicit weakness '%s' with verb form '%s'"):
format(base.explicit_weakness, vform))
end
vowel_spec.weakness = weakness
if vform ~= "none" then
-- Error if radicals are wrong given the weakness. More likely to happen if the weakness is explicitly given
-- rather than inferred. Will also happen if certain incorrect letters are included as radicals e.g. hamza on
-- top of various letters, alif maqṣūra, tā' marbūṭa.
check_radicals(vform, weakness, rget(vowel_spec.rad1), rget(vowel_spec.rad2), rget(vowel_spec.rad3),
base.quadlit and rget(vowel_spec.rad4) or nil)
end
-- Check the variant value.
local form_iii_vi_geminate = (vform == "III" or vform == "VI") and rget(vowel_spec.rad2) == rget(vowel_spec.rad3) and
not req(vowel_spec.rad2, Y)
local hayy_i_x = hayy_radicals(vowel_spec.rad1, vowel_spec.rad2, vowel_spec.rad3) and (vform == "I" or vform == "X")
if form_iii_vi_geminate or hayy_i_x then
if vowel_spec.variant and vowel_spec.variant ~= "long" and vowel_spec.variant ~= "short" and vowel_spec.variant ~= "both" then
error(("For form-III/VI geminate verb or form-I/X verb with ح-ي-ي radicals, saw unrecognized 'var:%s' value; should be 'var:long', 'var:short' or 'var:both'"):format(
vowel_spec.variant))
end
elseif vowel_spec.variant then
error(("Variant value 'var:%s' not allowed in this context"):format(vowel_spec.variant))
end
end
-- If form I, regroup expanded vowels for display purposes.
if vform == "I" then
local group_by_past = {}
for _, vowel_spec in ipairs(base.conj_vowels) do
m_table.insertIfNot(group_by_past, {
past = undia[rget(vowel_spec.past)],
nonpasts = {undia[rget(vowel_spec.nonpast)]},
}, {
key = function(obj) return obj.past end,
combine = function(obj1, obj2)
for _, nonpast in ipairs(obj2.nonpasts) do
m_table.insertIfNot(obj1.nonpasts, nonpast)
end
end,
})
end
local group_by_nonpast = {}
for _, vowel_spec in ipairs(group_by_past) do
m_table.insertIfNot(group_by_nonpast, {
pasts = {vowel_spec.past},
nonpasts = vowel_spec.nonpasts,
}, {
key = function(obj) return obj.nonpasts end,
combine = function(obj1, obj2)
for _, past in ipairs(obj2.pasts) do
m_table.insertIfNot(obj1.pasts, past)
end
end,
})
end
base.grouped_conj_vowels = group_by_nonpast
end
-- Set value of passive. If not specified, default is yes for forms II, III, IV and Iq; no but uncertainly for
-- forms VII, IX, XI - XV and IIIq - IVq, as well as form I with past vowel u; impersonal but uncertainly for form
-- V, VI, X and IIq, as well as form I with past vowel i; and yes but uncertainly for the remainder (form I with
-- past vowel only a and form VIII).
if not base.passive then
base.passive_defaulted = true
-- Temporary tracking for defaulted passives by verb form, weakness and (for form I) past/non-past vowels.
track_if_ar_conj(base, "passive-defaulted/" .. vform)
for _, vowel_spec in ipairs(base.conj_vowels) do
track_if_ar_conj(base, "passive-defaulted/" .. vform.. "/" .. vowel_spec.weakness)
if vform == "I" then
--W: use rget(); the vowel is a form object when the user attached a footnote
-- (e.g. <I/a[نادر]~u>), and undia[<table>] is nil, which crashes format() on Lua 5.1.
local past_nonpast = ("%s~%s"):format(undia[rget(vowel_spec.past)], undia[rget(vowel_spec.nonpast)])
track_if_ar_conj(base, "passive-defaulted/I/" .. past_nonpast)
track_if_ar_conj(base, "passive-defaulted/I/" .. vowel_spec.weakness .. "/" .. past_nonpast)
end
end
if vform_probably_full_passive(vform) then
base.passive = "pass"
else
base.passive_uncertain = true
for _, vowel_spec in ipairs(base.conj_vowels) do
if vform_probably_no_passive(vform, vowel_spec.weakness, vowel_spec.past, vowel_spec.nonpast) then
base.passive = "nopass"
break
elseif vform_probably_impersonal_passive(vform, vowel_spec.weakness, vowel_spec.past,
vowel_spec.nonpast) then
base.passive = "ipass"
break
end
end
base.passive = base.passive or "pass"
end
end
-- NOTE: Currently there are no built-in stems or form overrides for Arabic; this code is inherited from
-- [[Module:ca-verb]], where such things do exist, and is kept for generality in case we decide in the future to
-- implement such things.
-- Override built-in verb stems and overrides with user-specified ones.
for stem, values in pairs(base.user_stem_overrides) do
base.stem_overrides[stem] = values
end
for slot, values in pairs(base.user_slot_overrides) do
if not base.alternant_multiword_spec.verb_slots_map[slot] then
error("Unrecognized override slot '" .. slot .. "': " .. base.angle_bracket_spec)
end
if export.unsettable_slots_set[slot] then
error("Slot '" .. slot .. "' cannot be set using an override: " .. base.angle_bracket_spec)
end
if skip_slot(base, slot, "allow overrides") then
error("Override slot '" .. slot ..
"' would be skipped based on the passive, 'noimp' and/or 'no_nonpast' settings: " ..
base.angle_bracket_spec)
end
base.slot_overrides[slot] = values
end
if base.verb_form == "none-final-weak" then
for _, stem_type in ipairs { "past", "past_pass", "nonpast", "nonpast_pass" } do
if base.stem_overrides[stem_type .. "_c"] or base.stem_overrides[stem_type .. "_v"] then
error(("Specify past stem for verb type 'none-final-weak' using '%s:...' not '%s_c:...' or '%s_v:...'"):
format(stem_type, stem_type, stem_type))
end
end
for _, stem_type in ipairs { "past", "nonpast" } do
if base.stem_overrides[stem_type] or not base.stem_overrides[stem_type .. "_final_weak_vowel"] then
error(("For verb type 'none-final-weak', if '%s:...' specified, so must '%s_final_weak_vowel:...'"):
format(stem_type, stem_type))
end
end
end
end
local function detect_all_indicator_specs(alternant_multiword_spec)
add_slots(alternant_multiword_spec)
alternant_multiword_spec.verb_forms = {}
-- This means at least one individual base had the slot marked as explicitly missing. Another base (e.g. when
-- there are multiple alternants) might have a value for the slot. In practice, we only respect this when there are
-- no overall values in the slot and `slot_uncertain` isn't set; in this case, we display "no ..." for the slot
-- instead of simply not displaying anything for the slot.
alternant_multiword_spec.slot_explicitly_missing = {}
-- This means at least one individual base had no values for the slot and the slot marked as explicitly uncertain.
-- Note that this is different from a value being present but marked as uncertain (e.g. if an override was given
-- with a ? after it); this causes the form object for the value to have `uncertain = true` set. If there are no
-- overall values in the slot and `slot_uncertain` is set, we display this in the headword.
alternant_multiword_spec.slot_uncertain = {}
iut.map_word_specs(alternant_multiword_spec, function(base)
-- So arguments, etc. can be accessed. WARNING: Creates circular reference.
base.alternant_multiword_spec = alternant_multiword_spec
detect_indicator_spec(base)
if not base.nocat then
m_table.insertIfNot(alternant_multiword_spec.verb_forms, base.verb_form)
end
if base.passive then
alternant_multiword_spec.passive = base.passive
end
if base.passive_uncertain then
alternant_multiword_spec.passive_uncertain = true
end
for slot, _ in pairs(base.slot_explicitly_missing) do
alternant_multiword_spec.slot_explicitly_missing[slot] = true
end
end)
end
local function determine_slot_uncertainty_from_forms(alternant_multiword_spec)
iut.map_word_specs(alternant_multiword_spec, function(base)
-- If no verbal noun and verb form is not 'none' (manually-specified stems) — which currently only happens for
-- form I — and the verbal noun wasn't explicitly indicated as missing using <vn:->, we assume it's just
-- unknown/unspecified rather than missing. Same with active participles.
for uncertain_slot, _ in pairs(slots_that_may_be_uncertain) do
if not base.forms[uncertain_slot] and vform ~= "none" and not skip_slot(base, uncertain_slot) then
base.slot_uncertain[uncertain_slot] = true
end
end
-- Propagate slot uncertainty up. Currently only the verbal noun can have this set but we write the code
-- generally.
for slot, _ in pairs(base.slot_uncertain) do
alternant_multiword_spec.slot_uncertain[slot] = true
end
end)
-- If slot is uncertain and has no value, explicitly set its value to "?".
for uncertain_slot, _ in pairs(slots_that_may_be_uncertain) do
if not alternant_multiword_spec.forms[uncertain_slot] and
alternant_multiword_spec.slot_uncertain[uncertain_slot] then
alternant_multiword_spec.forms[uncertain_slot] = {{form = "?"}}
end
end
end
-- Determine certain properties of the verb from the overall forms, such as whether the verb is active-only or
-- passive-only, is impersonal, lacks an imperative, etc.
local function determine_verb_properties_from_forms(alternant_multiword_spec)
alternant_multiword_spec.has_active = false
alternant_multiword_spec.has_passive = false
alternant_multiword_spec.has_non_impers_active = false
alternant_multiword_spec.has_non_impers_passive = false
alternant_multiword_spec.has_imp = false
alternant_multiword_spec.has_past = false
alternant_multiword_spec.has_nonpast = false
for slot, _ in pairs(alternant_multiword_spec.forms) do
if slot == "ap" or slot:find("[123]") and not slot:find("_pass") then
alternant_multiword_spec.has_active = true
end
if slot == "pp" or slot:find("[123]") and slot:find("_pass") then
alternant_multiword_spec.has_passive = true
end
if slot:find("[123]") and not slot:find("pass_[123]") and not slot:find("3ms") then
alternant_multiword_spec.has_non_impers_active = true
end
if slot:find("pass_[123]") and not slot:find("3ms") then
alternant_multiword_spec.has_non_impers_passive = true
end
if slot:find("^imp_") then
alternant_multiword_spec.has_imp = true
end
if slot:find("^past_") then
alternant_multiword_spec.has_past = true
end
if slot:find("^ind_") or slot:find("^sub_") or slot:find("^juss_") then
alternant_multiword_spec.has_nonpast = true
end
end
end
local function add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma, insert_ann, insert_cat)
-- Useful e.g. in constructing suppletive verbs out of parts. For a verb like جاء or أتى whose imperative comes
-- from the unrelated verb تعالى, we don't want the latter verb showing up in categories or annotations.
if base.nocat then
return
end
local vform = base.verb_form
if vform ~= "none" then
insert_ann("form", vform)
insert_cat("form-" .. vform .. " verbs")
--W: Add morphological pattern corresponding to the form
local morph_pattern = FORM_TO_MORPHOLOGICAL_PATTERN[vform]
if morph_pattern then
insert_ann("morph_pattern", morph_pattern)
end
end
if base.reduced then
insert_ann("reduced", "reduced")
if vform ~= "none" then
insert_cat("form-" .. vform .. " reduced verbs")
end
end
if base.quadlit then
insert_cat("verbs with quadriliteral roots")
end
if base.passive_defaulted then
insert_cat("verbs with defaulted passive")
end
for _, vowel_spec in ipairs(base.conj_vowels) do
local rad1, rad2, rad3, rad4 = get_radicals_4(vowel_spec)
local final_weak = is_final_weak(base, vowel_spec)
local weakness = vowel_spec.weakness
-- We have to distinguish weakness by form and weakness by conjugation. Weakness by form merely indicates the
-- presence of weak letters in certain positions in the radicals. Weakness by conjugation is related to how the
-- verbs are conjugated. For example, form-II verbs that are "hollow by form" (middle radical is wāw or yāʾ) are
-- conjugated as sound verbs. Another example: form-I verbs with initial wāw are "assimilated by form" and most
-- are assimilated by conjugation as well, but a few are sound by conjugation, e.g. wajuha yawjuhu "to be
-- distinguished" (rather than wajuha yajuhu); similarly for some hollow-by-form verbs in various forms, e.g.
-- form VIII izdawaja yazdawiju "to be in pairs" (rather than izdāja yazdāju). Categories referring to weakness
-- always refer to weakness by conjugation; weakness by form is distinguished only by categories such as
-- [[:Category:Arabic form-III verbs with و as second radical]].
insert_ann("weakness", weakness)
if vform ~= "none" then
insert_cat(("%s form-%s verbs"):format(weakness, vform))
end
local function radical_is_ambiguous(rad)
return type(rad) == "table" and rad.ambig
end
local function radical_is_unambiguous_weak(rad)
return not radical_is_ambiguous(rad) and (is_waw_ya(rad) or req(rad, HAMZA))
end
if vform ~= "none" then
local ur1, ur2, ur3, ur4 =
vowel_spec.unreg_rad1, vowel_spec.unreg_rad2, vowel_spec.unreg_rad3, vowel_spec.unreg_rad4
-- Create headword categories based on the radicals. Do the following before
-- converting the Latin radicals into Arabic ones so we distinguish
-- between ambiguous and non-ambiguous radicals.
if radical_is_ambiguous(ur1) or radical_is_ambiguous(ur2) or radical_is_ambiguous(ur3) or
ur4 and radical_is_ambiguous(ur4) then
insert_cat("verbs with ambiguous radicals")
end
if radical_is_unambiguous_weak(ur1) then
insert_cat("form-" .. vform .. " verbs with " .. rget(ur1) .. " as first radical")
end
if radical_is_unambiguous_weak(ur2) then
insert_cat("form-" .. vform .. " verbs with " .. rget(ur2) .. " as second radical")
end
if radical_is_unambiguous_weak(ur3) then
insert_cat("form-" .. vform .. " verbs with " .. rget(ur3) .. " as third radical")
end
if ur4 and radical_is_unambiguous_weak(ur4) then
insert_cat("form-" .. vform .. " verbs with " .. rget(ur4) .. " as fourth radical")
end
end
end
if vform == "I" and not is_passive_only(base.passive) then
for _, vowel_spec in ipairs(base.grouped_conj_vowels) do
insert_ann("vowels",
("%s ~ %s"):format(table.concat(vowel_spec.pasts, "/"), table.concat(vowel_spec.nonpasts, "/")))
for _, past in ipairs(vowel_spec.pasts) do
for _, nonpast in ipairs(vowel_spec.nonpasts) do
if past == "-" or nonpast == "-" then
error("Internal error: Saw form I past vowel %s and non-past vowel %s but - in place of vowel should have triggered an error earlier")
end
insert_cat(("form-I verbs with past vowel %s and non-past vowel %s"):format(past, nonpast))
--W: Add morphological pattern for form I based on vowels
local form_i_with_vowels = ("I/%s~%s"):format(past, nonpast)
local morph_pattern = FORM_TO_MORPHOLOGICAL_PATTERN[form_i_with_vowels]
if morph_pattern then
insert_ann("morph_pattern", morph_pattern)
end
end
end
end
end
for slot, name in pairs(slots_that_may_be_uncertain) do
if base.slot_uncertain[slot] then
-- An unspecified and non-defaulted verbal noun (form I) is considered uncertain rather than explicitly
-- missing. Use <vn:-> to explicitly indicate the lack of verbal noun. Same for form-I stative active
-- participles.
insert_cat(("verbs with unknown or uncertain %ss"):format(name))
end
end
if base.irregular then
insert_ann("irreg", "irregular")
insert_cat("irregular verbs")
end
end
-- Compute the categories to add the verb to, as well as the annotation to display in the conjugation title bar. We
-- combine the code to do these functions as both categories and title bar contain similar information.
local function compute_categories_and_annotation(alternant_multiword_spec)
alternant_multiword_spec.categories = {}
local ann = {}
alternant_multiword_spec.annotation = ann
ann.form = {}
ann.morph_pattern = {} --W: arabic morphological pattern corresponding to the form
ann.weakness = {}
ann.vowels = {}
ann.passive = nil
ann.reduced = {}
ann.irreg = {}
ann.defective = {}
local multiword_lemma = false
for _, slot in ipairs(export.potential_lemma_slots) do
if alternant_multiword_spec.forms[slot] then
for _, formobj in ipairs(alternant_multiword_spec.forms[slot]) do
if formobj.form:find(" ") then
multiword_lemma = true
break
end
end
break
end
end
local function insert_ann(anntype, value)
m_table.insertIfNot(alternant_multiword_spec.annotation[anntype], value)
end
local function insert_cat(cat, also_when_multiword)
-- Don't place multiword terms in categories like 'Arabic form-II verbs' to avoid spamming the categories with
-- such terms.
if also_when_multiword or not multiword_lemma then
m_table.insertIfNot(alternant_multiword_spec.categories, "Arabic " .. cat)
end
end
iut.map_word_specs(alternant_multiword_spec, function(base)
add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma, insert_ann, insert_cat)
end)
for slot, name in pairs(slots_that_may_be_uncertain) do
if alternant_multiword_spec.forms[slot] then
for _, form in ipairs(alternant_multiword_spec.forms[slot]) do
if form.uncertain then
if form.form == "?" then
insert_cat(("verbs with explicitly unknown %ss"):format(name))
else
insert_cat(("verbs needing %s checked"):format(name))
end
break
end
end
end
end
if alternant_multiword_spec.has_active then
if alternant_multiword_spec.has_passive and alternant_multiword_spec.has_non_impers_passive then
insert_cat("verbs with full passive")
ann.passive = "full passive"
elseif alternant_multiword_spec.has_passive then
insert_cat("verbs with impersonal passive")
ann.passive = "impersonal passive"
else
insert_cat("verbs lacking passive forms")
ann.passive = "no passive"
end
else
if alternant_multiword_spec.has_non_impers_passive then
insert_cat("passive verbs")
insert_cat("verbs with full passive")
ann.passive = "passive-only"
else
insert_cat("passive verbs")
insert_cat("impersonal verbs")
insert_cat("verbs with impersonal passive")
ann.passive = "impersonal (passive-only)"
end
end
if alternant_multiword_spec.passive_uncertain then
insert_cat("verbs needing passive checked")
ann.passive = ann.passive .. ' <abbr title="passive status uncertain">(?)</abbr>'
end
if alternant_multiword_spec.has_active and not alternant_multiword_spec.has_imp then
insert_ann("defective", "no imperative")
insert_cat("verbs lacking imperative forms")
end
if not alternant_multiword_spec.has_past then
insert_ann("defective", "no past")
insert_cat("verbs lacking past forms")
end
if not alternant_multiword_spec.has_nonpast then
insert_ann("defective", "no non-past")
insert_cat("verbs lacking non-past forms")
end
local ann_parts = {}
local function insert_ann_part(part, conj)
local val = table.concat(ann[part], conj or " or ")
if val ~= "" and val ~= "regular" then
table.insert(ann_parts, val)
end
end
insert_ann_part("form")
insert_ann_part("weakness")
insert_ann_part("reduced")
insert_ann_part("vowels")
if ann.passive then
table.insert(ann_parts, ann.passive)
end
insert_ann_part("irreg")
insert_ann_part("defective", "، ")
--W: Save morph_pattern before overwriting annotation with string
alternant_multiword_spec.morph_pattern = ann.morph_pattern
alternant_multiword_spec.annotation = table.concat(ann_parts, "، ")
end
local function show_forms(alternant_multiword_spec)
local lemmas = {}
for _, slot in ipairs(export.potential_lemma_slots) do
if alternant_multiword_spec.forms[slot] then
for _, formobj in ipairs(alternant_multiword_spec.forms[slot]) do
table.insert(lemmas, formobj)
end
break
end
end
alternant_multiword_spec.lemmas = lemmas -- save for later use in make_table()
alternant_multiword_spec.vn = alternant_multiword_spec.forms.vn -- save for later use in make_table()
-- Reconstruct the original verb spec without overrides for verbal nouns and participles, since those specific slots
-- are ignored by {{ar-verb form}}. Compute this once beforehand; `transform_accel_obj` is called repeatedly on each
-- form and we don't want to compute this repeatedly.
local reconstructed_verb_spec = iut.reconstruct_original_spec(alternant_multiword_spec, {
preprocess_angle_bracket_spec = function(spec)
spec = spec:match("^<(.*)>$")
assert(spec)
local segments = put.parse_multi_delimiter_balanced_segment_run(spec, {{"[", "]"}, {"<", ">"}})
local dot_separated_groups = put.split_alternating_runs_and_strip_spaces(segments, "%.")
-- Rejoin each dot-separated group into a single string, since we aren't actually going to do any parsing
-- of bracket-bounded textual runs; then filter out overrides for verbal nouns and participles.
local filtered_indicators = {}
for _, dot_separated_group in ipairs(dot_separated_groups) do
local indicator = table.concat(dot_separated_group)
-- FIXME: Do we want to filter out any other indicators?
if not (indicator:find("^vn:") or indicator:find("^[ap]p:")) then
table.insert(filtered_indicators, indicator)
end
end
return ("<%s>"):format(table.concat(filtered_indicators, "."))
end,
})
-- If we're dealing with a single word, no alternants and a single verb form, use the auto-conjugation-fetching
-- variant.
local reconstructed_lemma, inside = reconstructed_verb_spec:match("^([^ <>()]+)(%b<>)$")
if inside and alternant_multiword_spec.verb_forms[1] and not alternant_multiword_spec.verb_forms[2] then
reconstructed_verb_spec = ("+%s<%s>"):format(reconstructed_lemma, alternant_multiword_spec.verb_forms[1])
end
local function transform_accel_obj(slot, formobj, accel_obj)
if not accel_obj then
return accel_obj
end
if slot == "ap" or slot == "pp" or slot == "vn" then
-- FIXME: [[Module:accel]] can't correctly handle more than one verb form for participles and verbal nouns
accel_obj.form = slot .. "-" .. table.concat(alternant_multiword_spec.verb_forms, "،")
else
accel_obj.form = "verb-form-" .. reconstructed_verb_spec
end
return accel_obj
end
local function generate_link(data)
local form = data.form
local term = form.formval_for_link
local alt = form.alt
if term == "?" then
term = nil
alt = "?"
end
--W: Create simple link for verb forms without #Arabic anchor
local display = alt or term
local link
if display then
link = link_term_simple(display)
else
link = ""
end
link = link .. iut.get_footnote_text(form.footnotes, data.footnote_obj)
--W: qualifier/label rendering removed along with the q/qq/l/ll modifiers;
-- it required [[Module:pron qualifier]], absent on ar.wiktionary.
return link
end
local props = {
lang = lang,
lemmas = lemmas,
transform_accel_obj = transform_accel_obj,
generate_link = generate_link,
slot_list = alternant_multiword_spec.verb_slots,
include_translit = false,
}
iut.show_forms(alternant_multiword_spec.forms, props)
end
--W: Tatweel and the invisible direction/joining marks survive copy-paste and
-- MediaWiki keeps them in page titles, so strip them from both sides before
-- comparing a |بؤرة= value against a generated form.
local FOCUS_IGNORE = "[" .. u(0x0640) .. u(0x061C) .. u(0x200B) .. "-" .. u(0x200F)
.. u(0x202A) .. "-" .. u(0x202E) .. u(0xFEFF) .. "]"
local function normalize_for_focus(s)
return (rsub(s, FOCUS_IGNORE, ""))
end
--W: Which slots hold `focus`? Must run before show_forms() turns the form
-- lists into rendered wikitext.
local function find_focus_slots(alternant_multiword_spec, focus)
if not focus or focus == "" then
return nil
end
local target = normalize_for_focus(focus)
local slots = {}
for slot, forms in pairs(alternant_multiword_spec.forms) do
if type(forms) == "table" then
for _, formobj in ipairs(forms) do
if type(formobj) == "table" and formobj.form
and normalize_for_focus(formobj.form) == target then
slots[slot] = true
break
end
end
end
end
return slots
end
--W: 'yes' unless |موسع= asked for the table open. [[Template:inflection-table-top]]
-- turns any non-empty |tall= into the mw-collapsed class.
local function collapsed_arg(alternant_multiword_spec)
if alternant_multiword_spec.expanded then
return nil
end
return 'yes'
end
--W: Put the marker class on the cell itself rather than on a span around its
-- contents, so the highlight covers the whole cell instead of hugging the word.
-- Runs on the table wikitext below, before m_string_utilities.format() fills the
-- {slot} placeholders in. Every form cell in either table has one of two shapes:
--
-- | {past_1s} -> | class="avf-focus" | {past_1s}
-- | rowspan="2" | {past_1s} -> | rowspan="2" class="avf-focus" | {past_1s}
--
-- Styled by [[Template:ar-verb-form/style.css]] (.inflection-table td.avf-focus).
local function mark_focus_cells(text, focus_slots)
if not focus_slots then
return text
end
return (rsub(text, "\n(|[^\n]*)", function(cell)
local slot = rmatch(cell, "^|%s*{([%w_]+)}%s*$")
if slot then
if focus_slots[slot] then
return '\n| class="avf-focus" | {' .. slot .. "}"
end
return nil
end
local attrs
attrs, slot = rmatch(cell, "^|%s*(.-)%s*|%s*{([%w_]+)}%s*$")
if slot and focus_slots[slot] then
return "\n| " .. attrs .. ' class="avf-focus" | {' .. slot .. "}"
end
return nil
end))
end
-------------------------------------------------------------------------------
-- Functions to create inflection tables --
-------------------------------------------------------------------------------
-- Make the conjugation table. Called from export.show().
local function make_table(alternant_multiword_spec)
local text = mw.getCurrentFrame():expandTemplate{
title = 'inflection-table-top',
args = {
title = 'تصريف {title}',
--W: |tall= is what puts mw-collapsed on the wrapper. |موسع= drops it.
-- (Not `expanded and nil or 'yes'` — in Lua that is always 'yes'.)
tall = collapsed_arg(alternant_multiword_spec),
palette = 'green',
category = 'conjugation',
class = 'tr-alongside', -- temp hack to prevent extra line break
}
}
text = text .. [=[
! colspan="6" | <<الْمَصْدَر>>
| colspan="7" | {vn}
]=]
if alternant_multiword_spec.has_active then
text = text .. [=[
|-
! colspan="6" | <<اِسْم الْفَاعِل>>
| colspan="7" | {ap}
]=]
end
if alternant_multiword_spec.has_passive then
text = text .. [=[
|-
! colspan="6" | <<اِسْم الْمَفْعُول>>
| colspan="7" | {pp}
]=]
end
text = text .. [=[
|-
! colspan="999" class="separator" |
]=]
if alternant_multiword_spec.has_active then
text = text .. [=[
|-
! colspan="12" class="outer" | <<الْفِعْل الْمَعْلُوم>>
|-
! colspan="2" |
! colspan="3" | <<الْمُفْرَد>>
! rowspan="12" class="separator" |
! colspan="2" | <<الْمُثَنَّى>>
! rowspan="12" class="separator" |
! colspan="3"| <<الْجَمْع>>
|-
! colspan="2"|
! <<الْمُتَكَلِّم>>
! <<الْمُخَاطَب>>
! <<الْغَائِب>>
! <<الْمُخَاطَب>>
! <<الْغَائِب>>
! <<الْمُتَكَلِّم>>
! <<الْمُخَاطَب>>
! <<الْغَائِب>>
|-
! rowspan="2" | <<الْمَاضِي>>
! class="secondary" | المذكر
| rowspan="2" | {past_1s}
| {past_2ms}
| {past_3ms}
| rowspan="2" | {past_2d}
| {past_3md}
| rowspan="2" | {past_1p}
| {past_2mp}
| {past_3mp}
|-
! class="secondary" | المؤنث
| {past_2fs}
| {past_3fs}
| {past_3fd}
| {past_2fp}
| {past_3fp}
|-
! rowspan="2" | <<الْمُضَارِع الْمَرْفُوع>>
! class="secondary" | المذكر
| rowspan="2" | {ind_1s}
| {ind_2ms}
| {ind_3ms}
| rowspan="2" | {ind_2d}
| {ind_3md}
| rowspan="2" | {ind_1p}
| {ind_2mp}
| {ind_3mp}
|-
! class="secondary" | المؤنث
| {ind_2fs}
| {ind_3fs}
| {ind_3fd}
| {ind_2fp}
| {ind_3fp}
|-
! rowspan="2" | <<الْمُضَارِع الْمَنْصُوب>>
! class="secondary" | المذكر
| rowspan="2" | {sub_1s}
| {sub_2ms}
| {sub_3ms}
| rowspan="2" | {sub_2d}
| {sub_3md}
| rowspan="2" | {sub_1p}
| {sub_2mp}
| {sub_3mp}
|-
! class="secondary" | المؤنث
| {sub_2fs}
| {sub_3fs}
| {sub_3fd}
| {sub_2fp}
| {sub_3fp}
|-
! rowspan="2" | <<الْمُضَارِع الْمَجْزُوم>>
! class="secondary" | المذكر
| rowspan="2" | {juss_1s}
| {juss_2ms}
| {juss_3ms}
| rowspan="2" | {juss_2d}
| {juss_3md}
| rowspan="2" | {juss_1p}
| {juss_2mp}
| {juss_3mp}
|-
! class="secondary" | المؤنث
| {juss_2fs}
| {juss_3fs}
| {juss_3fd}
| {juss_2fp}
| {juss_3fp}
|-
! rowspan="2" | <<الْأَمْر>>
! class="secondary" | المذكر
| rowspan="2" |
| {imp_2ms}
| rowspan="2" |
| rowspan="2" | {imp_2d}
| rowspan="2" |
| rowspan="2" |
| {imp_2mp}
| rowspan="2" |
|-
! class="secondary" | المؤنث
| {imp_2fs}
| {imp_2fp}
]=]
end
if alternant_multiword_spec.has_passive then
text = text .. [=[
|-
! colspan="999" class="separator" |
|-
! colspan="12" class="outer" | <<الْفِعْل الْمَجْهُول>>
|-
! colspan="2" |
! colspan="3" | <<الْمُفْرَد>>
! rowspan="10" class="separator" |
! colspan="2" | <<الْمُثَنَّى>>
! rowspan="10" class="separator" |
! colspan="3" | <<الْجَمْع>>
|-
! colspan="2" |
! <<الْمُتَكَلِّم>>
! <<الْمُخَاطَب>>
! <<الْغَائِب>>
! <<الْمُخَاطَب>>
! <<الْغَائِب>>
! <<الْمُتَكَلِّم>>
! <<الْمُخَاطَب>>
! <<الْغَائِب>>
|-
! rowspan="2" | <<الْمَاضِي>>
! class="secondary" | المذكر
| rowspan="2" | {past_pass_1s}
| {past_pass_2ms}
| {past_pass_3ms}
| rowspan="2" | {past_pass_2d}
| {past_pass_3md}
| rowspan="2" | {past_pass_1p}
| {past_pass_2mp}
| {past_pass_3mp}
|-
! class="secondary" | المؤنث
| {past_pass_2fs}
| {past_pass_3fs}
| {past_pass_3fd}
| {past_pass_2fp}
| {past_pass_3fp}
|-
! rowspan="2" | <<الْمُضَارِع الْمَرْفُوع>>
! class="secondary" | المذكر
| rowspan="2" | {ind_pass_1s}
| {ind_pass_2ms}
| {ind_pass_3ms}
| rowspan="2" | {ind_pass_2d}
| {ind_pass_3md}
| rowspan="2" | {ind_pass_1p}
| {ind_pass_2mp}
| {ind_pass_3mp}
|-
! class="secondary" | المؤنث
| {ind_pass_2fs}
| {ind_pass_3fs}
| {ind_pass_3fd}
| {ind_pass_2fp}
| {ind_pass_3fp}
|-
! rowspan="2" | <<الْمُضَارِع الْمَنْصُوب>>
! class="secondary" | المذكر
| rowspan="2" | {sub_pass_1s}
| {sub_pass_2ms}
| {sub_pass_3ms}
| rowspan="2" | {sub_pass_2d}
| {sub_pass_3md}
| rowspan="2" | {sub_pass_1p}
| {sub_pass_2mp}
| {sub_pass_3mp}
|-
! class="secondary" | المؤنث
| {sub_pass_2fs}
| {sub_pass_3fs}
| {sub_pass_3fd}
| {sub_pass_2fp}
| {sub_pass_3fp}
|-
! rowspan="2" | <<الْمُضَارِع الْمَجْزُوم>>
! class="secondary" | المذكر
| rowspan="2" | {juss_pass_1s}
| {juss_pass_2ms}
| {juss_pass_3ms}
| rowspan="2" | {juss_pass_2d}
| {juss_pass_3md}
| rowspan="2" | {juss_pass_1p}
| {juss_pass_2mp}
| {juss_pass_3mp}
|-
! class="secondary" | المؤنث
| {juss_pass_2fs}
| {juss_pass_3fs}
| {juss_pass_3fd}
| {juss_pass_2fp}
| {juss_pass_3fp}
]=]
end
text = text .. mw.getCurrentFrame():expandTemplate{
title = 'inflection-table-bottom',
args = {
notes = '{footnote}',
}
}
local forms = alternant_multiword_spec.forms
if not alternant_multiword_spec.lemmas then
forms.title = "—"
else
local linked_lemmas = {}
for _, form in ipairs(alternant_multiword_spec.lemmas) do
--W: Create simple link for lemmas without #Arabic anchor
-- table.insert(linked_lemmas, link_term(form.form, "term"))
table.insert(linked_lemmas, link_term_simple(form.form))
end
forms.title = table.concat(linked_lemmas, "، ")
end
local ann_parts = {}
if alternant_multiword_spec.annotation ~= "" then
table.insert(ann_parts, alternant_multiword_spec.annotation)
end
if alternant_multiword_spec.vn then
local linked_vns = {}
for _, form in ipairs(alternant_multiword_spec.vn) do
table.insert(linked_vns, link_term(form.form, "term"))
end
table.insert(ann_parts, (#linked_vns > 1 and "verbal nouns" or "verbal noun") .. " " ..
table.concat(linked_vns, "، "))
end
local annotation = table.concat(ann_parts, "، ")
--W: use only arabic morphological pattern in title annotation
local morph_patterns = alternant_multiword_spec.morph_pattern
if morph_patterns and #morph_patterns > 0 then
annotation = table.concat(morph_patterns, "، ")
forms.title = forms.title .. " (" .. annotation .. ")"
end
-- Format the table.
text = mark_focus_cells(text, alternant_multiword_spec.focus_slots)
local tagged_table = rsub(text, "<<(.-)>>", tag_text)
return m_string_utilities.format(tagged_table, forms)
end
-- Helper function to get root letters and verb classification for simplified table header
-- Returns: root_display (e.g., "ح س ب"), verb_type (e.g., "فعل ثلاثي صحيح سالم")
local function get_verb_info(alternant_multiword_spec)
local root_display = ""
local verb_type = "فعل"
local rad1, rad2, rad3, rad4
-- Extract radicals from the base word spec using iut.map_word_specs
-- This accesses the radicals directly from the parsed verb specification
iut.map_word_specs(alternant_multiword_spec, function(base)
-- Get radicals from the first conjugation vowel spec
if base.conj_vowels and #base.conj_vowels > 0 then
local vowel_spec = base.conj_vowels[1]
-- Extract radicals, handling both table and string types
local function extract_radical(rad)
if type(rad) == "table" then
-- If it's a table, get the first element or the string representation
return rad[1] or rget(rad)
else
return rad
end
end
rad1 = extract_radical(vowel_spec.rad1)
rad2 = extract_radical(vowel_spec.rad2)
rad3 = extract_radical(vowel_spec.rad3)
rad4 = vowel_spec.rad4 and extract_radical(vowel_spec.rad4)
end
end)
-- Get basic/derived classification from morphological pattern
local basic_deriv
if alternant_multiword_spec.morph_pattern and #alternant_multiword_spec.morph_pattern > 0 then
local morph_pattern = alternant_multiword_spec.morph_pattern[1]
basic_deriv = MORPHOLOGICAL_PATTERN_TO_BASIC_DERIV[morph_pattern]
end
-- Format root display with spaces between letters
if rad1 and rad2 and rad3 then
if rad4 then
-- Quadrilateral
root_display = rad1 .. " " .. rad2 .. " " .. rad3 .. " " .. rad4
verb_type = "فعل رباعي"
if basic_deriv then
verb_type = verb_type .. " " .. basic_deriv
end
else
-- triliteral
root_display = rad1 .. " " .. rad2 .. " " .. rad3
verb_type = "فعل ثلاثي"
if basic_deriv then
verb_type = verb_type .. " " .. basic_deriv
if basic_deriv == "مُجرَّد" then
--W: the classification concerns only triliteral basic verbs (الثلاثي المُجرَّد)
local classification = export.classify_triliteral_verb(rad1, rad2, rad3)
verb_type = verb_type .. " " .. classification
end
end
end
end
return root_display, verb_type
end
-- Make simplified conjugation table for ar.wiktionary. Called from export.show().
-- This table shows only past, present indicative, and imperative forms.
-- No passive voice, no participles, no verbal nouns.
local function make_table_ar(alternant_multiword_spec)
local text = mw.getCurrentFrame():expandTemplate{
title = 'inflection-table-top',
args = {
title = 'تصريف {title}',
--W: |tall= is what puts mw-collapsed on the wrapper. |موسع= drops it.
-- (Not `expanded and nil or 'yes'` — in Lua that is always 'yes'.)
tall = collapsed_arg(alternant_multiword_spec),
palette = 'green',
category = 'conjugation',
class = 'tr-alongside', -- temp hack to prevent extra line break
}
}
-- Get verb root and classification
local root_display, verb_type = get_verb_info(alternant_multiword_spec)
-- First row: Root and verb type spanning all columns
text = text .. "! colspan=\"2\" | <<الجذر>>: " .. root_display .. "\n"
text = text .. "| colspan=\"3\" | <<'''" .. verb_type .. "'''>>\n"
text = text .. [=[
|-
! colspan="2" | <<الضمائر>>
! <<الماضي>>
! <<المضارع>>
! <<الأمر>>
|-
! rowspan="2" | <<المتكلّم>>
| <<أنا>>
| {past_1s}
| {ind_1s}
|
|-
| <<نحن>>
| {past_1p}
| {ind_1p}
|
|-
! rowspan="5" | <<المخاطب>>
| <<أنتَ>>
| {past_2ms}
| {ind_2ms}
| {imp_2ms}
|-
| <<أنتِ>>
| {past_2fs}
| {ind_2fs}
| {imp_2fs}
|-
| <<أنتما>>
| {past_2d}
| {ind_2d}
| {imp_2d}
|-
| <<أنتم>>
| {past_2mp}
| {ind_2mp}
| {imp_2mp}
|-
| <<أنتنّ>>
| {past_2fp}
| {ind_2fp}
| {imp_2fp}
|-
! rowspan="6" | <<الغائب>>
| <<هو>>
| {past_3ms}
| {ind_3ms}
|
|-
| <<هي>>
| {past_3fs}
| {ind_3fs}
|
|-
| <<هما>>
| {past_3md}
| {ind_3md}
|
|-
| <<هما>>
| {past_3fd}
| {ind_3fd}
|
|-
| <<هم>>
| {past_3mp}
| {ind_3mp}
|
|-
| <<هنّ>>
| {past_3fp}
| {ind_3fp}
|
]=]
text = text .. mw.getCurrentFrame():expandTemplate{
title = 'inflection-table-bottom',
args = {
notes = '{footnote}',
}
}
local forms = alternant_multiword_spec.forms
if not alternant_multiword_spec.lemmas then
forms.title = "—"
else
local linked_lemmas = {}
for _, form in ipairs(alternant_multiword_spec.lemmas) do
--W: Create simple link for lemmas without #Arabic anchor
-- table.insert(linked_lemmas, link_term(form.form, "term"))
table.insert(linked_lemmas, link_term_simple(form.form))
end
forms.title = table.concat(linked_lemmas, "، ")
end
local ann_parts = {}
if alternant_multiword_spec.annotation ~= "" then
table.insert(ann_parts, alternant_multiword_spec.annotation)
end
local annotation = table.concat(ann_parts, "، ")
--W: use only arabic morphological pattern in title annotation
local morph_patterns = alternant_multiword_spec.morph_pattern
if morph_patterns and #morph_patterns > 0 then
annotation = table.concat(morph_patterns, "، ")
forms.title = forms.title .. " (" .. annotation .. ")"
end
-- Format the table.
text = mark_focus_cells(text, alternant_multiword_spec.focus_slots)
local tagged_table = rsub(text, "<<(.-)>>", tag_text)
return m_string_utilities.format(tagged_table, forms)
end
-------------------------------------------------------------------------------
-- Verb classification functions --
-------------------------------------------------------------------------------
--[=[
تصنيف الفعل الثلاثي المُجرَّد حسب نوعه
Classify an Arabic triliteral basic verb root based on its three letters.
@param r1 الحرف الأول (first root letter - الفاء)
@param r2 الحرف الثاني (second root letter - العين)
@param r3 الحرف الثالث (third root letter - اللام)
@return str: نوع الفعل (verb type classification in Arabic)
Examples:
classify_triliteral_verb('ك', 'ت', 'ب') --> 'صحيح سالم'
classify_triliteral_verb('أ', 'ت', 'ي') --> 'معتل ناقص يائي مهموز الفاء'
classify_triliteral_verb('ق', 'ل', 'و') --> 'معتل ناقص واوي'
]=]
function export.classify_triliteral_verb(r1, r2, r3)
-- تعريف أحرف العلة والهمزة
-- الحروف الضعيفة (أحرف العلة): واو وياء فقط
local weak_letters = {[W] = true, [Y] = true}
-- الهمزة: جميع أشكال الهمزة (ء، أ، إ، ؤ، ئ)
local hamza_letters = {
[HAMZA] = true, -- ء
[HAMZA_ON_ALIF] = true, -- أ
[HAMZA_UNDER_ALIF] = true, -- إ
[HAMZA_ON_W] = true, -- ؤ
[HAMZA_ON_Y] = true -- ئ
}
-- فحص كل حرف
local is_hamza = {hamza_letters[r1] or false, hamza_letters[r2] or false, hamza_letters[r3] or false}
local is_weak = {weak_letters[r1] or false, weak_letters[r2] or false, weak_letters[r3] or false}
-- عدد أحرف العلة
local weak_count = (is_weak[1] and 1 or 0) + (is_weak[2] and 1 or 0) + (is_weak[3] and 1 or 0)
-- فحص التضعيف (الحرف الثاني = الثالث)
local is_doubled = (r2 == r3)
-- ═══════════════════════════════════════════════════════════
-- المُعتل: الفعل الذي يحتوي على حرف أو أكثر من أحرف العلة
-- ═══════════════════════════════════════════════════════════
if weak_count > 0 then
-- ─────────────────────────────────────────────────────
-- لفيف: يحتوي على حرفين أو أكثر من أحرف العلة
-- ─────────────────────────────────────────────────────
if weak_count >= 2 then
-- مقرون: حرفا العلة متجاوران
if is_weak[2] and is_weak[3] then -- الثاني والثالث
if is_hamza[1] then
return "معتل لفيف مقرون مهموز الفاء"
end
return "معتل لفيف مقرون"
elseif is_weak[1] and is_weak[2] then -- الأول والثاني
return "معتل لفيف مقرون"
-- مفروق: الأول والثالث حرفا علة
elseif is_weak[1] and is_weak[3] then
if is_hamza[2] then
return "معتل لفيف مفروق مهموز العين"
end
return "معتل لفيف مفروق"
end
-- ─────────────────────────────────────────────────────
-- مثال: الحرف الأول حرف علة
-- ─────────────────────────────────────────────────────
elseif is_weak[1] then
if r1 == W then -- واوي
if is_hamza[3] then
return "معتل مثال واوي مهموز اللام"
elseif is_doubled then
return "معتل مثال واوي مُضعَّف"
elseif is_hamza[2] then
return "معتل مثال واوي مهموز العين"
end
return "معتل مثال واوي"
else -- يائي (ي)
if is_doubled then
return "معتل مثال يائي مُضعَّف"
elseif is_hamza[2] then
return "معتل مثال يائي مهموز العين"
end
return "معتل مثال يائي"
end
-- ─────────────────────────────────────────────────────
-- أجوف: الحرف الثاني حرف علة
-- ─────────────────────────────────────────────────────
elseif is_weak[2] then
if r2 == W then -- واوي
if is_hamza[3] then
return "معتل أجوف واوي مهموز اللام"
elseif is_hamza[1] then
return "معتل أجوف واوي مهموز الفاء"
end
return "معتل أجوف واوي"
else -- يائي (ي)
if is_hamza[3] then
return "معتل أجوف يائي مهموز اللام"
elseif is_hamza[1] then
return "معتل أجوف يائي مهموز الفاء"
end
return "معتل أجوف يائي"
end
-- ─────────────────────────────────────────────────────
-- ناقص: الحرف الثالث حرف علة
-- ─────────────────────────────────────────────────────
elseif is_weak[3] then
if r3 == W then -- واوي
if is_hamza[1] then
return "معتل ناقص واوي مهموز الفاء"
elseif is_hamza[2] then
return "معتل ناقص واوي مهموز العين"
end
return "معتل ناقص واوي"
else -- يائي (ي)
if is_hamza[1] then
return "معتل ناقص يائي مهموز الفاء"
elseif is_hamza[2] then
return "معتل ناقص يائي مهموز العين"
end
return "معتل ناقص يائي"
end
end
-- ═══════════════════════════════════════════════════════════
-- الصحيح: الفعل الذي لا يحتوي على أحرف العلة
-- ═══════════════════════════════════════════════════════════
else
-- ─────────────────────────────────────────────────────
-- مهموز: يحتوي على همزة
-- ─────────────────────────────────────────────────────
if is_hamza[1] or is_hamza[2] or is_hamza[3] then
-- مهموز الفاء واللام: الأول والثالث همزة
if is_hamza[1] and is_hamza[3] then
return "صحيح مهموز الفاء واللام"
-- مهموز الفاء
elseif is_hamza[1] then
if is_doubled then
return "صحيح مُضعَّف مهموز الفاء"
end
return "صحيح مهموز الفاء"
-- مهموز العين
elseif is_hamza[2] then
return "صحيح مهموز العين"
-- مهموز اللام
elseif is_hamza[3] then
return "صحيح مهموز اللام"
end
-- ─────────────────────────────────────────────────────
-- مُضعَّف: الحرف الثاني = الثالث
-- ─────────────────────────────────────────────────────
elseif is_doubled then
return "صحيح مُضعَّف"
-- ─────────────────────────────────────────────────────
-- سالم: لا همزة، لا حرف علة، لا تضعيف
-- ─────────────────────────────────────────────────────
else
return "صحيح سالم"
end
end
return "غير معروف"
end
-------------------------------------------------------------------------------
-- External entry points --
-------------------------------------------------------------------------------
--W: Normalize root to use underscores as separators
-- Accepts: "كتب", "ك_ت_ب", or "ك ت ب"
-- Returns: "ك_ت_ب"
local function normalize_root(root)
if not root then
return nil
end
-- Helper function to normalize a single character/radical
local function normalize_char(char)
-- Convert all hamza variants to canonical bare hamza
if char == HAMZA_ON_ALIF or char == HAMZA_UNDER_ALIF or
char == HAMZA_ON_W or char == HAMZA_ON_Y then
return HAMZA
-- Convert alif maqṣūra to yaa (ى → ي)
elseif char == AMAQ then
return Y
-- Reject alif - it's not a root radical
elseif char == ALIF then
error("Root contains alif (ا) which is not a valid root radical. For weak verbs, use و (waw) or ي (yaa) instead.")
end
return char
end
-- Convert alif madda to hamza + alif for processing (will be caught as error below)
root = root:gsub(AMAD, HAMZA .. ALIF)
-- Replace spaces with underscores
root = root:gsub(" ", "_")
-- If no underscores yet, insert them between each character
if not root:find("_") then
-- Extract only Arabic letters (excluding diacritics)
-- Arabic letter range: U+0621 to U+064A (basic letters)
local chars = {}
for char in mw.ustring.gmatch(root, "[ء-ي]") do
table.insert(chars, normalize_char(char))
end
root = table.concat(chars, "_")
else
-- Root already has underscores (e.g., "أ_م_ن"), normalize each radical
local parts = mw.text.split(root, "_")
for i, part in ipairs(parts) do
parts[i] = normalize_char(part)
end
root = table.concat(parts, "_")
end
return root
end
--W: Construct the [1] parameter from root (جذر) and morphological pattern (وزن)
-- Example:
-- input: root="كتب", pattern="فعَل يفعُل"
-- output: "ك_ت_ب<I/a~u>"
-- `force_full_passive`, if true, appends ".pass" so the verb gets a full personal
-- passive paradigm instead of the module's default impersonal-passive guess for
-- vforms like I (past vowel i), V, VI, X and IIq (see |مبني للمجهول= on {{ar-conj}}).
-- `reduced`, if true, appends ".reduced" so an affix consonant assimilates into the
-- radical beside it: forms V/VI use the assimilated تاء التفعّل prefix (اِسَّمَّعَ)
-- instead of the default تَ- prefix (تَسَمَّعَ), and form IIIq assimilates اِفْعَنْلَلَ's
-- نون into a weak ل1 (اِهْبَيَّخَ for اِهْبَنْيَخَ) -- see |مدغم= on {{ar-conj}}. Not every
-- root with an assimilable radical is necessarily attested with the assimilated form, so
-- this isn't inferred automatically from the root; it must be requested.
local function construct_verb_spec(root, pattern, force_full_passive, reduced)
if not root or not pattern then
return nil
end
local normalized_root = normalize_root(root)
local form_code = MORPHOLOGICAL_PATTERN_TO_FORM[pattern]
if not form_code then
error("Unknown morphological pattern (وزن صرفي): " .. pattern)
end
if force_full_passive then
form_code = form_code .. ".pass"
end
if reduced then
form_code = form_code .. ".reduced"
end
return normalized_root .. "<" .. form_code .. ">"
end
-- Wrapper function that accepts جذر (root) and وزن (pattern) as parameters
-- Returns: verb_type (e.g., "فعل ثلاثي مُجرَّد صحيح سالم")
-- Example: export.get_verb_type({["جذر"] = "كتب", ["وزن"] = "فعَل يفعُل"})
function export.get_verb_type(args)
local verb_spec
if args["جذر"] and args["وزن"] then
verb_spec = construct_verb_spec(args["جذر"], args["وزن"])
elseif args[1] then
verb_spec = args[1]
else
error("Must provide either جذر and وزن, or a verb specification in args[1]")
end
local alternant_multiword_spec = export.do_generate_forms({[1] = verb_spec})
local _, verb_type = get_verb_info(alternant_multiword_spec)
return verb_type
end
-- Append two lists `l1` and `l2`, removing duplicates. If either is {nil}, just return the other.
local function combine_lists(l1, l2)
-- combine_footnotes() does exactly what we want.
return iut.combine_footnotes(l1, l2)
end
local function combine_metadata(data)
local src1 = data.form1
local src2 = data.form2
local dest = data.dest_form
dest.uncertain = src1.uncertain or src2.uncertain
if src1.genders and src2.genders and not m_table.deepEquals(src1.genders, src2.genders) then
-- do nothing
else
dest.genders = src1.genders or src2.genders
end
if src1.pos and src2.pos and src1.pos ~= src2.pos then
-- do nothing
else
dest.pos = src1.pos or src2.pos
end
-- Don't copy .alt, .gloss, .lit, .id, which describe a single term and don't extend to multiword terms.
dest.q = combine_lists(src1.q, src2.q)
dest.qq = combine_lists(src1.qq, src2.qq)
dest.l = combine_lists(src1.l, src2.l)
dest.ll = combine_lists(src1.ll, src2.ll)
end
-- Externally callable function to parse and conjugate a verb given user-specified arguments.
-- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms`
-- for each slot. If there are no values for a slot, the slot key will be missing. The value
-- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms(args, source_template, headword_head)
local PAGENAME = mw.loadData("Module:headword/data").pagename
local function in_template_space()
local nsText = mw.title.getCurrentTitle().nsText
return nsText == "Template" or nsText == "قالب"
end
-- Determine the verb spec we're being asked to generate the conjugation of. This may be taken from the current page
-- title or the value of |pagename=; but not when called from {{ar-verb form}}, where the page title is a
-- non-lemma form. Note that the verb spec may omit the lemma; e.g. it may be "<II>". For this reason, we use the
-- value of `pagename` computed here down below, when calling normalize_all_lemmas().
local pagename = source_template ~= "ar-verb form" and args.pagename or PAGENAME
local head = headword_head or pagename
--W: If both root (جذر) and morphological pattern (وزن) are provided, construct [1]
if args["جذر"] and args["جذر"] ~= "" and args["وزن"] and args["وزن"] ~= "" then
local constructed = construct_verb_spec(args["جذر"], args["وزن"], args["مبني للمجهول"], args["مدغم"])
if constructed and constructed ~= "" then
args[1] = constructed
end
end
local arg1 = args[1]
if not arg1 then
if (pagename == "ar-conj" or pagename == "ar-verb" or pagename == "ar-verb form" or pagename == "تصريف") and in_template_space() then
arg1 = "كتب<I/a~u.pass>"
else
arg1 = "<>"
end
end
-- When called from {{ar-verb form}}, determine the non-lemma form whose inflections we're being asked to
-- determine. This normally comes from the page title or the value of |pagename=.
local verb_form_of_form
if source_template == "ar-verb form" then
verb_form_of_form = args.pagename
if not verb_form_of_form then
if PAGENAME == "ar-verb form" and in_template_space() then
verb_form_of_form = "كتبت"
else
verb_form_of_form = PAGENAME
end
end
end
local incorporated_headword_head_into_lemma = false
if arg1:find("^<.*>$") then -- missing lemma
if head:find(" ") then
-- If multiword lemma, try to add arg spec after the first word.
-- Try to preserve the brackets in the part after the verb, but don't do it
-- if there aren't the same number of left and right brackets in the verb
-- (which means the verb was linked as part of a larger expression).
local first_word, post = rmatch(head, "^(.-)( .*)$")
local left_brackets = rsub(first_word, "[^%[]", "")
local right_brackets = rsub(first_word, "[^%]]", "")
if #left_brackets == #right_brackets then
arg1 = iut.remove_redundant_links(first_word) .. arg1 .. post
incorporated_headword_head_into_lemma = true
else
-- Try again using the form without links.
local linkless_head = m_links.remove_links(head)
if linkless_head:find(" ") then
first_word, post = rmatch(linkless_head, "^(.-)( .*)$")
arg1 = first_word .. arg1 .. post
else
error("Unable to incorporate <...> spec into explicit head due to a multiword linked verb or " ..
"unbalanced brackets; please include <> explicitly: " .. arg1)
end
end
else
-- Will be incorporated through `head` below in the call to normalize_all_lemmas().
incorporated_headword_head_into_lemma = true
end
end
local parse_props = {
parse_indicator_spec = parse_indicator_spec,
angle_brackets_omittable = true,
allow_blank_lemma = true,
}
local alternant_multiword_spec = iut.parse_inflected_text(arg1, parse_props)
alternant_multiword_spec.pos = pos or "verbs"
alternant_multiword_spec.args = args
alternant_multiword_spec.source_template = source_template
alternant_multiword_spec.verb_form_of_form = verb_form_of_form
alternant_multiword_spec.incorporated_headword_head_into_lemma = incorporated_headword_head_into_lemma
normalize_all_lemmas(alternant_multiword_spec, head)
detect_all_indicator_specs(alternant_multiword_spec)
local inflect_props = {
lang = lang,
slot_list = alternant_multiword_spec.verb_slots,
inflect_word_spec = conjugate_verb,
combine_metadata = combine_metadata,
-- We add links around the generated verbal forms rather than allow the entire multiword
-- expression to be a link, so ensure that user-specified links get included as well.
include_user_specified_links = true,
}
iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props)
if debug_translit then
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
if form.translit then
local full_form_translit = (lang:transliterate(m_links.remove_links(form.form)))
if full_form_translit ~= form.translit then
error(("Internal error: For slot '%s', form '%s' incremental translit '%s' not same as full translit '%s'"):
format(slot, form.form, form.translit, full_form_translit))
end
end
form.form = iut.remove_redundant_links(form.form)
end
end
end
-- Remove redundant brackets around entire forms.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = iut.remove_redundant_links(form.form)
end
end
-- Apply NFC-style normalization: reorder shadda+vowel to vowel+shadda
-- to match MediaWiki's automatic NFC normalization (which is applied on enwiktionary
-- but not in local Lua environments). This reverses the postprocessing step.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = apply_nfc_shadda(form.form)
end
end
determine_slot_uncertainty_from_forms(alternant_multiword_spec)
determine_verb_properties_from_forms(alternant_multiword_spec)
compute_categories_and_annotation(alternant_multiword_spec)
if args.json and source_template == "ar-conj" then
-- There is a circular reference in `base.alternant_multiword_spec`, which points back to top level.
iut.map_word_specs(alternant_multiword_spec, function(base)
base.alternant_multiword_spec = nil
end)
return require("Module:JSON").toJSON(alternant_multiword_spec)
end
return alternant_multiword_spec
end
-- Entry point for {{ar-conj}}. Template-callable function to parse and conjugate a verb given
-- user-specified arguments and generate a displayable table of the conjugated forms.
function export.show(frame)
local parent_args = frame:getParent() and frame:getParent().args or frame.args --W
local params = {
[1] = {},
["noautolinktext"] = {type = "boolean"},
["noautolinkverb"] = {type = "boolean"},
["t"] = {}, -- for use by {{ar-verb form}}; otherwise ignored
["id"] = {}, -- for use by {{ar-verb form}}; otherwise ignored
["pagename"] = {}, -- for testing/documentation pages
["json"] = {type = "boolean"}, -- for bot use
--W: additional parameters for ar.wiktionary.org
["جذر"] = {type = "string"}, --W: الجذر اللغوي, root
["وزن"] = {type = "string"}, --W: الوزن الصرفي, morphological pattern
["مبني للمجهول"] = {type = "boolean"}, --W: force a full personal passive paradigm,
-- overriding the default impersonal-passive guess for vforms like I (past vowel
-- i), V, VI, X and IIq
["مدغم"] = {type = "boolean"}, --W: assimilate the affix into the radical beside it:
-- forms V/VI's تاء التفعّل into the first radical (اِسَّمَّعَ instead of
-- تَسَمَّعَ), or form IIIq's نون into a weak ل1 (اِهْبَيَّخَ for اِهْبَنْيَخَ)
["كامل"] = {type = "boolean"}, --W: show full table (default is simplified table)
["بؤرة"] = {type = "string"}, --W: highlight the cells holding this form
["موسع"] = {type = "boolean"}, --W: show the table expanded (default: collapsed)
}
local args = require("Module:parameters").process(parent_args, params)
--W: If both root (جذر) and morphological pattern (وزن) are provided, construct [1]
if args["جذر"] and args["جذر"] ~= "" and args["وزن"] and args["وزن"] ~= "" then
local constructed = construct_verb_spec(args["جذر"], args["وزن"], args["مبني للمجهول"], args["مدغم"])
if constructed and constructed ~= "" then
args[1] = constructed
end
end
local alternant_multiword_spec = export.do_generate_forms(args, "ar-conj")
if type(alternant_multiword_spec) == "string" then
-- JSON return value
return alternant_multiword_spec
end
--W: |بؤرة= marks the cells holding a given form, so that a conjugated-form
-- page ([[Module:ar-verb-form]]) can show the reader where in the paradigm
-- the word they looked up actually sits. The slots have to be found before
-- show_forms(), which replaces each form list with rendered wikitext.
alternant_multiword_spec.focus_slots =
find_focus_slots(alternant_multiword_spec, args["بؤرة"])
--W: A table whose one relevant cell is highlighted is no use folded away, so
-- [[Module:ar-verb-form]] asks for it open. Lemma pages keep it collapsed.
alternant_multiword_spec.expanded = args["موسع"] or false
show_forms(alternant_multiword_spec)
--W: Choose table type: simplified (default) or full (comprehensive)
local table_html
if args["كامل"] then
table_html = make_table(alternant_multiword_spec)
else
table_html = make_table_ar(alternant_multiword_spec)
end
--W: don't add categories
--W: TODO: all lines with insert_cat() are to be removed.
-- return table_html ..
-- require("Module:utilities").format_categories(alternant_multiword_spec.categories, lang, nil, nil, force_cat)
return table_html
end
function export.verb_forms(frame)
local parargs = frame:getParent().args
local params = {
[1] = {},
[2] = {},
[3] = {},
[4] = {},
[5] = {},
pagename = {},
}
for _, form in ipairs(allowed_vforms) do
-- FIXME: We go up to 5 here. The code supports unlimited variants but it's unlikely we will ever see more than
-- 2.
for index = 1, 5 do
local prefix = index == 1 and form or form .. index
params[prefix .. "-pv"] = {}
for _, extn in ipairs { "", "-vn", "-ap", "-pp" } do
params[prefix .. extn] = {}
params[prefix .. extn .. "-head"] = {}
-- FIXME: No -tr?
params[prefix .. extn .. "-gloss"] = {}
end
end
end
local args = require("Module:parameters").process(parargs, params)
local i = 1
local past_vowel_re = "^[aui,]*$"
local combined_root = nil
if not args[i] or rfind(args[i], past_vowel_re) then
combined_root = args.pagename or mw.loadData("Module:headword/data").pagename
if not rfind(combined_root, "^([^ ]) ([^ ]) ([^ ])$") and not
rfind(combined_root, "^([^ ]) ([^ ]) ([^ ]) ([^ ])$") then
error("When inferring roots from page title, need three or four space-separated radicals: " .. combined_root)
end
elseif rfind(args[i], " ") then
combined_root = args[i]
i = i + 1
else
local separate_roots = {}
while args[i] and not rfind(args[i], past_vowel_re) do
table.insert(separate_roots, args[i])
i = i + 1
end
combined_root = table.concat(separate_roots, " ")
end
local past_vowel = args[i]
i = i + 1
if past_vowel and not rfind(past_vowel, past_vowel_re) then
error("Unrecognized past vowel, should be 'a', 'i', 'u', 'a,u', etc. or empty: " .. past_vowel)
end
-- Spaces interfere with parsing as a unit in [[Module:inflection utilities]], so replace with underscore.
combined_root = combined_root:gsub(" ", "_")
local split_root = rsplit(combined_root, "_")
-- Map from verb forms (I, II, etc.) to a table of verb properties,
-- which has entries e.g. for "verb" (either true to autogenerate the verb
-- head, or an explicitly specified verb head using e.g. argument "I-head"),
-- and for "verb-gloss" (which comes from e.g. the argument "I" or "I-gloss"),
-- and for "vn" and "vn-gloss", "ap" and "ap-gloss", "pp" and "pp-gloss".
local verb_properties = {}
for _, form in ipairs(allowed_vforms) do
local formpropslist = {}
local derivs = {{"verb", ""}, {"vn", "-vn"}, {"ap", "-ap"}, {"pp", "-pp"}}
local index = 1
while true do
local formprops = {}
local prefix = index == 1 and form or form .. index
if prefix == "I" then
formprops.pv = past_vowel
end
if args[prefix .. "-pv"] then
formprops.pv = args[prefix .. "-pv"]
end
for _, deriv in ipairs(derivs) do
local prop = deriv[1]
local extn = deriv[2]
if args[prefix .. extn] == "+" then
formprops[prop] = true
elseif args[prefix .. extn] == "-" then
formprops[prop] = false
elseif args[prefix .. extn] then
formprops[prop] = true
formprops[prop .. "-gloss"] = args[prefix .. extn]
end
if args[prefix .. extn .. "-head"] then
if formprops[prop] == nil then
formprops[prop] = true
end
formprops[prop] = args[prefix .. extn .. "-head"]
end
if args[prefix .. extn .. "-gloss"] then
if formprops[prop] == nil then
formprops[prop] = true
end
formprops[prop .. "-gloss"] = args[prefix .. extn .. "-gloss"]
end
end
if formprops.verb then
-- If a verb form specified, also turn on vn (unless form I, with
-- unpredictable vn) and ap, and maybe pp, according to form,
-- weakness and past vowel. But don't turn these on if there's
-- an explicit on/off specification for them (e.g. I-pp=-).
if form ~= "I" and formprops.vn == nil then
formprops.vn = true
end
if formprops.ap == nil then
formprops.ap = true
end
local weakness = weakness_from_radicals(form, split_root[1], split_root[2], split_root[3],
split_root[4])
if formprops.pp == nil and not vform_probably_no_passive(form,
weakness, rsplit(formprops.pv or "", ","), {}) then
formprops.pp = true
end
if formprops.verb == true or formprops.vn == true or formprops.ap == true or formprops.pp == true then
formprops.need_autogen = true
end
table.insert(formpropslist, formprops)
index = index + 1
else
break
end
end
table.insert(verb_properties, {form, formpropslist})
end
-- Go through and create the verb form derivations as necessary, when they haven't been explicitly given.
for _, vplist in ipairs(verb_properties) do
local vform = vplist[1]
for _, props in ipairs(vplist[2]) do
if props.need_autogen then
local form_with_vowels
if vform == "I" then
local pv = props.pv
if not pv then
-- Make up likely past vowels based on weakness and actual radical.
if split_root[3] == W then -- final-weak
form_with_vowels = "I/a~u"
elseif split_root[3] == Y then
form_with_vowels = "I/a~i"
elseif split_root[2] == W then --hollow
form_with_vowels = "I/u~u"
elseif split_root[2] == Y then
form_with_vowels = "I/i~i"
else
-- most common; doesn't matter so much since we're not displaying the non-past
form_with_vowels = "I/a~u"
end
else
local pvs = rsplit(pv, ",")
local vowel_sufs = {}
for _, pv in ipairs(pvs) do
local vowel_spec
if pv == "a" then
-- Make up likely past vowels based on weakness and actual radical.
if split_root[3] == W then -- final-weak
vowel_spec = "a~u"
elseif split_root[3] == Y then
vowel_spec = "a~i"
elseif split_root[2] == W then --hollow
vowel_spec = "a~u"
elseif split_root[2] == Y then
vowel_spec = "a~i"
else
-- most common; doesn't matter so much since we're not displaying the non-past
vowel_spec = "a~u"
end
elseif pv == "i" then
-- most common; doesn't matter so much since we're not displaying the non-past
vowel_spec = "i~a"
elseif pv == "u" then
-- most common; doesn't matter so much since we're not displaying the non-past
vowel_spec = "u~u"
else
error(("Internal error: Bad past vowel '%s' in {{ar-verb forms}}"):format(pv))
end
table.insert(vowel_sufs, vowel_spec)
end
form_with_vowels = "I/" .. table.concat(vowel_sufs, "/")
end
else
form_with_vowels = vform
end
local angle_bracket_spec = ("%s<%s.pass>"):format(combined_root, form_with_vowels)
local alternant_multiword_spec = export.do_generate_forms({angle_bracket_spec}, "ar-verb forms")
local function format_forms(forms)
if not forms then
return "-" -- FIXME: Throw an error?
end
local formatted = {}
for _, form in ipairs(forms) do
if form.translit then
table.insert(formatted, ("%s//%s"):format(form.form, form.translit))
else
table.insert(formatted, form.form)
end
end
return table.concat(formatted, "،")
end
if props.verb == true then
props.verb = format_forms(alternant_multiword_spec.forms.past_3ms)
end
for _, deriv in ipairs({"vn", "ap", "pp"}) do
if props[deriv] == true then
props[deriv] = format_forms(alternant_multiword_spec.forms[deriv])
end
end
end
end
end
-- Go through and output the result
local formtextarr = {}
for _, vplist in ipairs(verb_properties) do
local form = vplist[1]
for _, props in ipairs(vplist[2]) do
local textarr = {}
if props.verb then
local text = "* '''[[Appendix:Arabic verbs#Form " .. form .. "|Form " .. form .. "]]''': "
local linktext = {}
local splitheads = rsplit(props.verb, "[,،]")
for _, head in ipairs(splitheads) do
table.insert(linktext, m_links.full_link({lang = lang, term = head, gloss = props["verb-gloss"]}))
end
text = text .. table.concat(linktext, "، ")
table.insert(textarr, text)
for _, derivengl in ipairs({{"vn", "Verbal noun"}, {"ap", "Active participle"}, {"pp", "Passive participle"}}) do
local deriv = derivengl[1]
local engl = derivengl[2]
if props[deriv] then
local text = "** " .. engl .. ": "
local linktext = {}
local splitheads = rsplit(props[deriv], "[,،]")
for _, head in ipairs(splitheads) do
local ar, translit = head:match("^(.*)//(.-)$")
if not ar then
ar = head
end
table.insert(linktext, m_links.full_link {lang = lang, term = ar, tr = translit,
gloss = props[deriv .. "-gloss"]} )
end
text = text .. table.concat(linktext, "، ")
table.insert(textarr, text)
end
end
table.insert(formtextarr, table.concat(textarr, "\n"))
end
end
end
return table.concat(formtextarr, "\n")
end
-- Infer radicals from lemma headword (i.e. 3rd masculine singular past) and verb form (I, II, etc.). Throw an error if
-- headword is malformed. A given returned radical may be actually be a list of possible radicals, where the first one
-- should be used if the user didn't explicitly give the radical. If the list contains a field `ambig = true`, the
-- radical is considered ambiguous and should not be categorized. `is_reduced` indicates that the user specified
-- `.reduced` to indicate that the verb form is reduced by assimilation and/or haplology (typically archaic Koranic
-- forms such as اِدَّارَأَ instead of تَدَارَأَ; or اِسْطَاعَ instead of اِسْتِطَاعَ; etc.
function export.infer_radicals(data)
local headword, vform, passive, past_vowel, nonpast_vowel, is_reduced =
data.headword, data.vform, data.passive, data.past_vowel, data.nonpast_vowel, data.is_reduced
past_vowel = past_vowel or "-"
nonpast_vowel = nonpast_vowel or "-"
local function verify_vowel(vowel, param)
--W: A past/non-past vowel may legitimately be a form object {form=..., footnotes=...}
-- when the user attaches a footnote, e.g. <I/a[نادر]~u>, so compare the formval.
-- Comparing the raw value crashed on Lua 5.1 ("bad argument #2 to 'format'").
local formval = rget(vowel)
if formval ~= A and formval ~= I and formval ~= U and formval ~= "-" then
error(("Internal error: Bad value for %s: %s (should be Arabic diacritic vowel or '-')"):format(
param, dump(vowel)))
end
end
verify_vowel(past_vowel, "past_vowel")
verify_vowel(nonpast_vowel, "nonpast_vowel")
local ch = {}
local form_viii_assim, variant
-- sub out alif-madda for easier processing
headword = rsub(headword, AMAD, HAMZA .. ALIF)
local function infer_err(msg, noann)
local anns = {}
local nohead, novform
if noann == "nohead" then
nohead = true
elseif noann == "novform" then
novform = true
elseif noann == "nohead-vform" then
nohead = true
novform = true
elseif noann then
error(("Internal error: Unrecognized value for 'noann': %s"):format(dump(noann)))
end
if not nohead then
table.insert(anns, ("headword=%s"):format(data.headword))
end
if not novform then
table.insert(anns, ("verb form=%s"):format(data.vform))
end
anns = table.concat(anns, "، ")
if anns ~= "" then
anns = ": " .. anns
end
error(msg .. anns)
end
local len = ulen(headword)
local expected_length
-- extract the headword letters into an array
for i = 1, len do
table.insert(ch, usub(headword, i, i))
end
-- check that the letter at the given index is the given string, or
-- is one of the members of the given array
local function check(index, must)
local letter = ch[index]
if type(must) == "string" then
if not letter then
infer_err("Letter " .. index .. " is nil")
end
if letter ~= must then
infer_err(("For verb form %s, letter %s must be %s, not %s"):format(vform, index, must, letter),
"novform")
end
elseif not m_table.contains(must, letter) then
infer_err("For verb form " .. vform .. ", radical " .. index ..
" must be one of " .. table.concat(must, " ") .. ", not " .. letter, "novform")
end
end
-- Check that length of headword is within [min, max]
local function check_len(min, max)
if min and len < min then
infer_err(("Not enough letters for verb form %s, expected at least %s"):format(vform, min), "novform")
end
if max and len > max then
infer_err(("Too many letters for verb form %s, expected at most %s"):format(vform, max), "novform")
end
end
-- A form I verb beginning with w- keeps the w in the non-past unless the non-past vowel is a kasra or a
-- lowered kasra; see form_i_w_assimilated(), which the radicals path uses too. This used to be spelt out
-- here as "i~a or u~u", which missed a~u (وَجَلَ يَوْجُلُ).
local function form_I_w_non_assimilated()
return not form_i_w_assimilated(past_vowel, nonpast_vowel)
end
-- Convert radicals to canonical form (handle various hamza varieties and check for misplaced alif or alif maqṣūra;
-- legitimate cases of these letters are handled above).
local function convert(rad, index)
if type(rad) == "table" then
for i, r in ipairs(rad) do
rad[i] = convert(r, index)
end
return rad
elseif rad == HAMZA_ON_ALIF or rad == HAMZA_UNDER_ALIF or
rad == HAMZA_ON_W or rad == HAMZA_ON_Y then
return HAMZA
elseif rad == AMAQ then
infer_err("Radical " .. index .. " must not be alif maqṣūra")
elseif rad == ALIF then
infer_err("Radical " .. index .. " must not be alif")
else
return rad
end
end
local quadlit = vform:find("q$")
-- find first radical, start of second/third radicals, check for
-- required letters
local radstart, rad1, rad2, rad3, rad4
local weakness
if vform == "I" or vform == "II" then
rad1 = ch[1]
radstart = 2
elseif vform == "III" then
rad1 = ch[1]
check(2, {ALIF, W}) -- W occurs in passive-only verbs
radstart = 3
elseif vform == "IV" then
-- this would be alif-madda but we replaced it with hamza-alif above.
if ch[1] == HAMZA and ch[2] == ALIF then
rad1 = HAMZA
else
check(1, HAMZA_ON_ALIF)
rad1 = ch[2]
end
radstart = 3
elseif vform == "V" then
check(1, is_reduced and ALIF or T)
rad1 = ch[2]
radstart = 3
elseif vform == "VI" then
check(1, is_reduced and ALIF or T)
if ch[2] == AMAD then
rad1 = HAMZA
radstart = 3
else
rad1 = ch[2]
check(3, {ALIF, W}) -- W occurs in passive-only verbs
radstart = 4
end
elseif vform == "VII" then
check(1, ALIF)
if is_reduced then
check(2, M)
rad1 = M
radstart = 3
else
check(2, N)
rad1 = ch[3]
radstart = 4
end
elseif vform == "VIII" then
check(1, ALIF)
rad1 = ch[2]
if rad1 == "د" then
rad1 = {"د", "ذ"} -- not considered ambiguous since it's usually د
radstart = 3
form_viii_assim = "دّ"
elseif rad1 == "ظ" and ch[3] == "ط" and len >= 5 then
-- [[اظطلم]], variant of [[اظلم]]
radstart = 4
form_viii_assim = "ظْط"
elseif rad1 == "ذ" and ch[3] == "د" and len >= 5 then
-- [[اذدكر]], variant of [[اذكر]]
radstart = 4
form_viii_assim = "ذْد"
elseif rad1 == T or rad1 == "ث" or rad1 == "ذ" or rad1 == "ط" or rad1 == "ظ" then
radstart = 3
form_viii_assim = rad1 .. SH
elseif rad1 == "ز" then
check(3, "د")
radstart = 4
form_viii_assim = "زْد"
elseif rad1 == "ص" or rad1 == "ض" then
check(3, "ط")
radstart = 4
form_viii_assim = rad1 .. SK .. "ط"
else
check(3, T)
radstart = 4
rad1 = convert(rad1, 1)
form_viii_assim = rad1 .. SK .. "ت"
end
if rad1 == T then
-- Radical is ambiguous, might be ت or و or ي but doesn't affect conjugation. Note that there are no
-- form-VIII verbs with initial radical ي given in Hans Wehr but Lane mentions at least:
-- - (page 2973) اِتَّأَسَ, with assimilation of the ي to ت, from root ي ء س;
-- - (page 2975) اِتَّبَسَ non-past يَتَّبِسُ and alternative اِيتَبَسَ non-past يَاتَبِسُ from the root ي ب س;
-- - (page 2976) اِتَّسَرَ non-past يَتَّسِرُ or alternatively يَأْتَسِرُ with hamza preserved from the root ي س ر.
-- These alternative forms seem very rare and probably not worth worrying about, but if we want to handle
-- them, we can do it when the time comes.
rad1 = {T, W, Y, ambig = true}
-- اِتَّخَذَ irregularly has hamza as the radical but assimilates like و
if ch[3] == "خ" and ch[4] == "ذ" then
rad1[4] = HAMZA
end
end
elseif vform == "IX" then
check(1, ALIF)
rad1 = ch[2]
radstart = 3
elseif vform == "X" then
check(1, ALIF)
check(2, S)
if is_reduced then
rad1 = ch[3]
radstart = 4
else
check(3, T)
rad1 = ch[4]
radstart = 5
end
elseif vform == "Iq" then
rad1 = ch[1]
rad2 = ch[2]
radstart = 3
elseif vform == "IIq" then
check(1, T)
rad1 = ch[2]
rad2 = ch[3]
radstart = 4
elseif vform == "IIIq" then
check(1, ALIF)
rad1 = ch[2]
rad2 = ch[3]
check(4, N)
radstart = 5
elseif vform == "IVq" then
check(1, ALIF)
rad1 = ch[2]
rad2 = ch[3]
radstart = 4
elseif vform == "XI" then
check_len(5, 5)
check(1, ALIF)
rad1 = ch[2]
rad2 = ch[3]
check(4, ALIF)
rad3 = ch[5]
weakness = "sound"
elseif vform == "XII" then
check(1, ALIF)
rad1 = ch[2]
if ch[3] ~= ch[5] then
infer_err("For verb form XII, letters 3 and 5 should be the same", "novform")
end
check(4, W)
radstart = 5
elseif vform == "XIII" then
check_len(5, 5)
check(1, ALIF)
rad1 = ch[2]
rad2 = ch[3]
check(4, W)
rad3 = ch[5]
if rad3 == AMAQ then
weakness = "final-weak"
else
weakness = "sound"
end
elseif vform == "XIV" then
check_len(6, 6)
check(1, ALIF)
rad1 = ch[2]
rad2 = ch[3]
check(4, N)
rad3 = ch[5]
if ch[6] == AMAQ then
check_waw_ya(rad3)
weakness = "final-weak"
else
if ch[5] ~= ch[6] then
infer_err("For verb form XIV, letters 5 and 6 should be the same", "novform")
end
weakness = "sound"
end
elseif vform == "XV" then
check_len(6, 6)
check(1, ALIF)
rad1 = ch[2]
rad2 = ch[3]
check(4, N)
rad3 = ch[5]
if rad3 == Y then
check(6, ALIF)
else
check(6, AMAQ)
end
weakness = "sound"
else
error("Internal error: Unrecognized verb form " .. vform)
end
-- Process the last two radicals. RADSTART is the index of the first of the two. If it's nil then all radicals have
-- already been processed above, and we don't do anything.
if radstart then
-- There must (normally) be one or two letters left.
if len == radstart then
if vform == "I" and ch[len] == Y then
-- short form حَيَّ
weakness = "final-weak"
rad2 = Y
rad3 = Y
variant = "short"
elseif vform == "IV" and rad1 == "ر" and ch[len] == AMAQ then
-- irregular verb أَرَى
weakness = "final-weak"
rad2 = HAMZA
rad3 = Y
elseif vform == "X" and rad1 == "ح" and ch[len] == AMAQ then
-- irregular verb اِسْتَحَى
weakness = "final-weak"
rad2 = Y
rad3 = Y
variant = "short"
else
-- If one letter left, then it's a geminate verb. If the letter is alif or alif maqṣūra, it will trigger
-- an error down the line.
if vform_supports_geminate(vform) then
weakness = "geminate"
rad2 = ch[len]
rad3 = ch[len]
if vform == "III" or vform == "VI" then
variant = "short"
end
else
infer_err("Apparent geminate verb, but geminate verbs not allowed for this verb form")
end
end
elseif quadlit then
-- Process last two radicals of a quadriliteral verb form.
rad3 = ch[radstart]
rad4 = ch[radstart + 1]
expected_length = radstart + 1
check_len(expected_length)
if rad4 == AMAQ or rad4 == ALIF and rad3 == Y or rad4 == Y then
-- rad4 can be Y in passive-only verbs.
if vform_supports_final_weak(vform) then
weakness = "final-weak"
-- Ambiguous radical; randomly pick wāw as radical (but avoid two wāws in a row); it could be wāw or
-- yāʾ, but doesn't affect the conjugation.
rad4 = rad3 == W and {Y, W, ambig = true} or {W, Y, ambig = true}
else
infer_err("Last radical is " .. rad4 .. " but verb form " .. vform ..
" doesn't support final-weak verbs", "novform")
end
else
weakness = "sound"
end
else
-- Process last two radicals of a triliteral verb form.
rad2 = ch[radstart]
rad3 = ch[radstart + 1]
expected_length = radstart + 1
check_len(expected_length)
if vform == "I" and (is_waw_ya(rad3) or rad3 == ALIF or rad3 == AMAQ) then
local inferred_past_vowel, inferred_nonpast_vowel
-- Check for final-weak form I verb. It can end in tall alif (rad3 = wāw) or alif maqṣūra (rad3 = yāʾ)
-- or a wāw or yāʾ (with a past vowel of i or u, e.g. nasiya/yansā "forget" or with a passive-only
-- verb).
if rad1 == W and not form_I_w_non_assimilated() then
weakness = "assimilated+final-weak"
else
weakness = "final-weak"
end
if rad3 == ALIF then
rad3 = W
inferred_past_vowel = A
inferred_nonpast_vowel = U
if is_passive_only(passive) then
infer_err("Final-weak form-I passive verbs should end in yāʔ (ي), not tall alif (ا)", "novform")
end
elseif rad3 == AMAQ then
rad3 = Y
inferred_past_vowel = A
inferred_nonpast_vowel = I
if is_passive_only(passive) then
infer_err("Final-weak form-I passive verbs should end in yāʔ (ي), not alif maqṣūra (ى)",
"novform")
end
elseif rad1 == "ح" and rad2 == Y and rad3 == Y then
-- Long variant حَيِيَ.
inferred_past_vowel = I
inferred_nonpast_vowel = A
variant = "long"
else
if not is_passive_only(passive) then
-- does a non-passive final-weak verb in -uwa ever happen? (YES: e.g. [[رجو]] "to be slack")
inferred_past_vowel = rad3 == Y and I or U
inferred_nonpast_vowel = A
end
-- Ambiguous radical; randomly pick wāw as radical (but avoid two wāws); it could be wāw or yāʾ, but
-- doesn't affect the conjugation.
rad3 = (rad1 == W or rad2 == W) and {Y, W, ambig = true} or {W, Y, ambig = true} -- ambiguous
end
if inferred_past_vowel then
local raw_past_vowel = rget(past_vowel)
local raw_nonpast_vowel = rget(nonpast_vowel)
if raw_past_vowel ~= "-" then
if raw_past_vowel ~= inferred_past_vowel then
infer_err(("Final-weak form-I verb inferred past vowel %s, which disagrees with " ..
"explicitly specified %s"):format(undia[inferred_past_vowel], undia[raw_past_vowel]), "novform")
else
-- in case of footnote in past_vowel
inferred_past_vowel = past_vowel
end
end
if raw_nonpast_vowel ~= "-" and raw_nonpast_vowel ~= A and inferred_nonpast_vowel == U then
-- if inferred as I or A, the reality can be the reverse; form-I final-weak verbs with a~a and
-- i~i exist, e.g. سَعَى/يَسْعَى, وَلِيَ/يَلِي. Weird verb [[صها]] (also written [[صهى]]) has non-past
-- يصهى so we can't throw an error in this situation.
if raw_nonpast_vowel ~= inferred_nonpast_vowel then
infer_err(("Final-weak form-I verb inferred non-past vowel %s, which disagrees with " ..
"explicitly specified %s"):format(undia[inferred_nonpast_vowel], undia[raw_nonpast_vowel]), "novform")
else
-- in case of footnote in nonpast_vowel
inferred_nonpast_vowel = nonpast_vowel
end
end
end
if not is_passive_only(passive) then
if rget(past_vowel) == "-" then
past_vowel = inferred_past_vowel
end
if rget(nonpast_vowel) == "-" then
nonpast_vowel = inferred_nonpast_vowel
end
end
elseif vform == "IX" and is_waw_ya(rad3) and len == radstart + 2 and ch[len] == AMAQ then
-- Final-weak form IX verbs like اِرْعَوَى "to desist, to repent, to see the light".
weakness = "final-weak"
expected_length = radstart + 2
elseif vform == "X" and rad1 == "ح" and rad2 == Y and rad3 == ALIF then
-- Long variant اِسْتَحْيَا.
weakness = "final-weak"
rad3 = Y
variant = "long"
elseif rad3 == AMAQ or rad2 == Y and rad3 == ALIF or rad3 == Y then
-- rad3 == Y happens in passive-only verbs.
if vform_supports_final_weak(vform) then
weakness = "final-weak"
else
infer_err("Last radical is " .. rad3 .. " but verb form doesn't support final-weak verbs")
end
-- Ambiguous radical; randomly pick wāw as radical (but avoid two wāws); it could be wāw or yāʾ, but
-- doesn't affect the conjugation.
rad3 = (rad1 == W or rad2 == W) and {Y, W, ambig = true} or {W, Y, ambig = true}
elseif rad2 == ALIF then
if vform_supports_hollow(vform) then
weakness = "hollow"
local function set_past_to_a()
if req(past_vowel, A) then
-- already set
elseif req(past_vowel, "-") or req(past_vowel, rget(nonpast_vowel)) then
past_vowel = A
else
infer_err(("Form I hollow verb with nonpast vowel set to '%s' must have past vowel set to 'a' or the same value, not %s"):
format(undia[rget(nonpast_vowel)], undia[rget(past_vowel)]), "novform")
end
end
if vform == "I" and req(nonpast_vowel, U) then
rad2 = W
set_past_to_a()
elseif vform == "I" and req(nonpast_vowel, I) then
rad2 = Y
set_past_to_a()
else
if req(nonpast_vowel, A) and not req(past_vowel, I) then
infer_err(("Form I hollow verb with nonpast vowel set to 'a' must have past vowel set to 'i', not %s"):
format(undia[rget(past_vowel)]), "novform")
end
-- Ambiguous radical; could be wāw or yāʾ; if verb form I, it's critical to get this right, and
-- the caller checks for this situation and throws an error if non-past vowel is "a" and second
-- radical isn't explicitly given.
rad2 = {W, Y, ambig = true, need_radical = true}
end
else
infer_err("Second radical is alif but verb form doesn't support hollow verbs")
end
elseif vform == "I" and rad1 == W and not form_I_w_non_assimilated() then
weakness = "assimilated"
elseif rad2 == rad3 and (vform == "III" or vform == "VI") then
weakness = "geminate"
variant = "long"
else
weakness = "sound"
end
end
if expected_length then
check_len(expected_length, expected_length)
end
end
rad1 = convert(rad1, 1)
rad2 = convert(rad2, 2)
rad3 = convert(rad3, 3)
rad4 = convert(rad4, 4)
if not weakness then
error("Internal error: Returned weakness from infer_radicals() is nil")
end
return {
weakness = weakness,
rad1 = rad1,
rad2 = rad2,
rad3 = rad3,
rad4 = rad4,
past_vowel = past_vowel,
nonpast_vowel = nonpast_vowel,
form_viii_assim = form_viii_assim,
variant = variant,
}
end
-- bot interface to infer_radicals()
function export.infer_radicals_json(frame)
local iparams = {
headword = {},
vform = {},
passive = {},
past_vowel = {},
nonpast_vowel = {},
is_reduced = {type = "boolean"},
}
local iargs = require("Module:parameters").process(frame.args, iparams)
return require("Module:JSON").toJSON(export.infer_radicals(iargs))
end
-- Infer vocalization from participle headword (active or passive), verb form (I, II, etc.) and whether the headword is
-- active or passive. Throw an error if headword is malformed. Returned radicals may contain Latin letters "t", "w" or "y"
-- indicating ambiguous radicals guessed to be tāʾ, wāw or yāʾ respectively.
function export.infer_participle_vocalization(headword, vform, weakness, is_active)
local chars = {}
local orig_headword = headword
-- Sub out alif-madda for easier processing.
headword = rsub(headword, AMAD, HAMZA .. ALIF)
local len = ulen(headword)
-- Extract the headword letters into an array.
for i = 1, len do
table.insert(chars, usub(headword, i, i))
end
local function form_intro_error_msg()
return ("For verb form %s %s%s participle %s, "):format(vform, orig_headword ~= headword and "normalized " or
"", is_active and "active" or "passive", headword)
end
local function err(msg)
error(form_intro_error_msg() .. msg, 1)
end
-- Check that length of headword is within [min, max].
local function check_len(min, max)
if min and len < min then
err(("expected at least %s letters but saw %s"):format(min, len))
elseif max and len > max then
err(("expected at most %s letters but saw %s"):format(max, len))
end
end
-- Get the character at `ind`, making sure it exists.
local function c(ind)
check_len(ind)
return chars[ind]
end
-- Check that the letter at the given index is the given string, or is one of the members of the given array
local function check(index, must)
local letter = chars[index]
local function make_possible_values()
if type(must) == "string" then
return must
else
return list_to_text(must, nil, " or ")
end
end
if not letter then
err(("expected a letter (specifically %s) at position %s, but participle is too short"):format(
make_possible_values(), index))
end
local matches
if type(must) == "string" then
matches = letter == must
else
matches = m_table.contains(must, letter)
end
if not matches then
err(("letter %s at index %s must be %s"):format(letter, index, make_possible_values()))
end
end
local function check_weakness(values, allow_missing, invert_condition)
local function make_possible_weaknesses()
for i, val in ipairs(values) do
values[i] = "'" .. val .. "'"
end
return list_to_text(values, nil, " or ")
end
if allow_missing and invert_condition then
error("Internal error: Can't specify both allow_missing and invert_condition")
end
if not weakness then
if allow_missing or invert_condition then
return
else
err(("weakness is unspecified but must be %s"):format(make_possible_weaknesses()))
end
else
local matches = m_table.contains(values, weakness)
if invert_condition and matches then
err(("weakness '%s' must not be %s"):format(weakness, make_possible_weaknesses()))
elseif not invert_condition and not matches then
err(("weakness '%s' must be %s"):format(weakness, make_possible_weaknesses()))
end
end
end
local vocalized
local function handle_possibly_final_weak(sound_prefix, expected_length)
check_len(expected_length, expected_length)
if c(expected_length) == AMAQ then
-- passive final-weak
if is_active then
err("participle in -ِى only allowed for passive participles")
end
check_weakness({"final-weak", "assimilated+final-weak"}, "allow missing")
vocalized = sound_prefix .. AN .. AMAQ
else
-- all others behave as if sound
check_weakness({"final-weak", "assimilated+final-weak"}, nil, "invert condition")
vocalized = sound_prefix .. (is_active and I or A) .. c(expected_length)
end
end
if not (vform == "I" and is_active) then
-- all participles except verb form I active begin in م-.
check(1, M)
end
if vform == "I" then
if is_active then
check(2, ALIF)
local sound_prefix = c(1) .. AA .. c(3)
if len == 3 then
if c(3) == HAMZA then
-- Either hollow with hamzated third radical, e.g. [[شاء]] active participle 'شَاءٍ', or final-weak
-- with hamzated second radical, e.g. [[رأى]] active participle 'رَاءٍ'. Theoretically (?), also
-- geminate with hamzated second/third radical, but I don't know if any such verbs exist.
if weakness == "geminate" then
vocalized = sound_prefix .. SH
else
check_weakness({"hollow", "final-weak"}, "allow missing")
vocalized = sound_prefix .. IN
end
else
check_weakness({"final-weak", "geminate"})
if weakness == "geminate" then
vocalized = sound_prefix .. SH
else
vocalized = sound_prefix .. IN
end
end
else
check_len(4, 4)
-- we will convert back to alif maqṣūra below as needed
vocalized = sound_prefix .. I .. c(4)
end
else
-- assimilated verbs: regular, e.g. مَوْزُون "weighed"
-- geminate verbs: regular, e.g. مَبْلُول "moistened"
-- third-hamzated verbs: مَبْرُوء
-- hollow verbs: مَقُود "led, driven"; مَزِيد "added, increased"
-- hollow first-hamzated verbs: مَئِيض "returned, reverted"; مَأْيُوس "despaired" (NOTE: formation is sound);
-- مَأُود or مَؤُود "bent; depleted"
-- hollow third-hamzated verbs: مَشِيء "willed, intended", مَضُوء "glittered?"
-- final-weak: مَلْقِيّ "found, encountered"; مَصْغُوّ "inclined"
-- hollow + final-weak: مَشْوِيّ "fried, grilled", مَهْوِيّ "loved"
-- first-hamzated + hollow + final-weak: مَأْوِيّ "received hospitably"
local sound_prefix = MA .. c(2) .. SK .. c(3)
if len == 5 then
-- sound, assimilated or geminate
check(4, W)
vocalized = sound_prefix .. UU .. c(5)
else
check_len(4, 4)
if c(4) == W then
-- final-weak third-wāw
vocalized = sound_prefix .. U .. W .. SH
elseif c(4) == Y then
-- final-weak third-yāʾ
vocalized = sound_prefix .. I .. Y .. SH
else
-- hollow
check(3, {W, Y})
if c(3) == W then
vocalized = MA .. c(2) .. UU .. c(4)
else
vocalized = MA .. c(2) .. II .. c(4)
end
end
end
end
elseif vform == "II" or vform == "V" or vform == "XII" or vform == "XIII" or vform == "Iq" or vform == "IIq" or
vform == "IIIq" then
local sound_prefix, expected_length
if vform == "II" then
sound_prefix = MU .. c(2) .. A .. c(3) .. SH
expected_length = 4
elseif vform == "V" then
check(2, T)
sound_prefix = MU .. T .. A .. c(3) .. A .. c(4) .. SH
expected_length = 5
elseif vform == "XII" then
-- e.g. [[احدودب]] "to be or become convex or humpbacked", مُحْدَوْدِب (active);
-- [[اثنونى]] "to be bent; to be doubled up", مُثْنَوْنٍ (active)
check(4, W)
if c(3) ~= c(5) then
err(("third letter %s should be the same as the fifth letter %s"):format(c(3), c(5)))
end
sound_prefix = MU .. c(2) .. SK .. c(3) .. A .. W .. SK .. c(5)
expected_length = 6
elseif vform == "XIII" then
-- e.g. [[اخروط]] "to get entangled; to extend", مُخْرَوِّط (active), مُخْرَوَّط (passive)
check(4, W)
sound_prefix = MU .. c(2) .. SK .. c(3) .. A .. W .. SH
expected_length = 5
elseif vform == "Iq" then
sound_prefix = MU .. c(2) .. A .. c(3) .. SK .. c(4)
expected_length = 5
elseif vform == "IIq" then
check(2, T)
sound_prefix = MU .. T .. A .. c(3) .. A .. c(4) .. SK .. c(5)
expected_length = 6
elseif vform == "IIIq" then
-- e.g. [[اخرنطم]] "to be proud and angry"
check(4, T)
sound_prefix = MU .. c(2) .. SK .. c(3) .. A .. N .. SK .. c(5)
expected_length = 6
else
error("Internal error: Unhandled verb form " .. vform)
end
if len == expected_length - 1 then
-- active final-weak
if not is_active then
err(("length-%s participle only allowed for active participles"):format(len))
end
check_weakness({"final-weak", "assimilated+final-weak"}, "allow missing")
vocalized = sound_prefix .. IN
else
handle_possibly_final_weak(sound_prefix, expected_length)
end
elseif vform == "III" or vform == "VI" then
local sound_prefix, expected_length
if vform == "VI" then
check(2, T)
check(4, ALIF)
sound_prefix = MU .. T .. A .. c(3) .. AA .. c(5)
expected_length = 6
else
sound_prefix = MU .. c(2) .. AA .. c(4)
expected_length = 5
end
if len == expected_length - 1 then
-- active final-weak or active or passive geminate
if is_active then
check_weakness({"geminate", "final-weak", "assimilated+final-weak"})
if weakness == "geminate" then
vocalized = sound_prefix .. SH
else
vocalized = sound_prefix .. IN
end
else
check_weakness({"geminate"}, "allow missing")
vocalized = sound_prefix .. SH
end
else
handle_possibly_final_weak(sound_prefix, expected_length)
end
elseif vform == "IV" or vform == "X" then
-- form IV:
-- sound: مُرْسِخ (active, "entrenching"), مُرْسَخ (passive, "entrenched")
-- first-hamzated (like sound): مُؤْيِس (active, "causing to despair"), مُؤْيَس (passive, "caused to despair")
-- final-weak: مُكْرٍ (active, "renting out"), مُكْرًى (passive, "rented out")
-- assimilated: مُورِد (active, "transferring"), مُورَد (passive, "transferred"); same when first-Y, e.g.
-- أَيْقَنَ "to be certain of": مُوقِن (active), مُوقَن (passive)
-- assimilated + final-weak: مُورٍ (active, "setting fire, kindling"), مُورًى (passive, "set fire, kindled")
-- geminate: مُمِدّ (active, "granting, helping"), مُمَدّ (passive, "granted, helped")
-- hollow: مُزِيل (active, "eliminating"), مُزَال (passive, "eliminated")
-- hollow + final-weak: مُعْيٍ (active, "tiring"), مُعْيًى (passive, "tired")
local sound_prefix, expected_length
if vform == "X" then
check(2, S)
check(3, T)
sound_prefix = MU .. S .. SK .. T .. A .. c(4)
expected_length = 6
else
sound_prefix = MU .. c(2)
expected_length = 4
end
if len == expected_length and c(len - 1) == Y and c(len) ~= AMAQ then
-- active hollow
if not is_active then
err("this shape only allowed for active participles")
end
check_weakness({"hollow"}, "allow missing")
vocalized = sound_prefix .. II .. c(len)
elseif len == expected_length and c(len - 1) == ALIF then
-- passive hollow
if is_active then
err("this shape only allowed for passive participles")
end
check_weakness({"hollow"}, "allow missing")
vocalized = sound_prefix .. AA .. c(len)
elseif len == expected_length - 1 then
-- active final-weak or active or passive geminate
if is_active then
check_weakness({"geminate", "final-weak", "assimilated+final-weak"})
if weakness == "geminate" then
vocalized = sound_prefix .. I .. c(len) .. SH
elseif vform == "IV" and c(2) == W then
-- assimilated final-weak
vocalized = sound_prefix .. c(len) .. IN
else
vocalized = sound_prefix .. SK .. c(len) .. IN
end
else
check_weakness({"geminate"}, "allow missing")
vocalized = sound_prefix .. A .. c(len) .. SH
end
else
if vform == "IV" and c(2) == W then
-- assimilated, possibly final-weak
sound_prefix = sound_prefix .. c(expected_length - 1)
else
sound_prefix = sound_prefix .. SK .. c(expected_length - 1)
end
handle_possibly_final_weak(sound_prefix, expected_length)
end
elseif vform == "VII" or vform == "VIII" then
-- form VII (passive participles are fairly rare but do exist):
-- sound: مُنْكَتِب (active "subscribing"), مُنْكَتَب (passive "subscribed")
-- geminate: مُنْضَمّ (both active "joining, containing" and passive "joined, contained")
-- final-weak: مُنْطَلٍ (active "fooling (someone)"), مُنْطَلًى (passive "fooled")
-- final-weak with medial wāw: مُنْطَوٍ (active "involving"), مُنْطَوًى (passive "involved")
-- hollow: مُنْقَاد (both active "complying with" and passive "complied with")
--
-- for form VIII, the same variants exist but things are complicated by assimilations involving the template T.
-- sound third-hamzated no assimilation: مُبْتَدِئ (active "beginning"), مُبْتَدَأ (passive "begun")
-- geminate no assimilation: مُبْتَزّ (both active "robbing" and passive "robbed")
-- final-weak no assimilation: مُبْتَنٍ (active "building"), مُبْتَنًى (passive "built")
-- final-weak with medial wāw no assimilation: مُحْتَوٍ (active "containing"), مُحْتَوًى (passive "contained")
-- hollow no assimilation: مُخْتَار (both active "choosing" and passive "chosen")
--
-- sound with total assimilation: مُتَّبِع (active "following"), مُتَّبَع (passive "followed")
-- sound with total assimilation, assimilating wāw: مُتَّعِد (active "threatening"), مُتَّعَد (passive "threatened")
-- sound with total assimilation, irregularly assimilating hamza: مُتَّخِذ (active "taking"), مُتَّخَذ (passive "taken")
-- sound with total assimilation (to ḏāl, producing dāl): مُدَّخِر (active "reserving"), مُدَّخَر (passive "reserved")
-- sound with total assimilation (to ḏāl): مُذَّكِر (active "remembering"), مُذَّكَر (passive "remembered")
-- sound with total assimilation (to ṭāʔ): مُطَّرِح (active "discarding"), مُطَّرَح (passive "discarded")
-- sound with total assimilation (to ẓāʔ): مُظَّلِم (active "tolerating"), مُظَّلَم (passive "tolerated")
-- final-weak with total assimilation, assimilating wāw: مُتَّقٍ (active "guarding against"), مُتَّقًى (passive "guarded against")
-- final-weak with total assimilation (to ṯāʔ): مُثَّنٍ (active "undulating"), مُثَّنًى (passive "undulated")
-- final-weak with total assimilation (to dāl): مُدَّعٍ (active "claiming"), مُدَّعًى (passive "claimed")
-- sound with partial assimilation (to zayn): مُزْدَهِر (active "thriving"), مُزْدَهَر (passive "thrived")
-- sound with medial wāw with partial assimilation (to zayn): مُزْدَوِج (active "appearing twice")
-- sound with partial assimilation (to ṣād): مُصْطَبِح (active "illuminating"), مُصْطَبَح (passive, "illuminated")
-- sound with partial assimilation (to ḍād): مُضْطَرِب (active "to be disturbed"; no passive)
-- geminate with partial assimilation (to ṣād): مُصْطَبّ (both active "effusing" and passive "effused")
-- geminate with partial assimilation (to ḍād): مُضْطَرّ (both active "forcing" and passive "forced")
-- final-weak with partial assimilation (to ṣād): مُصْطَلٍ (active "warming"), مُصْطَلًى (passive "warmed")
-- hollow with partial assimilation (to zayn): مُزْدَاد (both active "increasing" and passive "increased")
-- hollow with partial assimilation (to ṣad): مُصْطَاد (both active "hunting" and passive "hunted")
local sound_prefix, sufind
if vform == "VII" then
check(2, N)
sound_prefix = MU .. N .. SK .. c(3)
sufind = 4
else
local c2 = c(2)
if c2 == T or c2 == "د" or c2 == "ث" or c2 == "ذ" or c2 == "ط" or c2 == "ظ" then
-- full assimilation
sound_prefix = MU .. c2 .. SH
sufind = 3
else
-- partial or no assimilation
if c2 == "ز" then
check(3, "د")
elseif c2 == "ص" or c2 == "ض" then
check(3, "ط")
else
check(3, T)
end
sound_prefix = MU .. c2 .. SK .. c(3)
sufind = 4
end
end
if c(sufind) == ALIF then
-- hollow, active or passive
check_len(sufind + 1, sufind + 1)
check_weakness({"hollow"}, "allow missing")
vocalized = sound_prefix .. AA .. c(sufind + 1)
elseif len == sufind then
-- active final-weak or active or passive geminate
if is_active then
check_weakness({"geminate", "final-weak", "assimilated+final-weak"})
if weakness == "geminate" then
vocalized = sound_prefix .. A .. c(len) .. SH
else
vocalized = sound_prefix .. A .. c(len) .. IN
end
else
check_weakness({"geminate"}, "allow missing")
vocalized = sound_prefix .. A .. c(len) .. SH
end
else
sound_prefix = sound_prefix .. A .. c(sufind)
handle_possibly_final_weak(sound_prefix, sufind + 1)
end
elseif vform == "IX" then
check_len(4, 4)
vocalized = MU .. c(2) .. SK .. c(3) .. A .. c(4) .. SH
elseif vform == "IVq" then
-- e.g. [[اذلعب]] "to scamper away", مُذْلَعِبّ (active), مُذْلَعَبّ (passive);
-- [[اطمأن]] "to remain quietly; to be certain", مُطْمَئِنّ (active), مُطْمَأَنّ (passive)
check_len(5, 5)
local sound_prefix = MU .. c(2) .. SK .. c(3) .. A .. c(4)
if is_active then
vocalized = sound_prefix .. I .. c(5) .. SH
else
vocalized = sound_prefix .. A .. c(5) .. SH
end
elseif vform == "XI" then
check_len(5, 5)
check(4, ALIF)
vocalized = MU .. c(2) .. SK .. c(3) .. AA .. c(5) .. SH
-- e.g. [[احمار]] "to turn red, to blush", مُحْمَارّ (active)
elseif vform == "XIV" or vform == "XV" then
-- FIXME: Implement. No examples in Wiktionary currently; need to look up in a grammar.
error("Support for verb form " .. vform .. " not implemented yet")
else
error("Don't recognize verb form " .. vform)
end
vocalized = rsub(vocalized, HAMZA .. AA, AMAD)
local reconstructed_headword = lang:makeEntryName(vocalized)
if reconstructed_headword ~= orig_headword then
error(("Internal error: Vocalized participle %s doesn't match original participle %s"):format(
vocalized, orig_headword))
end
-- Apply NFC-style normalization to match MediaWiki's automatic normalization
return apply_nfc_shadda(vocalized)
end
function export.infer_participle_vocalization_json(frame)
local iparams = {
[1] = {required = true},
[2] = {required = true},
["weakness"] = {},
["passive"] = {type = "boolean"}
}
local iargs = require("Module:parameters").process(frame.args, iparams)
return export.infer_participle_vocalization(iargs[1], iargs[2], iargs.weakness, not iargs.passive)
end
return export
4by0gn0hhwbgx8amnwql5x33m8l7qdx
1159118
1159107
2026-09-11T00:31:05Z
ForzaGreen
28665
المصنّف يميّز اللفيف المقرون المُضعَّف؛ حذف تصنيفات insert_cat المعطّلة؛ تحديث عدّاد اختبارات المجموعة 0
1159118
Scribunto
text/plain
local export = {}
--[=[
This module implements {{ar-conj}} and provides the underlying conjugation functions for {{ar-verb}}
(whose actual formatting is done in [[Module:ar-headword]]).
Author: User:Benwing, from an early version (2013-2014) by User:Atitarev, User:ZxxZxxZ.
]=]
--[=[
TERMINOLOGY:
-- "slot" = A particular combination of tense/mood/person/number/etc.
Example slot names for verbs are "past_1s" (past tense first-person singular), "juss_pass_3fp" (non-past jussive
passive third-person feminine plural) "ap" (active participle). Each slot is filled with zero or more forms.
-- "form" = The conjugated Arabic form representing the value of a given slot.
-- "lemma" = The dictionary form of a given Arabic term. For Arabic, normally the third person masculine singular past,
although other forms may be used if this form is missing (e.g. in passive-only verbs or verbs lacking the past).
]=]
--[=[
FIXME:
1. Finish unimplemented conjugation types. Only IX-final-weak left (extremely rare, possibly only one verb اِعْمَايَ
(according to Haywood and Nahmad p. 244, who are very specific about the irregular occurrence of alif + yā instead
of expected اِعْمَيَّ with doubled yā). Not in Hans Wehr. NOTE: Not true about this, cf. form IX اِرْعَوَى "to desist,
to repent, to see the light". Also note form XII اِخْضَوْضَرَ = form IX اِخْضَرَّ "to be or become green".
[DONE except for اِعْمَايَ]
2. Implement irregular verbs as special cases and recognize them, e.g.
-- laysa "to not be"; only exists in the past tense, no non-past, no imperative, no participles, no passive, no
verbal noun. Irregular alternation las-/lays-. [IMPLEMENTABLE USING OVERRIDES]
-- istaḥā yastaḥī "be ashamed of" -- this is complex according to Hans Wehr because there are two verbs, regular
istaḥyā yastaḥyī "to spare (someone)'s life" and irregular istaḥyā yastaḥyī "to be ashamed to face (someone)",
which is irregular because it has the alternate irregular form istaḥā yastaḥī which only applies to this meaning.
Currently we follow Haywood and Nahmad in saying that both varieties can be spelled istaḥyā/istaḥā/istaḥḥā, but we
should instead use a variant= param similar to حَيَّ to distinguish the two possibilities, and maybe not include
istaḥḥā.
-- ʿayya/ʿayiya yaʿayyu/yaʿyā "to not find the right way, be incapable of, stammer, falter, fall ill". This appears
to be a mixture of a geminate and final-weak verb. Unclear what the whole paradigm looks like. Do the
consonant-ending parts in the past follow the final-weak paradigm? Is it the same in the non-past? Or can you
conjugate the non-past fully as either geminate or final-weak?
-- اِنْمَحَى inmaḥā or يمَّحَى immaḥā "to be effaced, obliterated; to disappear, vanish" has irregular assimilation of inm-
to imm- as an alternative. inmalasa "to become smooth; to glide; to slip away; to escape" also has immalasa as an
alternative. The only other form VII verbs in Hans Wehr beginning with -m- are inmalaḵa "to be pulled out, torn
out, wrenched" and inmāʿa "to be melted, to melt, to dissolve", which are not listed with imm- alternatives, but
might have them; if so, we should handle this generally. [DONE]
-- يَرَعَ yaraʕa yariʕu "to be a coward, to be chickenhearted" as an alternative form of يَرِعَ yariʕa yayraʕu (as given in
Wehr). [IMPLEMENTABLE USING OVERRIDES]
3. Implement individual override parameters for each paradigm part. See Module:fro-verb for an example of how to do this
generally. Note that {{temp|ar-conj-I}} and other of the older templates already had such individual override params.
[DONE]
Irregular verbs already implemented:
-- [ḥayya/ḥayiya yaḥyā "live" -- behaves like a normal final-weak verb
(e.g. past first singular ḥayītu) except in the past-tense parts with
vowel-initial endings (all the third person except for the third feminine
plural). The normal singular and dual endings have -yiya- in them, which
compresses to -yya-, with the normal endings the less preferred ones.
In masculine third plural, expected ḥayū is replaced by ḥayyū by
analogy to the -yy- parts, and the regular form is not given as an
alternant in John Mace. Barron's 201 verbs appears to have the regular
ḥayū as the part, however. Note also that final -yā appears with tall
alif. This appears to be a spelling convention of Arabic, also applying
in ḥayyā (form II, "to keep (someone) alive") and 'aḥyā (form IV,
"to animate, revive, give birth to, give new life to").] -- implemented
-- [ittaxadha yattaxidhu "take"] -- implemented
-- [sa'ala yas'alu "ask" with alternative jussive/imperative yasal/sal] -- implemented
-- [ra'ā yarā "see"] -- implemented
-- ['arā yurī "show"] -- implemented
-- ['akala ya'kulu "eat" with imperative kul] -- implemented
-- ['axadha ya'xudhu "take" with imperative xudh] -- implemented
-- ['amara ya'muru "order" with imperative mur] -- implemented
--]=]
-- if true, always maintain manual translit during processing, and compare against full translit at the end
local debug_translit = false
local lang = require("Module:languages").getByCode("ar")
local m_links = require("Module:links")
local m_string_utilities = require("Module:string utilities")
local m_table = require("Module:table")
local ar_utilities = require("Module:ar-utilities")
local iut = require("Module:inflection utilities")
local put = require("Module:parse utilities")
local list_to_text = mw.text.listToText
local rfind = m_string_utilities.find
local rsubn = m_string_utilities.gsub
local rmatch = m_string_utilities.match
local rsplit = m_string_utilities.split
local usub = m_string_utilities.sub
local ulen = m_string_utilities.len
local u = m_string_utilities.char
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local dump = mw.dumpObject
-- Within this module, conjugations are the functions that do the actual
-- conjugating by creating the parts of a basic verb.
-- They are defined further down.
local conjugations = {}
-- hamza variants
local HAMZA = u(0x0621) -- hamza on the line (stand-alone hamza) = ء
local HAMZA_ON_ALIF = u(0x0623)
local HAMZA_ON_W = u(0x0624)
local HAMZA_UNDER_ALIF = u(0x0625)
local HAMZA_ON_Y = u(0x0626)
local HAMZA_ANY = "[" .. HAMZA .. HAMZA_ON_ALIF .. HAMZA_UNDER_ALIF .. HAMZA_ON_W .. HAMZA_ON_Y .. "]"
local HAMZA_PH = u(0xFFF0) -- hamza placeholder
local BAD = u(0xFFF1)
local BORDER = u(0xFFF2)
local KEEP_W_PH = u(0xFFF3) -- retained-wāw placeholder; see postprocess_term()
local KEEP_HAMZA_PH = u(0xFFF4) -- quiescent-hamza placeholder; see postprocess_term()
local WAW_SEAT_PH = u(0xFFF5) -- pre-seated hamza-on-wāw placeholder; see postprocess_term()
local NO_MADDA_PH = u(0xFFF6) -- hamza held back from the madda rule; see postprocess_term()
-- diacritics
local A = u(0x064E) -- fatḥa
local AN = u(0x064B) -- fatḥatān (fatḥa tanwīn)
local U = u(0x064F) -- ḍamma
local UN = u(0x064C) -- ḍammatān (ḍamma tanwīn)
local I = u(0x0650) -- kasra
local IN = u(0x064D) -- kasratān (kasra tanwīn)
local SK = u(0x0652) -- sukūn = no vowel
local SH = u(0x0651) -- šadda = gemination of consonants
local DAGGER_ALIF = u(0x0670)
local DIACRITIC_ANY_BUT_SH = "[" .. A .. I .. U .. AN .. IN .. UN .. SK .. DAGGER_ALIF .. "]"
-- Pattern matching short vowels
local AIU = "[" .. A .. I .. U .. "]"
-- Pattern matching short vowels or sukūn
local AIUSK = "[" .. A .. I .. U .. SK .. "]"
-- Pattern matching any diacritics that may be on a consonant
local DIACRITIC = SH .. "?" .. DIACRITIC_ANY_BUT_SH
-- translit_patterns
local vowels = "aeiouāēīōū"
local NV = "[^" .. vowels .. "]"
local dia = {a = A, i = I, u = U}
local undia = {[A] = "a", [I] = "i", [U] = "u", ["-"] = "-"}
-- various letters and signs
local ALIF = u(0x0627) -- ʾalif = ا
local AMAQ = u(0x0649) -- ʾalif maqṣūra = ى
local AMAD = u(0x0622) -- ʾalif madda = آ
local TAM = u(0x0629) -- tāʾ marbūṭa = ة
local T = u(0x062A) -- tāʾ = ت
local HYPHEN = u(0x0640)
local N = u(0x0646) -- nūn = ن
local W = u(0x0648) -- wāw = و
local Y = u(0x064A) -- yāʾ = ي
local S = "س"
local M = "م"
local LRM = u(0x200e) -- left-to-right mark
-- common combinations
local AH = A .. TAM
local AT = A .. T
local AA = A .. ALIF
local AAMAQ = A .. AMAQ
local AAH = AA .. TAM
local AAT = AA .. T
local II = I .. Y
local UU = U .. W
local AY = A .. Y
local AW = A .. W
local AYSK = AY .. SK
local AWSK = AW .. SK
local NA = N .. A
local NI = N .. I
local AAN = AA .. N
local AANI = AA .. NI
local AYNI = AYSK .. NI
local AWNA = AWSK .. NA
local AYNA = AYSK .. NA
local AYAAT = AY .. AAT
local UNU = "[" .. UN .. U .. "]"
local MA = M .. A
local MU = M .. U
local TA = T .. A
local TU = T .. U
local _I = ALIF .. I
local _U = ALIF .. U
--W: Morphological pattern (الوزن الصرفي) to verb form mapping
local MORPHOLOGICAL_PATTERN_TO_FORM = {
["فعَل يفعُل"] = "I/a~u",
["فعَل يفعِل"] = "I/a~i",
["فعَل يفعَل"] = "I/a~a",
["فعُل يفعُل"] = "I/u~u",
["فعِل يفعَل"] = "I/i~a",
["فعِل يفعِل"] = "I/i~i",
["فعّل"] = "II",
["فاعل"] = "III",
["أفعل"] = "IV",
["تفعّل"] = "V",
["تفاعل"] = "VI",
["انفعل"] = "VII",
["افتعل"] = "VIII",
["افعلّ"] = "IX",
["استفعل"] = "X",
["افعالّ"] = "XI",
["افعوعل"] = "XII",
["افعوّل"] = "XIII",
["فعلل"] = "Iq",
["تفعلل"] = "IIq",
["افعنلل"] = "IIIq", -- "XIV" should not be used
["افعللّ"] = "IVq",
}
--W: Create reverse mapping from form to morphological pattern
local FORM_TO_MORPHOLOGICAL_PATTERN = {}
for pattern, form in pairs(MORPHOLOGICAL_PATTERN_TO_FORM) do
FORM_TO_MORPHOLOGICAL_PATTERN[form] = pattern
end
--W:
local MORPHOLOGICAL_PATTERN_TO_BASIC_DERIV = {
["فعَل يفعُل"] = "مُجرَّد",
["فعَل يفعِل"] = "مُجرَّد",
["فعَل يفعَل"] = "مُجرَّد",
["فعُل يفعُل"] = "مُجرَّد",
["فعِل يفعَل"] = "مُجرَّد",
["فعِل يفعِل"] = "مُجرَّد",
["فعّل"] = "مزيد بحرف",
["فاعل"] = "مزيد بحرف",
["أفعل"] = "مزيد بحرف",
["تفعّل"] = "مزيد بحرفين",
["تفاعل"] = "مزيد بحرفين",
["انفعل"] = "مزيد بحرفين",
["افتعل"] = "مزيد بحرفين",
["افعلّ"] = "مزيد بحرفين",
["استفعل"] = "مزيد بثلاثة أحرف",
["افعالّ"] = "مزيد بثلاثة أحرف",
["افعوعل"] = "مزيد بثلاثة أحرف",
["افعوّل"] = "مزيد بثلاثة أحرف",
["فعلل"] = "مُجرَّد",
["تفعلل"] = "مزيد بحرف",
["افعنلل"] = "مزيد بحرفين",
["افعللّ"] = "مزيد بحرفين",
}
local translit_cache = {
-- hamza variants
[HAMZA] = "ʔ",
[HAMZA_ON_ALIF] = "ʔ",
[HAMZA_ON_W] = "ʔ",
[HAMZA_UNDER_ALIF] = "ʔ",
[HAMZA_ON_Y] = "ʔ",
[HAMZA_PH] = "ʔ",
-- diacritics
[A] = "a",
[AN] = "an",
[U] = "u",
[UN] = "un",
[I] = "i",
[IN] = "in",
[SK] = "",
[SH] = "*", -- handled specially
[DAGGER_ALIF] = "ā",
-- various letters and signs
[""] = "",
[ALIF] = BAD, -- we should never be transliterating ALIF by itself, as its translit in isolation is ambiguous
[AMAQ] = BAD,
[AMAD] = "ʔā",
[TAM] = "",
[T] = "t",
[N] = "n",
[W] = "w",
[Y] = "y",
[S] = "s",
[M] = "m",
[LRM] = "",
-- common combinations
[AH] = "a",
[AT] = "at",
[AA] = "ā",
[AAMAQ] = "ā",
[AAH] = "āh",
[AAT] = "āt",
[II] = "ī",
[UU] = "ū",
[AY] = "ay",
[AW] = "aw",
[AYSK] = "ay",
[AWSK] = "aw",
[NA] = "na",
[NI] = "ni",
[AAN] = "ān",
[AANI] = "āni",
[AYNI] = "ayni",
[AWNA] = "awna",
[AYNA] = "ayna",
[AYAAT] = "ayāt",
[MA] = "ma",
[MU] = "mu",
[TA] = "ta",
[TU] = "tu",
[_I] = "i",
[_U] = "u",
}
local function transliterate(text)
local cached = translit_cache[text]
if cached then
if cached == BAD then
error(("Internal error: Unable to transliterate %s because explicitly marked as BAD"):format(text))
end
return cached
end
local tr = (lang:transliterate(text))
if not tr then
error(("Internal error: Unable to transliterate: %s"):format(text))
end
translit_cache[text] = tr
return tr
end
local all_person_number_list = {
"1s",
"2ms",
"2fs",
"3ms",
"3fs",
"2d",
"3md",
"3fd",
"1p",
"2mp",
"2fp",
"3mp",
"3fp"
}
local function make_person_number_slot_accel_list(list)
local slot_accel_list = {}
return slot_accel_list
end
local imp_person_number_list = {}
for _, pn in ipairs(all_person_number_list) do
if pn:find("^2") then
table.insert(imp_person_number_list, pn)
end
end
local passive_types = m_table.listToSet {
"pass", -- verb has both active and passive
"ipass", -- verb is active with impersonal passive
"nopass", -- verb is active-only
"onlypass", -- verb is passive-only
"onlypass-impers", -- verb itself is impersonal, meaning passive-only with impersonal passive
}
local indicator_flags = m_table.listToSet {
"nopast", "no_nonpast", "noimp",
"nocat", -- don't categorize or include annotations about this; useful in suppletive parts of verbs
"reduced", -- verb has assimilation/reduction of initial coronals
"altgem", -- form X with alternative past geminate forms with final-weak endings
}
export.potential_lemma_slots = {"past_3ms", "past_pass_3ms", "ind_3ms", "ind_pass_3ms", "imp_2ms"}
export.unsettable_slots = {}
for _, potential_lemma_slot in ipairs(export.potential_lemma_slots) do
table.insert(export.unsettable_slots, potential_lemma_slot .. "_linked")
end
-- We don't set the active participle directly for form I because we don't want stative verbs (with past vowel i or u)
-- to default to فَاعِل. Instead we set the special slot 'ap1' and later copy it to 'ap' for non-stative verbs. The user
-- meanwhile can explicitly request the فَاعِل form for active participles for stative verbs using `ap:+`.
table.insert(export.unsettable_slots, "ap1") -- primary default فَاعِل for form I active participles
table.insert(export.unsettable_slots, "ap2") -- secondary default فَعِيل for form I active participles (stative I)
table.insert(export.unsettable_slots, "ap3") -- secondary default فَعِل for form I active participles (stative II)
table.insert(export.unsettable_slots, "apcd") -- secondary default أَفْعَل for form I active participles (color/defect)
table.insert(export.unsettable_slots, "apan") -- secondary default فَعْلَان for form I active participles (in -ān)
table.insert(export.unsettable_slots, "pp2") -- secondary default فَعِيل for form I passive participles (same as ap2)
table.insert(export.unsettable_slots, "vn2") -- secondary default فِعَال for form III verbal nouns
export.unsettable_slots_set = m_table.listToSet(export.unsettable_slots)
local default_indicator_to_active_participle_slot = {
["+"] = "ap1",
["++"] = "ap2",
["+++"] = "ap3",
["+cd"] = "apcd",
["+an"] = "apan",
}
local slots_that_may_be_uncertain = {
vn = "verbal noun",
ap = "active participle",
}
-- Initialize all the slots for which we generate forms.
local function add_slots(alternant_multiword_spec)
alternant_multiword_spec.verb_slots = {
{"ap", "act|part"},
{"pp", "pass|part"},
{"vn", "vnoun"},
}
for _, unsettable_slot in ipairs(export.unsettable_slots) do
table.insert(alternant_multiword_spec.verb_slots, {unsettable_slot, "-"})
end
-- Add entries for a slot with person/number variants.
-- `slot_prefix` is the prefix of the slot, typically specifying the tense/aspect.
-- `tag_suffix` is a string listing the set of inflection tags to add after the person/number tags.
-- `person_number_list` is a list of the person/number slot suffixes to add to `slot_prefix`.
local function add_personal_slot(slot_prefix, tag_suffix, person_number_list)
for _, persnum in ipairs(person_number_list) do
local slot = slot_prefix .. "_" .. persnum
local accel = persnum:gsub("(.)", "%1|") .. tag_suffix
table.insert(alternant_multiword_spec.verb_slots, {slot, accel})
end
end
local tenses = {
{"past", "past|%s"},
{"ind", "non-past|%s|ind"},
{"sub", "non-past|%s|sub"},
{"juss", "non-past|%s|juss"},
}
for _, slot_accel in ipairs(tenses) do
local slot, accel = unpack(slot_accel)
for _, voice in ipairs {"act", "pass"} do
add_personal_slot(voice == "act" and slot or slot .. "_pass", accel:format(voice),
all_person_number_list)
end
end
add_personal_slot("imp", "imp", imp_person_number_list)
alternant_multiword_spec.verb_slots_map = {}
for _, slot_accel in ipairs(alternant_multiword_spec.verb_slots) do
local slot, accel = unpack(slot_accel)
alternant_multiword_spec.verb_slots_map[slot] = accel
end
end
local overridable_stems = {}
local slot_override_param_mods = {
footnote = {
item_dest = "footnotes",
store = "insert",
},
alt = {},
t = {
-- [[Module:links]] expects the gloss in "gloss".
item_dest = "gloss",
},
gloss = {},
g = {
-- [[Module:links]] expects the genders in "g". `sublist = true` automatically splits on comma (optionally
-- with surrounding whitespace).
item_dest = "genders",
sublist = true,
},
pos = {},
lit = {},
id = {},
--W: The q/qq/l/ll (qualifier and label) modifiers were removed: rendering them
-- needs [[Module:pron qualifier]], which does not exist on ar.wiktionary, so any
-- use of them raised a script error. Accepting them here again requires importing
-- that module first and restoring the block in generate_link() below.
}
local function generate_obj(formval, parse_err, prefix, is_slot_override)
local val, uncertain = formval:match("^(.*)(%?)$")
val = val or formval
uncertain = not not uncertain
local ar, translit = val:match("^(.*)//(.*)$")
if not ar then
ar = val
end
if ar == "" then
if uncertain then
ar = "?"
else
error(("Can't specify blank value for override for %s override '%s'"):format(
is_slot_override and "slot" or "stem", prefix))
end
end
return {form = ar, translit = translit, uncertain = uncertain}
end
local function parse_inline_modifiers(comma_separated_group, parse_err, prefix, is_slot_override)
local function this_generate_obj(formval, parse_err)
return generate_obj(formval, parse_err, prefix, is_slot_override)
end
return put.parse_inline_modifiers_from_segments {
group = comma_separated_group,
props = {
param_mods = slot_override_param_mods,
parse_err = parse_err,
generate_obj = this_generate_obj,
pre_normalize_modifiers = function(data)
local modtext = data.modtext
modtext = modtext:match("^(%[.*%])$")
if modtext then
return ("<footnote:%s>"):format(modtext)
end
return data.modtext
end,
},
}
end
local function allow_multiple_values_for_override(comma_separated_groups, data, is_slot_override)
local retvals = {}
for _, comma_separated_group in ipairs(comma_separated_groups) do
local retval
if is_slot_override then
--W: pass `prefix` and `is_slot_override` through; without them the error
-- raised for a blank override value formatted a nil prefix, which is a
-- crash on Lua 5.1 rather than the intended message. Reachable from e.g.
-- <I/a~u.vn:[[كتابة]]>, where the [[...]] is consumed as a footnote and
-- leaves the value empty.
retval = parse_inline_modifiers(comma_separated_group, data.parse_err, data.prefix,
is_slot_override)
else
retval = generate_obj(comma_separated_group[1], data.parse_err, data.prefix, is_slot_override)
retval.footnotes = data.fetch_footnotes(comma_separated_group)
end
table.insert(retvals, retval)
end
for _, form in ipairs(retvals) do
if form.form == "+" or default_indicator_to_active_participle_slot[form.form] then
if form.form ~= "+" and default_indicator_to_active_participle_slot[form.form] and not is_slot_override then
error(("Stem override '%s' cannot use %s to request a secondary default"):format(
data.prefix, form.form))
end
data.base.slot_override_uses_default[data.prefix] = true
end
end
for _, form in ipairs(retvals) do
if form.form == "-" then
data.base.slot_explicitly_missing[data.prefix] = true
break
end
end
if data.base.slot_explicitly_missing[data.prefix] then
for _, form in ipairs(retvals) do
if form.form ~= "-" then
data.parse_err(("For slot or stem '%s', saw both - and a value other than -, which isn't allowed"):
format(data.prefix))
end
end
return nil
end
return retvals
end
local function simple_choice(choices)
return function(separated_groups, data)
if #separated_groups > 1 then
data.parse_err("For spec '" .. data.prefix .. ":', only one value currently allowed")
end
if #separated_groups[1] > 1 then
data.parse_err("For spec '" .. data.prefix .. ":', no footnotes currently allowed")
end
local choice = separated_groups[1][1]
if not m_table.contains(choices, choice) then
data.parse_err("For spec '" .. data.prefix .. ":', saw value '" .. choice .. "' but expected one of '" ..
table.concat(choices, "،") .. "'")
end
return choice
end
end
for _, overridable_stem in ipairs {
"past",
"past_v",
"past_c",
"past_pass",
"past_pass_v",
"past_pass_c",
"nonpast",
"nonpast_v",
"nonpast_c",
"nonpast_pass",
"nonpast_pass_v",
"nonpast_pass_c",
"imp",
"imp_v",
"imp_c",
} do
overridable_stems[overridable_stem] = allow_multiple_values_for_override
end
overridable_stems.past_final_weak_vowel = simple_choice { "ay", "aw", "ī", "ū" }
overridable_stems.past_pass_final_weak_vowel = simple_choice { "ay", "aw", "ī", "ū" }
overridable_stems.nonpast_final_weak_vowel = simple_choice { "ā", "ī", "ū" }
overridable_stems.nonpast_pass_final_weak_vowel = simple_choice { "ā", "ī", "ū" }
-------------------------------------------------------------------------------
-- Utility functions --
-------------------------------------------------------------------------------
-- version of rsubn() that discards all but the first return value
local function rsub(term, foo, bar)
return (rsubn(term, foo, bar))
end
-- version of rsubn() that returns a 2nd argument boolean indicating whether a substitution was made.
local function rsubb(term, foo, bar)
local retval, nsubs = rsubn(term, foo, bar)
return retval, nsubs > 0
end
-- Concatenate one or more strings or form objects.
local function q(...)
local not_all_strings = debug_translit
local has_manual_translit = debug_translit
for i = 1, select("#", ...) do
local argt = select(i, ...)
if not argt then
error(("Internal error: Saw nil at index %s: %s"):format(i, dump({...})))
end
if type(argt) ~= "string" then
not_all_strings = true
if argt.translit then
has_manual_translit = true
break
end
end
end
if not not_all_strings then
-- just strings, concatenate directly
return table.concat({...})
end
local formvals = {}
local translit = has_manual_translit and {} or nil
local footnotes
for i = 1, select("#", ...) do
local argt = select(i, ...)
if type(argt) == "string" then
formvals[i] = argt
if has_manual_translit then
translit[i] = transliterate(argt)
end
else
formvals[i] = argt.form
if has_manual_translit then
translit[i] = argt.translit or transliterate(argt.form)
end
footnotes = iut.combine_footnotes(footnotes, argt.footnotes)
end
end
-- FIXME: Do we want to support other properties?
return {
form = table.concat(formvals),
translit = has_manual_translit and table.concat(translit) or nil,
footnotes = footnotes,
}
end
-- Return the formval associated with `rad` (a radical or past/non-past vowel, either a string or form object).
local function rget(rad)
if type(rad) == "string" then
return rad
elseif type(rad) == "table" then
return rad.form
else
error(("Internal error: Unexpected type for radical or past/non-past vowel: %s"):format(dump(rad)))
end
end
export.rget = rget -- for use in [[Module:ar-headword]]
-- Return the footnotes associated with `rad` (a radical or past/non-past vowel, either a string or form object).
local function rget_footnotes(rad)
if type(rad) == "string" then
return nil
elseif type(rad) == "table" then
return rad.footnotes
else
error(("Internal error: Unexpected type for radical or past/non-past vowel: %s"):format(dump(rad)))
end
end
-- Return true if the formval associated with `rad` (a radical or past/non-past vowel, either a string or form object)
-- is `val`.
local function req(rad, val)
return rget(rad) == val
end
-- True if a form-I verb whose first radical is wāw elides that wāw in the non-past (يَعِدُ for
-- *يَوْعِدُ) rather than keeping it (يَوْجَلُ). The elision belongs to the kasra non-past -- a~i
-- وَعَدَ يَعِدُ, i~i وَرِثَ يَرِثُ -- and to the fatḥa non-past that is a throat-letter lowering of
-- that same underlying kasra: a~a وَضَعَ يَضَعُ, وَهَبَ يَهَبُ. Everywhere else the wāw stays:
-- i~a وَجِلَ يَوْجَلُ، وَنِيَ يَوْنَى (a fatḥa non-past that is the regular partner of a kasra past,
-- not a lowered kasra)
-- *~u وَجَلَ يَوْجُلُ، وَجُهَ يَوْجُهُ (a ḍamma non-past is never a lowered kasra)
-- The two elided-anyway lexemes with a kasra past (وَسِعَ يَسَعُ, وَطِئَ يَطَأُ) are lexical and are
-- what the explicit `I-assimilated` weakness exists to express -- see the comment on it in
-- detect_indicator_spec().
--
-- The u-non-past half of this is attested directly: أنطوان الدحداح، معجم تصريف الأفعال العربية
-- prints يَوْجُلُ/اُوْجُلْ for وَجَلَ (ص136) and says so in the page's own note -- "لا تُحذَفُ واوُ
-- الفعلِ في المُضارعِ ولا تُقلَبُ في الأمرِ" -- and يَوْنَى/اِوْنَ for وَنِيَ (ص230).
--
-- Returns true when the vowels aren't known, which keeps the historical default for callers
-- that have radicals but no vowel pattern.
--W: Lexical exceptions to the rule below, keyed root..":"..past..nonpast so that a
-- listed verb is listed for the measure its source attests and no other. Both
-- directions occur and the vowels do not predict either:
--
-- وَطِئَ ـَ the i~a pattern normally keeps the wāw (وَجِلَ ـَ / يَوْجَلُ) and this
-- one drops it -- يَطَأُ, طَأْ, printed through both columns of نموذج ١٥٥.
-- Upstream's own commentary on this function names the verb: "there are
-- naturally exceptions, e.g. waṭiʔa~yaṭaʔu 'to tread, to trample'".
-- وَبَأَ ـَ the a~a pattern normally drops it (وَضَعَ / يَضَعُ) and this one keeps
-- it -- يَوْبَأُ, يَوْبَآنِ, يَوْبَؤُونَ, إِيبَأْ, printed through نموذج ١٣٥.
--
-- Same instrument as GEMINATE_ITBAA_ROOTS and for the same reason: the fact is about
-- the lexeme, so listing it is the only honest way to hold it, and listing keeps every
-- other root of the same shape exactly where it was.
local FORM_I_W_ASSIMILATION = {
["وطء:ia"] = true, -- وَطِئَ ـَ / يَطَأُ / طَأْ: الدحداح، نموذج ١٥٥
["وبء:aa"] = false, -- وَبَأَ ـَ / يَوْبَأُ / إِيبَأْ: الدحداح، نموذج ١٣٥
}
local function vowel_letter(v)
return req(v, A) and "a" or req(v, I) and "i" or req(v, U) and "u" or "?"
end
local function form_i_w_assimilated(past_vowel, nonpast_vowel, rad1, rad2, rad3)
if not past_vowel or not nonpast_vowel then
return true
end
if rad1 and rad2 and rad3 then
local listed = FORM_I_W_ASSIMILATION[rad1 .. rad2 .. rad3 .. ":" ..
vowel_letter(past_vowel) .. vowel_letter(nonpast_vowel)]
if listed ~= nil then
return listed
end
end
return req(nonpast_vowel, I) or req(nonpast_vowel, A) and req(past_vowel, A)
end
--W: Geminate form-I roots whose degemination vowel follows the مضارع by إتباع.
-- When gemination breaks under a consonant-initial suffix, the vowel that surfaces on the
-- second radical (مَدَدْتَ's second د) is normally the verb's own past vowel, which the وزن
-- fixes at one value per measure: فتح for فعَل يفعُل (مَدَدْتَ، فَرَرْتَ، عَضَضْتَ), كسر for
-- فعِل يفعَل (ظَلِلْتَ). Classical grammar also attests a minority إتباع variant on the
-- فعَل يفعُل measure, where that vowel instead follows the مضارع's own ضمة (هَمُمْتَ). Which
-- of the two a given verb takes is a fact about the lexeme, not about its وزن -- هَمَّ and
-- مَدَّ share the measure and differ here -- so it cannot be derived from جذر + وزن and is
-- listed, the same way SOUND_FORM_I_UU_ROOTS lists هَيُؤَ. Keyed rad1..rad2..rad3 and gated
-- on the a~u pattern, so a listed root still degeminates normally under any other pattern.
local GEMINATE_ITBAA_ROOTS = {
["همم"] = true, -- هَمَّ ـُ: أنطوان الدحداح، معجم تصريف الأفعال العربية، ص192
-- The Template-B page of the same model number, which prints two more of them:
["عشش"] = true, -- عَشَّ ـُ / عَشُشْتُ: الدحداح، نموذج ١٤١
["فكك"] = true, -- فَكَّ ـُ / فَكُكْتُ: الدحداح، نموذج ١٤١
}
-- The vowel that surfaces on the second radical of a geminate form-I verb once gemination
-- breaks. `past_vowel` unless the root is an attested إتباع lexeme; see GEMINATE_ITBAA_ROOTS.
local function geminate_degemination_vowel(rad1, rad2, rad3, past_vowel, nonpast_vowel)
if past_vowel and nonpast_vowel and req(past_vowel, A) and req(nonpast_vowel, U)
and GEMINATE_ITBAA_ROOTS[rad1 .. rad2 .. rad3] then
return nonpast_vowel
end
return past_vowel
end
--W: Form-I final-weak roots that keep rad3 as a consonant in the 2fs non-past and
-- imperative (تَسْهُوِينَ، اُسْهُوِي) instead of contracting it away (تَسْهِينَ، اِسْهِي).
--
-- This was briefly gated on the فعُل يفعُل measure alone, then narrowed to a root table,
-- then widened back to the measure -- and the middle step is why. The argument for the
-- measure was always that the measure is what keeps rad3 consonantal in the first place
-- (its past 3ms is سَهُوَ, not the سَها an a~u root like دَعَا gives), but at the time the
-- corpus held exactly one فعُل يفعُل final-weak page, so there was no second paradigm to
-- check it against and the rule it displaces -- contract before the 2fs -ī, as دَعَا does --
-- was the one the module had applied for years. Generalising an unverified reading over a
-- whole class of live entries is the wrong direction to be wrong in, so it went back to
-- listing سهو alone, keyed and gated exactly like SOUND_FORM_I_UU_ROOTS.
--
-- Checkpoint 4 supplied the second page, and it answers the question. p222 (model 147)
-- prints TWO فعُل يفعُل final-weak paradigms, حَلُوَ and سَرُوَ, and both retain rad3 in both
-- eligible slots: تَحْلُوِينَ / اُحْلُوِي and تَسْرُوِينَ / اُسْرُوِي, the wāw carrying its kasra
-- under it, all four read at 6x off the strip against the same columns' يَحْلُونَ / يَسْرُونَ.
-- Two independent roots, one page, agreeing with سهو on p204 -- and سَرُوَ is precisely the
-- root the narrowing had put back to تَسْرِينَ, so the cautious reading is the one the ink
-- refutes. So the gate is the vowel pattern after all and the table is gone.
local function final_weak_uu_retains_rad3(rad1, rad2, rad3, past_ending_vowel, nonpast_ending_vowel)
return past_ending_vowel == "ū" and nonpast_ending_vowel == "ū"
end
-- Map `vow` (a past/non-past vowel, either a string or form object without translit) by passing the formval through
-- `fn`. Don't call this on radicals because they may have manual translit and it isn't clear how to handle that.
local function map_vowel(vow, fn)
if type(vow) == "string" then
return fn(vow)
elseif type(vow) == "table" then
return {form = fn(vow.form), footnotes = vow.footnotes}
else
error(("Internal error: Unexpected type for past/non-past vowel: %s"):format(dump(vow)))
end
end
local function get_radicals_3(vowel_spec)
return vowel_spec.rad1, vowel_spec.rad2, vowel_spec.rad3, vowel_spec.past, vowel_spec.nonpast
end
local function get_radicals_4(vowel_spec)
return vowel_spec.rad1, vowel_spec.rad2, vowel_spec.rad3, vowel_spec.rad4
end
local function is_final_weak(base, vowel_spec)
return vowel_spec.weakness == "final-weak" or base.form == "XV"
end
--W: Create a simple link
local function link_term_simple(text)
return "[[" .. text .. "]]"
end
local function link_term(text, face, id)
return m_links.full_link({lang = lang, term = text, tr = "-", id = id}, face)
end
local function tag_text(text, tag, class)
return m_links.full_link({lang = lang, alt = text, tr = "-"})
end
local function track(page)
require("Module:debug/track")("ar-verb/" .. page)
return true
end
local function track_if_ar_conj(base, page)
if base.alternant_multiword_spec.source_template == "ar-conj" then
require("Module:debug/track")("ar-verb/" .. page)
end
return true
end
local function reorder_shadda(word)
-- shadda+short-vowel (including tanwīn vowels, i.e. -an -in -un) gets
-- replaced with short-vowel+shadda during NFC normalisation, which
-- MediaWiki does for all Unicode strings; however, it makes various
-- processes inconvenient, so undo it.
word = rsub(word, "(" .. DIACRITIC_ANY_BUT_SH .. ")" .. SH, SH .. "%1")
return word
end
local function apply_nfc_shadda(word)
-- Apply NFC-style normalization: reorder shadda+vowel to vowel+shadda
-- to match MediaWiki's automatic NFC normalization. This reverses the
-- internal shadda+vowel format used during processing.
word = rsub(word, SH .. "(" .. DIACRITIC_ANY_BUT_SH .. ")", "%1" .. SH)
return word
end
-------------------------------------------------------------------------------
-- Basic functions to inflect tenses --
-------------------------------------------------------------------------------
local function skip_slot(base, slot, allow_overrides)
if base.slot_explicitly_missing[slot] then
return true
end
if not allow_overrides and base.slot_overrides[slot] and not base.slot_override_uses_default[slot] then
-- Skip any slots for which there are overrides, except those that request the default value using +, ++, etc.
return true
end
if base.passive == "nopass" and (slot == "pp" or slot:find("_pass")) then
return true
elseif base.passive == "onlypass" and slot ~= "pp" and slot ~= "vn" and not slot:find("_pass") then
return true
elseif base.passive == "ipass" and slot:find("_pass") and not slot:find("3ms") then
return true
elseif base.passive == "onlypass-impers" and slot ~= "pp" and slot ~= "vn" and (not slot:find("_pass") or
slot:find("_pass") and not slot:find("3ms")) then
return true
end
if base.nopast and slot:find("^past_") then
return true
end
if base.noimp and slot:find("^imp_") then
return true
end
if base.no_nonpast and (slot:find("^ind_") or slot:find("^sub_") or slot:find("^juss")) then
return true
end
return false
end
local function basic_combine_stem_ending(stem, ending)
return stem .. ending
end
local function basic_combine_stem_ending_tr(stem, ending)
return stem .. ending
end
-- Concatenate `prefixes`, `stems` and `endings` (any of which may be an abbreviate form list, i.e. strings, form
-- objects or lists of strings or form objects) and store into `slot`. If a user-supplied override exists for the slot,
-- nothing will happen unless `allow_overrides` is provided.
local function add3(base, slot, prefixes, stems, endings, allow_overrides)
if skip_slot(base, slot, allow_overrides) then
return
end
-- Optimization since the prefixes are almost always single strings.
if type(prefixes) == "string" then
local function do_combine_stem_ending(stem, ending)
return prefixes .. stem .. ending
end
local function do_combine_stem_ending_tr(stem, ending)
return transliterate(prefixes) .. stem .. ending
end
iut.add_forms(base.forms, slot, stems, endings, do_combine_stem_ending, transliterate,
do_combine_stem_ending_tr, base.form_footnotes)
else
iut.add_multiple_forms(base.forms, slot, {prefixes, stems, endings}, basic_combine_stem_ending, transliterate,
basic_combine_stem_ending_tr, base.form_footnotes)
end
end
-- Insert one or more forms in `form_or_forms` into `slot`. `form_or_forms` is an abbreviated form list (see comment at
-- top of [[Module:inflection utilities]]). If a user-supplied override exists for the slot, nothing will happen unless
-- `allow_overrides` is provided. BEWARE: One form object should never occur in two different slots, or twice in a given
-- slot; if taking a form object from an existing slot, make sure to shallowCopy() it.
local function insert_form_or_forms(base, slot, form_or_forms, allow_overrides, uncertain)
if not skip_slot(base, slot, allow_overrides) then
-- Some optimizations of the most common case of inserting a single string.
if type(form_or_forms) == "string" and not base.form_footnotes then
form_or_forms = {form = form_or_forms, uncertain = uncertain}
iut.insert_form(base.forms, slot, form_or_forms)
else
local list = iut.convert_to_general_list_form(form_or_forms, base.form_footnotes)
if uncertain then
for _, formobj in ipairs(list) do
formobj.uncertain = true
end
end
iut.insert_forms(base.forms, slot, list)
end
end
end
-- Insert `string_or_form` into both the ap2 and pp2 slots, shallowCopying a form object to make sure no form objects
-- occur in two slots.
local function insert_ap2_pp2(base, string_or_form)
insert_form_or_forms(base, "ap2", string_or_form)
if type(string_or_form) == "table" then
string_or_form = m_table.shallowCopy(string_or_form)
end
insert_form_or_forms(base, "pp2", string_or_form)
end
-- Convert `stemforms` (a string, a form object, or a list of strings and/or form objects) into "general form" (a list
-- of form objects) and map `fn` over the list of objects. `fn` is passed two arguments (form value and translit) and
-- should likewise return the new form value and translit. Footnotes will be preserved. FIXME: Preserve other metadata.
local function map_general(stemforms, fn)
return iut.map_forms(iut.convert_to_general_list_form(stemforms), fn)
end
-- Similar to map_general() except that `fn` should return a single value (one or more strings or form objects), instead
-- of two values (form value and translit), and the resulting value(s) from all calls to `fn` will be flattened to
-- construct the overall return value. Footnotes will be preserved. FIXME: Preserve other metadata.
local function flatmap_general(stemforms, fn)
return iut.flatmap_forms(iut.convert_to_general_list_form(stemforms), fn)
end
-- Given user-supplied stem overrides in `base`, construct any derived stem overrides (e.g. vowel-specific or
-- consonant-specific variants), and truncate initial y-/ي- in any non-past overrides.
local function construct_stems(base)
local stems = base.stem_overrides
stems.past_v = stems.past_v or stems.past
stems.past_c = stems.past_c or stems.past
stems.past_pass_v = stems.past_pass_v or stems.past_pass
stems.past_pass_c = stems.past_pass_c or stems.past_pass
stems.nonpast_v = stems.nonpast_v or stems.nonpast
stems.nonpast_c = stems.nonpast_c or stems.nonpast
stems.nonpast_pass_v = stems.nonpast_pass_v or stems.nonpast_pass
stems.nonpast_pass_c = stems.nonpast_pass_c or stems.nonpast_pass
stems.imp_v = stems.imp_v or stems.imp
stems.imp_c = stems.imp_c or stems.imp
local function truncate_nonpast_initial_cons(stem_type, form, translit)
if form == "+" then
return form, translit
end
if not form:find("^" .. Y) then
error(("Form value %s for stem type '%s' should begin with ي"):format(form, stem_type))
end
form = form:gsub("^" .. Y, "")
if translit then
if not translit:find("^y") then
error(("Translit value %s for stem type '%s' should begin with y"):format(translit, stem_type))
end
translit = translit:gsub("^y", "")
end
return form, translit
end
for _, nonpast_stem_type in ipairs { "nonpast_v", "nonpast_c", "nonpast_pass_v", "nonpast_pass_c" } do
if stems[nonpast_stem_type] then
stems[nonpast_stem_type] = map_general(stems[nonpast_stem_type], function(form, translit)
return truncate_nonpast_initial_cons(nonpast_stem_type, form, translit)
end)
end
end
end
-- Given user-specified overrides for stem `stemname`, return overrides with occurrences of + replaced by
-- `default_stem`. If no overrides, return `default_stem`, or {} if no default.
local function override_stem_if_needed(base, stemname, default_stem)
local overrides = base.stem_overrides[stemname]
if not overrides then
return default_stem or {}
end
return map_general(overrides, function(form, translit)
if form ~= "+" and default_indicator_to_active_participle_slot[form] then
error(("Stem overrides cannot use secondary default indicators but saw %s in stem override '%s'"):format(
form, stemname))
end
if form == "+" then
if translit then
error(("Cannot supply manual translit along with + for stem override '%s'"):format(stemname))
end
if not default_stem then
error(("Cannot use + for stem override '%s' because no default is available"):format(stemname))
end
if type(default_stem) ~= "string" then
error(("Internal error: Default stem for '%s' is not a string: %s"):format(stemname, dump(default_stem)))
end
return default_stem
end
return form, translit
end)
end
-------------------------------------------------------------------------------
-- Properties of different verbal forms --
-------------------------------------------------------------------------------
local allowed_vforms = {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX",
"X", "XI", "XII", "XIII", "XIV", "XV", "Iq", "IIq", "IIIq", "IVq"}
local allowed_vforms_set = m_table.listToSet(allowed_vforms)
local allowed_vforms_with_weakness = m_table.shallowCopy(allowed_vforms)
-- The user needs to be able to explicitly specify that a form-I verb (specifically one whose initial radical is و) is
-- sound. Cf. wajiʕa yawjaʕu (not #yajaʕu) "to ache, to hurt". In general, i~a and u~u verbs whose initial radical is و
-- seem to not assimilate the first radical; cf. وقح "to be shameless", variously waqaḥa~yaqiḥu, waquḥa~yawquḥu and
-- waqiḥa~yawqaḥu, whereas a~i verbs (wafaḍa~yafiḍu "to rush"), i~i verbs (wafiqa~yafiqu "to be proper, to be suitable")
-- and a~a verbs (waḍaʕa~yaḍaʕu "to set down, to place") do assimilate. But there are naturally exceptions, e.g.
-- waṭiʔa~yaṭaʔu "to tread, to trample"; wasiʕa~yasaʕu "to be spacious; to be well-off"; waṯiʔa~yaṯaʔu "to get bruised,
-- to be sprained". Also beware of waniya~yawnā "to be faint; to languish", which is sound in the first radical and
-- final-weak in the last radical. Nonetheless, the regularity of the patterns mentioned above suggest we should provide
-- them as defaults.
-- Note that there are other cases of unexpectedly sound verbs, e.g. izdawaja~yazdawiju "to be in pairs", layisa~yalyasu
-- "to be valiant, to be brave", ʔaḥwaja~yuḥwiju "to need", istahwana~yastahwinu "to consider easy", sawisa~yaswasu "to
-- be or become moth-eaten or worm-eaten" (vs. sāsa~yasūsu "to govern, to rule" from the same radicals), ʕawira~yaʕwaru
-- "to be one-eyed", istajwaba~yastajwibu "to interrogate", etc. But in these cases there is no need for explicit user
-- specification as the lemma itself specifies the unexpected soundness.
for _, form_with_weakness in ipairs { "I-sound", "I-assimilated", "none-sound", "none-hollow", "none-geminate",
"none-final-weak" } do
table.insert(allowed_vforms_with_weakness, form_with_weakness)
end
local allowed_vforms_with_weakness_set = m_table.listToSet(allowed_vforms_with_weakness)
local function vform_supports_final_weak(vform)
return vform ~= "XI" and vform ~= "XV" and vform ~= "IVq"
end
local function vform_supports_geminate(vform)
return vform == "I" or vform == "III" or vform == "IV" or vform == "VI" or vform == "VII" or vform == "VIII" or
vform == "X"
end
local function vform_supports_hollow(vform)
return vform == "I" or vform == "IV" or vform == "VII" or vform == "VIII" or vform == "X"
end
local function vform_probably_impersonal_passive(vform, weakness, past_vowel, nonpast_vowel)
return vform == "I" and req(past_vowel, I) or vform == "V" or vform == "VI" or vform == "X" or vform == "IIq"
end
local function vform_probably_full_passive(vform)
return vform == "II" or vform == "III" or vform == "IV" or vform == "Iq"
end
local function vform_probably_no_passive(vform, weakness, past_vowel, nonpast_vowel)
return vform == "I" and req(past_vowel, U) or vform == "VII" or vform == "IX" or
vform == "XI" or vform == "XII" or vform == "XIII" or vform == "XIV" or vform == "XV" or
vform == "IIIq" or vform == "IVq"
end
-- Active vforms II, III, IV, Iq use non-past prefixes in -u- instead of -a-.
local function prefix_vowel_from_vform(vform)
if vform == "II" or vform == "III" or vform == "IV" or vform == "Iq" then
return "u"
else
return "a"
end
end
-- True if the active non-past takes a-vocalization rather than i-vocalization in its last syllable.
local function vform_nonpast_a_vowel(vform)
return vform == "V" or vform == "VI" or vform == "XV" or vform == "IIq"
end
-- True if the `passive` spec indicates a passive-only verb.
local function is_passive_only(passive)
return passive == "onlypass" or passive == "onlypass-impers"
end
export.is_passive_only = is_passive_only -- for use in [[Module:ar-headword]]
-------------------------------------------------------------------------------
-- Properties of specific sounds --
-------------------------------------------------------------------------------
-- Is radical wāw (و) or yāʾ (ي)?
local function is_waw_ya(rad)
return req(rad, W) or req(rad, Y)
end
-- Check that radical is wāw (و) or yāʾ (ي), error if not
local function check_waw_ya(rad)
if not is_waw_ya(rad) then
error("Expecting weak radical: '" .. rget(rad) .. "' should be " .. W .. " or " .. Y)
end
end
-- Form-I verb حيّ or حيي and form-X verb استحيا or استحى
local function hayy_radicals(rad1, rad2, rad3)
return req(rad1, "ح") and req(rad2, Y) and is_waw_ya(rad3)
end
-- FUCK ME HARD. "Lua error at line 1514: main function has more than 200 local variables".
local function create_conjugations()
-------------------------------------------------------------------------------
-- Radicals associated with various irregular verbs --
-------------------------------------------------------------------------------
-- Form-I verb أخذ or form-VIII verb اتخذ
local function axadh_radicals(rad1, rad2, rad3)
return req(rad1, HAMZA) and req(rad2, "خ") and req(rad3, "ذ")
end
-- Form-I verb whose imperative has a reduced form: أكل and أخذ and أمر. Return "shortonly" if only
-- short-form imperatives exist (أكل and أخذ) or "shortlong" if long-form imperatives also exist (أمر);
-- they are used after a clitic like فَ and وَ.
local function reduced_imperative_verb(rad1, rad2, rad3)
return axadh_radicals(rad1, rad2, rad3) and "shortonly" or
req(rad1, HAMZA) and req(rad2, "ك") and req(rad3, "ل") and "shortonly" or
req(rad1, HAMZA) and req(rad2, "م") and req(rad3, "ر") and "shortlong"
end
-- Form-I verb رأى and form-IV verb أرى
local function raa_radicals(rad1, rad2, rad3)
return req(rad1, "ر") and req(rad2, HAMZA) and is_waw_ya(rad3)
end
-- Form-I verb سأل
local function saal_radicals(rad1, rad2, rad3)
return req(rad1, "س") and req(rad2, HAMZA) and req(rad3, "ل")
end
-- Form-I verb كان
local function kaan_radicals(rad1, rad2, rad3)
return req(rad1, "ك") and req(rad2, W) and req(rad3, N)
end
-- Form-I hollow verb سالَ يَسالُ, the hamza-less variant of سَأَلَ. Distinct from
-- saal_radicals() above, which is the hamzated root itself.
local function saal_hollow_radicals(rad1, rad2, rad3)
return req(rad1, "س") and req(rad2, W) and req(rad3, "ل")
end
-------------------------------------------------------------------------------
-- Sets of past endings --
-------------------------------------------------------------------------------
-- The 13 endings of the sound/hollow/geminate past tense.
local past_endings = {
-- singular
SK .. TU, SK .. TA, SK .. "تِ", A, A .. "تْ",
--dual
SK .. "تُمَا", AA, A .. "تَا",
-- plural
SK .. "نَا", SK .. "تُمْ",
-- shadda + vowel diacritic ends up in the wrong order due to Unicode
-- bug, so keep them separate to avoid this
SK .. "تُن" .. SH .. A, UU .. ALIF, SK .. "نَ"
}
-- Make endings for final-weak past in -aytu or -awtu. AYAW is AY or AW as appropriate. Note that AA and AW are
-- global variables.
local function make_past_endings_ay_aw(ayaw, third_sg_masc)
return {
-- singular
ayaw .. SK .. TU, ayaw .. SK .. TA, ayaw .. SK .. "تِ",
third_sg_masc, A .. "تْ",
--dual
ayaw .. SK .. "تُمَا", ayaw .. AA, A .. "تَا",
-- plural
ayaw .. SK .. "نَا", ayaw .. SK .. "تُمْ",
-- shadda + vowel diacritic ends up in the wrong order due to Unicode
-- bug, so keep them separate to avoid this
ayaw .. SK .. "تُن" .. SH .. A, AW .. SK .. ALIF, ayaw .. SK .. "نَ"
}
end
-- past final-weak -aytu endings
local past_endings_ay = make_past_endings_ay_aw(AY, AAMAQ)
-- past final-weak -awtu endings
local past_endings_aw = make_past_endings_ay_aw(AW, AA)
-- used for alternative endings for form-X geminate verbs like اِسْتَمَرَّ
local past_endings_ay_12_person_only = {
-- singular
AY .. SK .. TU, AY .. SK .. TA, AY .. SK .. "تِ",
{}, {},
--dual
AY .. SK .. "تُمَا", {}, {},
-- plural
AY .. SK .. "نَا", AY .. SK .. "تُمْ",
-- shadda + vowel diacritic ends up in the wrong order due to Unicode
-- bug, so keep them separate to avoid this
AY .. SK .. "تُن" .. SH .. A, {}, {},
}
-- Make endings for final-weak past in -ītu or -ūtu. IIUU is ī or ū as appropriate. Note that AA and UU are global
-- variables.
local function make_past_endings_ii_uu(iiuu)
return {
-- singular
iiuu .. TU, iiuu .. TA, iiuu .. "تِ", iiuu .. A, iiuu .. A .. "تْ",
--dual
iiuu .. "تُمَا", iiuu .. AA, iiuu .. A .. "تَا",
-- plural
iiuu .. "نَا", iiuu .. "تُمْ",
-- shadda + vowel diacritic ends up in the wrong order due to Unicode
-- bug, so keep them separate to avoid this
iiuu .. "تُن" .. SH .. A, UU .. ALIF, iiuu .. "نَ"
}
end
-- past final-weak -ītu endings
local past_endings_ii = make_past_endings_ii_uu(II)
-- past final-weak -ūtu endings
local past_endings_uu = make_past_endings_ii_uu(UU)
-------------------------------------------------------------------------------
-- Sets of non-past prefixes and endings --
-------------------------------------------------------------------------------
local nonpast_prefix_consonants = {
-- singular
HAMZA, T, T, Y, T,
-- dual
T, Y, T,
-- plural
N, T, T, Y, Y
}
-- There are only five distinct endings in all non-past verbs. Make any set of non-past endings given these five
-- distinct endings.
local function make_nonpast_endings(null, fem, dual, pl, fempl)
return {
-- singular
null, null, fem, null, null,
-- dual
dual, dual, dual,
-- plural
null, pl, fempl, pl, fempl
}
end
-- endings for non-past indicative
local ind_endings = make_nonpast_endings(
U,
II .. NA,
AANI,
UU .. NA,
SK .. NA
)
-- Make the endings for non-past subjunctive/jussive, given the vowel diacritic used in "null" endings
-- (1s/2ms/3ms/3fs/1p).
local function make_sub_juss_endings(dia_null)
return make_nonpast_endings(
dia_null,
II,
AA,
UU .. ALIF,
SK .. NA
)
end
-- endings for non-past subjunctive
local sub_endings = make_sub_juss_endings(A)
-- endings for non-past jussive
local juss_endings = make_sub_juss_endings(SK)
-- endings for alternative geminate non-past jussive in -a; same as subjunctive
local juss_endings_alt_a = sub_endings
-- endings for alternative geminate non-past jussive in -i
local juss_endings_alt_i = make_sub_juss_endings(I)
-- Endings for final-weak non-past indicative in -ā. Note that AY, AW and AAMAQ are global variables.
local ind_endings_aa = make_nonpast_endings(
AAMAQ,
AYSK .. NA,
AY .. AANI,
AWSK .. NA,
AYSK .. NA
)
-- Make endings for final-weak non-past indicative in -ī or -ū; IIUU is ī or ū as appropriate. Note that II and UU
-- are global variables.
local function make_ind_endings_ii_uu(iiuu)
return make_nonpast_endings(
iiuu,
II .. NA,
iiuu .. AANI,
UU .. NA,
iiuu .. NA
)
end
-- endings for final-weak non-past indicative in -ī
local ind_endings_ii = make_ind_endings_ii_uu(II)
-- endings for final-weak non-past indicative in -ū
local ind_endings_uu = make_ind_endings_ii_uu(UU)
-- Endings for final-weak non-past subjunctive in -ā. Note that AY, AW, ALIF, AAMAQ are global variables.
local sub_endings_aa = make_nonpast_endings(
AAMAQ,
AYSK,
AY .. AA,
AWSK .. ALIF,
AYSK .. NA
)
-- Make endings for final-weak non-past subjunctive in -ī or -ū. IIUU is ī or ū as appropriate. Note that AA, II,
-- UU, ALIF are global variables.
local function make_sub_endings_ii_uu(iiuu)
return make_nonpast_endings(
iiuu .. A,
II,
iiuu .. AA,
UU .. ALIF,
iiuu .. NA
)
end
-- endings for final-weak non-past subjunctive in -ī
local sub_endings_ii = make_sub_endings_ii_uu(II)
-- endings for final-weak non-past subjunctive in -ū
local sub_endings_uu = make_sub_endings_ii_uu(UU)
-- endings for final-weak non-past jussive in -ā
local juss_endings_aa = make_nonpast_endings(
A,
AYSK,
AY .. AA,
AWSK .. ALIF,
AYSK .. NA
)
-- Make endings for final-weak non-past jussive in -ī or -ū. IU is short i or u, IIUU is long ī or ū as appropriate.
-- Note that AA, II, UU, ALIF are global variables.
local function make_juss_endings_ii_uu(iu, iiuu)
return make_nonpast_endings(
iu,
II,
iiuu .. AA,
UU .. ALIF,
iiuu .. NA
)
end
-- endings for final-weak non-past jussive in -ī
local juss_endings_ii = make_juss_endings_ii_uu(I, II)
-- endings for final-weak non-past jussive in -ū
local juss_endings_uu = make_juss_endings_ii_uu(U, UU)
-------------------------------------------------------------------------------
-- Sets of imperative endings --
-------------------------------------------------------------------------------
-- Extract the second person jussive endings to get corresponding imperative endings.
local function imperative_endings_from_jussive(endings)
return {endings[2], endings[3], endings[6], endings[10], endings[11]}
end
-- normal imperative endings
local imp_endings = imperative_endings_from_jussive(juss_endings)
-- alternative geminate imperative endings in -a
local imp_endings_alt_a = imperative_endings_from_jussive(juss_endings_alt_a)
-- alternative geminate imperative endings in -i
local imp_endings_alt_i = imperative_endings_from_jussive(juss_endings_alt_i)
-- final-weak imperative endings in -ā
local imp_endings_aa = imperative_endings_from_jussive(juss_endings_aa)
-- final-weak imperative endings in -ī
local imp_endings_ii = imperative_endings_from_jussive(juss_endings_ii)
-- final-weak imperative endings in -ū
local imp_endings_uu = imperative_endings_from_jussive(juss_endings_uu)
-------------------------------------------------------------------------------
-- Basic functions to inflect tenses --
-------------------------------------------------------------------------------
-- Add to `base` the inflections for the tense indicated by `tense` (the prefix in the slot names, e.g. 'past'
-- or 'juss_pass'), formed by combining the `prefixes`, `stems` and `endings`. Each of `prefixes`, `stems` and
-- `endings` is either a sequence of 5 (for the imperative) or 13 (for other tenses) abbreviated form lists (each of
-- which is either a string, a form object, or a list of strings and/or form objects; see
-- [[Module:inflection utilities]] for more info). Alternatively, any of `prefixes`, `stems` or `endings` can be a
-- single-element list containing an abbreviated form list, with an additional key `all_same` set to true, or (as a
-- special case) a single string; in the latter cases, the same value is used for all 5 or 13 slots. If existing
-- inflections already exist, they will be added to, not overridden. `pnums` is the list of person/number slot name
-- suffixes, which must match up with the elements in `prefixes`, `stems` and `endings` (i.e. 5 for imperative, 13
-- otherwise).
local function inflect_tense_1(base, tense, prefixes, stems, endings, pnums)
if not prefixes or not stems or not endings then
return
end
local function verify_affixes(affixname, affixes)
local function interr(msg)
error(("Internal error: For tense '%s', '%s' %s: %s"):format(tense, affixname, msg, dump(affixes)))
end
if type(affixes) == "string" then
-- do nothing
elseif type(affixes) ~= "table" then
interr("is not a table or string")
elseif affixes.all_same then
if #affixes ~= 1 then
interr(("with all_same = true should have length 1 but has length %s"):format(#affixes))
end
else
if #affixes ~= #pnums then
interr(("should have length %s but has length %s"):format(#pnums, #affixes))
end
end
end
verify_affixes("prefixes", prefixes)
verify_affixes("stems", stems)
verify_affixes("endings", endings)
local function get_affix(affixes, i)
if type(affixes) == "string" then
return affixes
elseif affixes.all_same then
return affixes[1]
else
return affixes[i]
end
end
for i, pnum in ipairs(pnums) do
local prefix = get_affix(prefixes, i)
local stem = get_affix(stems, i)
local ending = get_affix(endings, i)
local slot = tense .. "_" .. pnum
add3(base, slot, prefix, stem, ending)
end
end
-- Add to `base` the inflections for the tense indicated by `tense` (the prefix in the slot names, e.g. 'past'
-- or 'juss_pass'), formed by combining the `prefixes`, `stems` and `endings`. This is a simple wrapper around
-- inflect_tense_1() that applies to all tenses other than the imperative; see inflect_tense_1() for more
-- information about the parameters.
local function inflect_tense(base, tense, prefixes, stems, endings)
inflect_tense_1(base, tense, prefixes, stems, endings, all_person_number_list)
end
-- Like inflect_tense() but for the imperative, which has only five parts instead of 13 and no prefixes.
local function inflect_tense_imp(base, stems, endings)
inflect_tense_1(base, "imp", "", stems, endings, imp_person_number_list)
end
-------------------------------------------------------------------------------
-- Functions to inflect the past tense --
-------------------------------------------------------------------------------
-- Generate past verbs using specified vowel and consonant stems; works for sound, assimilated, hollow, and geminate
-- verbs, active and passive.
local function past_2stem_conj(base, tense, v_stem, c_stem, footnote_12)
local passive = tense:find("_pass") and "_pass" or ""
-- Override stems with user-specified stems if available.
v_stem = override_stem_if_needed(base, "past" .. passive .. "_v", v_stem)
local c_stem_12 = c_stem
if footnote_12 then
c_stem_12 = iut.combine_form_and_footnotes(c_stem_12, footnote_12)
end
c_stem_12 = override_stem_if_needed(base, "past" .. passive .. "_c", c_stem_12)
local c_stem_3 = override_stem_if_needed(base, "past" .. passive .. "_c", c_stem)
inflect_tense(base, tense, "", {
-- singular
c_stem_12, c_stem_12, c_stem_12, v_stem, v_stem,
--dual
c_stem_12, v_stem, v_stem,
-- plural
c_stem_12, c_stem_12, c_stem_12, v_stem, c_stem_3
}, past_endings)
end
-- Generate past verbs using single specified stem; works for sound and assimilated verbs, active and passive.
local function past_1stem_conj(base, tense, stem)
past_2stem_conj(base, tense, stem, stem)
end
-------------------------------------------------------------------------------
-- Functions to inflect non-past tenses --
-------------------------------------------------------------------------------
-- Generate non-past conjugation, with two stems, for vowel-initial and consonant-initial endings, respectively.
-- Useful for active and passive; for all forms; for all weaknesses (sound, assimilated, hollow, final-weak and
-- geminate) and for all types of non-past (indicative, subjunctive, jussive) except for the imperative. (There is a
-- separate wrapper function below for geminate jussives because they have three alternants.) Both stems may be the
-- same, e.g. for sound verbs.
-- `prefix_vowel` will be either "a" or "u". `endings` should be an array of 13 items. If `endings` is nil or
-- omitted, infer the endings from the tense. If `jussive` is true, or `endings` is nil and `tense` indicatives
-- jussive, use the jussive pattern of vowel/consonant stems (different from the normal ones).
local function nonpast_2stem_conj(base, tense, prefix_vowel, v_stem, c_stem, endings, jussive)
local passive = tense:find("_pass") and "_pass" or ""
-- Override stems with user-specified stems if available.
v_stem = override_stem_if_needed(base, "nonpast" .. passive .. "_v",
v_stem and q(dia[prefix_vowel], v_stem) or nil)
c_stem = override_stem_if_needed(base, "nonpast" .. passive .. "_c",
c_stem and q(dia[prefix_vowel], c_stem) or nil)
if not endings then
if tense:find("^ind") then
endings = ind_endings
elseif tense:find("^sub") then
endings = sub_endings
elseif tense:find("^juss") then
jussive = true
endings = juss_endings
else
error("Internal error: Unrecognized tense '" .. tense .."'")
end
end
if not jussive then
inflect_tense(base, tense, nonpast_prefix_consonants, {
-- singular
v_stem, v_stem, v_stem, v_stem, v_stem,
--dual
v_stem, v_stem, v_stem,
-- plural
v_stem, v_stem, c_stem, v_stem, c_stem
}, endings)
else
inflect_tense(base, tense, nonpast_prefix_consonants, {
-- singular
-- 'adlul, tadlul, tadullī, yadlul, tadlul
c_stem, c_stem, v_stem, c_stem, c_stem,
--dual
-- tadullā, yadullā, tadullā
v_stem, v_stem, v_stem,
-- plural
-- nadlul, tadullū, tadlulna, yadullū, yadlulna
c_stem, v_stem, c_stem, v_stem, c_stem
}, endings)
end
end
-- Generate non-past conjugation with one stem (no distinct stems for vowel-initial and consonant-initial endings).
-- See nonpast_2stem_conj().
local function nonpast_1stem_conj(base, tense, prefix_vowel, stem, endings, jussive)
nonpast_2stem_conj(base, tense, prefix_vowel, stem, stem, endings, jussive)
end
-- Generate active/passive jussive geminative. There are three alternants, two with terminations -a and -i and one
-- in a null termination with a distinct pattern of vowel/consonant stem usage. See nonpast_2stem_conj() for a
-- description of the arguments.
local function jussive_gem_conj(base, tense, prefix_vowel, v_stem, c_stem)
-- alternative in -a
nonpast_2stem_conj(base, tense, prefix_vowel, v_stem, c_stem, juss_endings_alt_a)
-- alternative in -i
nonpast_2stem_conj(base, tense, prefix_vowel, v_stem, c_stem, juss_endings_alt_i)
-- alternative in -null; requires different combination of v_stem and
-- c_stem since the null endings require the c_stem (e.g. "tadlul" here)
-- whereas the corresponding endings above in -a or -i require the v_stem
-- (e.g. "tadulla, tadulli" above)
nonpast_2stem_conj(base, tense, prefix_vowel, v_stem, c_stem, juss_endings, "jussive")
end
-------------------------------------------------------------------------------
-- Functions to inflect the imperative --
-------------------------------------------------------------------------------
-- Generate imperative conjugation, with two stems, for vowel-initial and consonant-initial endings, respectively.
-- Useful for all forms, and for all weaknesses other than final-weak. Note that the two stems may be the same
-- (specifically for sound and assimilated verbs). If `endings` is nil or omitted, use `imp_endings`. If `alt_gem`
-- is specified, use the pattern of vowel and consonant stems appropriate for the alternative geminate imperatives
-- that use a null ending of -a or -i instead of an empty ending.
local function make_2stem_imperative(base, v_stem, c_stem, endings, alt_gem)
endings = endings or imp_endings
-- Override stems with user-specified stems if available.
v_stem = override_stem_if_needed(base, "imp_v", v_stem)
c_stem = override_stem_if_needed(base, "imp_c", c_stem)
if alt_gem then
inflect_tense_imp(base, {v_stem, v_stem, v_stem, v_stem, c_stem}, endings)
else
inflect_tense_imp(base, {c_stem, v_stem, v_stem, v_stem, c_stem}, endings)
end
end
-- Generate imperative parts for sound or assimilated verbs.
local function make_1stem_imperative(base, stem)
make_2stem_imperative(base, stem, stem)
end
-- Generate imperative parts for geminate verbs form I (also IV, VII, VIII, X).
local function make_gem_imperative(base, v_stem, c_stem)
make_2stem_imperative(base, v_stem, c_stem, imp_endings_alt_a, "alt gem")
make_2stem_imperative(base, v_stem, c_stem, imp_endings_alt_i, "alt gem")
make_2stem_imperative(base, v_stem, c_stem)
end
-------------------------------------------------------------------------------
-- Functions to inflect entire verbs --
-------------------------------------------------------------------------------
-- Generate finite parts of a sound verb (also works for assimilated verbs) from five stems (past and non-past,
-- active and passive, plus imperative) plus the prefix vowel in the active non-past ("a" or "u").
local function make_sound_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem, imp_stem,
prefix_vowel)
past_1stem_conj(base, "past", past_stem)
past_1stem_conj(base, "past_pass", past_pass_stem)
nonpast_1stem_conj(base, "ind", prefix_vowel, nonpast_stem)
nonpast_1stem_conj(base, "sub", prefix_vowel, nonpast_stem)
nonpast_1stem_conj(base, "juss", prefix_vowel, nonpast_stem)
nonpast_1stem_conj(base, "ind_pass", "u", nonpast_pass_stem)
nonpast_1stem_conj(base, "sub_pass", "u", nonpast_pass_stem)
nonpast_1stem_conj(base, "juss_pass", "u", nonpast_pass_stem)
make_1stem_imperative(base, imp_stem)
end
local function past_final_weak_endings_from_vowel(vowel)
if vowel == "ay" then
return past_endings_ay
elseif vowel == "aw" then
return past_endings_aw
elseif vowel == "ī" then
return past_endings_ii
elseif vowel == "ū" then
return past_endings_uu
elseif not vowel then
return nil
else
error(("Internal error: Unrecognized past final-weak vowel spec '%s'"):format(vowel))
end
end
local function nonpast_final_weak_endings_from_vowel(vowel)
if vowel == "ā" then
return ind_endings_aa, sub_endings_aa, juss_endings_aa, imp_endings_aa
elseif vowel == "ī" then
return ind_endings_ii, sub_endings_ii, juss_endings_ii, imp_endings_ii
elseif vowel == "ū" then
return ind_endings_uu, sub_endings_uu, juss_endings_uu, imp_endings_uu
elseif not vowel then
return nil
else
error(("Internal error: Unrecognized non-past final-weak vowel spec '%s'"):format(vowel))
end
end
-- Generate finite parts of a final-weak verb from five stems (past and non-past, active and passive, plus
-- imperative), the past active ending vowel (ay, aw, ī or ū), the non-past active ending vowel (ā, ī or ū) and the
-- prefix vowel in the active non-past (a or u). All five imperative persons share `imp_stem`, so the
-- hamzat wasl carries the verb's own vowel class throughout -- اُدْعُ and اُدْعِي alike. The 2fs used to
-- take a kasra one of its own (finding #5, now #11): its ending is -ī regardless of vowel class, so the
-- stem vowel surfaces as a kasra there, and #5 read that as pulling the hamza with it. The book prints
-- the ḍamma -- اُدْعِي (p.141), اُعْلِي and اُغْزِي (p159) -- so the surfacing kasra is عارض and leaves the
-- hamza alone, exactly as the ḍamma of اِمْشُوا leaves it alone in the mirror case.
--
-- `retain_rad3_2fs`, if true, keeps rad3 as a consonant before that -ī instead of letting it
-- contract away: تَسْهُوِينَ / اُسْهُوِي rather than تَسْهِينَ / اِسْهِي. See README "Findings" #8
-- and final_weak_uu_retains_rad3().
local function make_final_weak_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem, imp_stem,
past_ending_vowel, nonpast_ending_vowel, prefix_vowel, retain_rad3_2fs)
past_stem = override_stem_if_needed(base, "past", past_stem)
past_pass_stem = override_stem_if_needed(base, "past_pass", past_pass_stem)
-- Don't call override_stem_if_needed() here for non-past stems; it's called in nonpast_2stem_conj().
imp_stem = override_stem_if_needed(base, "imp", imp_stem)
-- + not supported for ending vowel overrides
past_ending_vowel = base.stem_overrides.past_final_weak_vowel or past_ending_vowel
local past_pass_ending_vowel = base.stem_overrides.past_pass_final_weak_vowel or "ī"
nonpast_ending_vowel = base.stem_overrides.nonpast_final_weak_vowel or nonpast_ending_vowel
local nonpast_pass_ending_vowel = base.stem_overrides.nonpast_pass_final_weak_vowel or "ā"
local past_endings = past_final_weak_endings_from_vowel(past_ending_vowel)
local past_pass_endings = past_final_weak_endings_from_vowel(past_pass_ending_vowel)
local ind_endings, sub_endings, juss_endings, imp_endings =
nonpast_final_weak_endings_from_vowel(nonpast_ending_vowel)
local ind_pass_endings, sub_pass_endings, juss_pass_endings =
nonpast_final_weak_endings_from_vowel(nonpast_pass_ending_vowel)
if retain_rad3_2fs then
-- rad3 surfaces as a consonant carrying the class's own ḍamma, then the regular -ī:
-- سْهـ + ُوِينَ, not سْهـ + ِينَ. The 2fs sits at index 3 of a make_nonpast_endings()
-- table (`fem`) and at index 2 of the five imperative endings that
-- imperative_endings_from_jussive() extracts from it. Copied rather than mutated --
-- these ending tables are module-level constants shared by every final-weak verb.
-- Written out inline, not via a helper: create_conjugations() is at Lua's 60-upvalue
-- ceiling, and one more captured local stops the module loading at all.
local function set_2fs(endings, index, ending)
local out = {}
for i, v in ipairs(endings) do out[i] = v end
out[index] = ending
return out
end
ind_endings = set_2fs(ind_endings, 3, UU .. II .. NA)
sub_endings = set_2fs(sub_endings, 3, UU .. II)
juss_endings = set_2fs(juss_endings, 3, UU .. II)
imp_endings = set_2fs(imp_endings, 2, UU .. II)
end
inflect_tense(base, "past", "", {past_stem, all_same = 1}, past_endings)
inflect_tense(base, "past_pass", "", {past_pass_stem, all_same = 1}, past_pass_endings)
nonpast_1stem_conj(base, "ind", prefix_vowel, nonpast_stem, ind_endings)
nonpast_1stem_conj(base, "sub", prefix_vowel, nonpast_stem, sub_endings)
nonpast_1stem_conj(base, "juss", prefix_vowel, nonpast_stem, juss_endings)
nonpast_1stem_conj(base, "ind_pass", "u", nonpast_pass_stem, ind_pass_endings)
nonpast_1stem_conj(base, "sub_pass", "u", nonpast_pass_stem, sub_pass_endings)
nonpast_1stem_conj(base, "juss_pass", "u", nonpast_pass_stem, juss_pass_endings)
inflect_tense_imp(base, {imp_stem, all_same = 1}, imp_endings)
end
-- Generate finite parts of an augmented (form II+) final-weak verb from five stems (past and non-past, active and
-- passive, plus imperative) plus the prefix vowel in the active non-past ("a" or "u") and a flag indicating if it
-- behaves like a form V/VI verb in taking non-past endings in -ā instead of -ī.
local function make_augmented_final_weak_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem,
imp_stem, prefix_vowel, form56)
make_final_weak_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem, imp_stem, "ay",
form56 and "ā" or "ī", prefix_vowel)
end
-- Generate finite parts of an augmented (form II+) sound or final-weak verb, given:
-- * `base` (conjugation data structure);
-- * `vowel_spec` (radicals, weakness);
-- * `past_stem_base` (active past stem minus last syllable (= -al or -ā));
-- * `nonpast_stem_base` (non-past stem minus last syllable (= -al/-il or -ā/-ī);
-- * `past_pass_stem_base` (passive past stem minus last syllable (= -il or -ī));
-- * `vn` (verbal noun).
local function make_augmented_sound_final_weak_verb(base, vowel_spec, past_stem_base, nonpast_stem_base,
past_pass_stem_base, vn)
insert_form_or_forms(base, "vn", vn)
local lastrad = base.quadlit and vowel_spec.rad4 or vowel_spec.rad3
local final_weak = is_final_weak(base, vowel_spec)
local prefix_vowel = prefix_vowel_from_vform(base.verb_form)
local form56 = vform_nonpast_a_vowel(base.verb_form)
local a_base_suffix = final_weak and "" or q(A, lastrad)
local i_base_suffix = final_weak and "" or q(I, lastrad)
-- past and non-past stems, active and passive
local past_stem = q(past_stem_base, a_base_suffix)
-- In forms 5 and 6, non-past has /a/ as last stem vowel in the non-past
-- in both active and passive, but /i/ in the active participle and /a/
-- in the passive participle. Elsewhere, consistent /i/ in active non-past
-- and participle, consistent /a/ in passive non-past and participle.
-- Hence, forms 5 and 6 differ only in the non-past active (but not
-- active participle), so we have to split the finite non-past stem and
-- active participle stem.
local nonpast_stem = q(nonpast_stem_base, form56 and a_base_suffix or i_base_suffix)
local ap_stem = q(nonpast_stem_base, i_base_suffix)
local past_pass_stem = q(past_pass_stem_base, i_base_suffix)
local nonpast_pass_stem = q(nonpast_stem_base, a_base_suffix)
-- imperative stem
local imp_stem = q(past_stem_base, form56 and a_base_suffix or i_base_suffix)
-- make parts
if final_weak then
make_augmented_final_weak_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem, imp_stem,
prefix_vowel, form56)
else
make_sound_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem, imp_stem, prefix_vowel)
end
-- active and passive participle
if final_weak then
insert_form_or_forms(base, "ap", q(MU, ap_stem, IN))
insert_form_or_forms(base, "pp", q(MU, nonpast_pass_stem, AN, AMAQ))
else
insert_form_or_forms(base, "ap", q(MU, ap_stem))
insert_form_or_forms(base, "pp", q(MU, nonpast_pass_stem))
end
end
-- Generate finite parts of a hollow or geminate verb from ten stems (vowel and consonant stems for each of past and
-- non-past, active and passive, plus imperative) plus the prefix vowel in the active non-past ("a" or "u"), plus a
-- flag indicating if we are a geminate verb.
local function make_hollow_geminate_verb(base, geminate, past_v_stem, past_c_stem, past_pass_v_stem,
past_pass_c_stem, nonpast_v_stem, nonpast_c_stem, nonpast_pass_v_stem, nonpast_pass_c_stem, imp_v_stem,
imp_c_stem, prefix_vowel, altgem_note)
past_2stem_conj(base, "past", past_v_stem, past_c_stem, altgem_note)
past_2stem_conj(base, "past_pass", past_pass_v_stem, past_pass_c_stem)
nonpast_2stem_conj(base, "ind", prefix_vowel, nonpast_v_stem, nonpast_c_stem)
nonpast_2stem_conj(base, "sub", prefix_vowel, nonpast_v_stem, nonpast_c_stem)
nonpast_2stem_conj(base, "ind_pass", "u", nonpast_pass_v_stem, nonpast_pass_c_stem)
nonpast_2stem_conj(base, "sub_pass", "u", nonpast_pass_v_stem, nonpast_pass_c_stem)
if geminate then
jussive_gem_conj(base, "juss", prefix_vowel, nonpast_v_stem, nonpast_c_stem)
jussive_gem_conj(base, "juss_pass", "u", nonpast_pass_v_stem, nonpast_pass_c_stem)
make_gem_imperative(base, imp_v_stem, imp_c_stem)
else
nonpast_2stem_conj(base, "juss", prefix_vowel, nonpast_v_stem, nonpast_c_stem)
nonpast_2stem_conj(base, "juss_pass", "u", nonpast_pass_v_stem, nonpast_pass_c_stem)
make_2stem_imperative(base, imp_v_stem, imp_c_stem)
end
end
-- Generate finite parts of an augmented (form II+) hollow verb, given:
-- * `base` (conjugation data structure);
-- * `vowel_spec` (radicals, weakness);
-- * `past_stem_base` (invariable part of active past stem);
-- * `nonpast_stem_base` (invariable part of nonpast stem);
-- * `past_pass_stem_base` (invariable part of passive past stem);
-- * `vn` (verbal noun).
local function make_augmented_hollow_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base,
vn)
insert_form_or_forms(base, "vn", vn)
local lastrad = base.quadlit and vowel_spec.rad4 or vowel_spec.rad3
local form410 = base.verb_form == "IV" or base.verb_form == "X"
local prefix_vowel = prefix_vowel_from_vform(base.verb_form)
local a_base_suffix_v, a_base_suffix_c
local i_base_suffix_v, i_base_suffix_c
a_base_suffix_v = q(AA, lastrad) -- 'af-āl-a, inf-āl-a
a_base_suffix_c = q(A, lastrad) -- 'af-al-tu, inf-al-tu
i_base_suffix_v = q(II, lastrad) -- 'uf-īl-a, unf-īl-a
i_base_suffix_c = q(I, lastrad) -- 'uf-il-tu, unf-il-tu
-- past and non-past stems, active and passive, for vowel-initial and
-- consonant-initial endings
local past_v_stem = q(past_stem_base, a_base_suffix_v)
local past_c_stem = q(past_stem_base, a_base_suffix_c)
-- yu-f-īl-u, ya-staf-īl-u but yanf-āl-u, yaft-āl-u
local nonpast_v_stem = q(nonpast_stem_base, form410 and i_base_suffix_v or a_base_suffix_v)
local nonpast_c_stem = q(nonpast_stem_base, form410 and i_base_suffix_c or a_base_suffix_c)
local past_pass_v_stem = q(past_pass_stem_base, i_base_suffix_v)
local past_pass_c_stem = q(past_pass_stem_base, i_base_suffix_c)
local nonpast_pass_v_stem = q(nonpast_stem_base, a_base_suffix_v)
local nonpast_pass_c_stem = q(nonpast_stem_base, a_base_suffix_c)
-- imperative stem
local imp_v_stem = q(past_stem_base, form410 and i_base_suffix_v or a_base_suffix_v)
local imp_c_stem = q(past_stem_base, form410 and i_base_suffix_c or a_base_suffix_c)
-- make parts
make_hollow_geminate_verb(base, false, past_v_stem, past_c_stem, past_pass_v_stem,
past_pass_c_stem, nonpast_v_stem, nonpast_c_stem, nonpast_pass_v_stem,
nonpast_pass_c_stem, imp_v_stem, imp_c_stem, prefix_vowel)
-- active participle
insert_form_or_forms(base, "ap", q(MU, nonpast_v_stem))
-- passive participle
insert_form_or_forms(base, "pp", q(MU, nonpast_pass_v_stem))
end
-- Generate finite parts of an augmented (form II+) geminate verb, given:
-- * `base` (conjugation data structure);
-- * `vowel_spec` (radicals, weakness);
-- * `past_stem_base` (invariable part of active past stem; this and the stem bases below will end with a consonant
-- for forms IV, X, IVq, and a short vowel for the others);
-- * `nonpast_stem_base` (invariable part of nonpast stem);
-- * `past_pass_stem_base` (invariable part of passive past stem);
-- * `vn` (verbal noun);
-- * `altgem_note` (footnote to add to active past 1/2-person forms, when alternative forms are supplied [form X]).
local function make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base,
past_pass_stem_base, vn, altgem_note)
insert_form_or_forms(base, "vn", vn)
local vform = base.verb_form
local lastrad = base.quadlit and vowel_spec.rad4 or vowel_spec.rad3
local prefix_vowel = prefix_vowel_from_vform(vform)
local a_base_suffix_v, a_base_suffix_c
local i_base_suffix_v, i_base_suffix_c
if vform == "IV" or vform == "X" or vform == "IVq" then
a_base_suffix_v = q(A, lastrad, SH) -- 'af-all
a_base_suffix_c = q(SK, lastrad, A, lastrad) -- 'af-lal
i_base_suffix_v = q(I, lastrad, SH) -- yuf-ill
i_base_suffix_c = q(SK, lastrad, I, lastrad) -- yuf-lil
else
a_base_suffix_v = q(lastrad, SH) -- fā-ll, infa-ll
a_base_suffix_c = q(lastrad, A, lastrad) -- fā-lal, infa-lal
i_base_suffix_v = q(lastrad, SH) -- yufā-ll, yanfa-ll
i_base_suffix_c = q(lastrad, I, lastrad) -- yufā-lil, yanfa-lil
end
-- past and non-past stems, active and passive, for vowel-initial and
-- consonant-initial endings
local past_v_stem = q(past_stem_base, a_base_suffix_v)
local past_c_stem = q(past_stem_base, a_base_suffix_c)
local nonpast_v_stem = q(nonpast_stem_base, vform_nonpast_a_vowel(vform) and a_base_suffix_v or i_base_suffix_v)
local nonpast_c_stem = q(nonpast_stem_base, vform_nonpast_a_vowel(vform) and a_base_suffix_c or i_base_suffix_c)
-- NOTE: Formerly had a comment that "vform III and VI passive past do not have contracted parts, only
-- uncontracted parts, which are added separately by those functions". This is based on Mace
-- "Arabic Verbs and Essential Grammar" (1999) entry 63 (continued), which shows passive ḥūjija but no ḥūjja;
-- but that is apparently a mistake, as (1) verb tables in other books do show contracted passive parts for
-- these forms; (2) there is no mention of such an exception on p. 99, which explains how geminate ("doubled")
-- verbs work (on the contrary, it says "The contracted and uncontracted pairs (see above) are found all
-- over Forms III and VI of the doubled verbs").
local past_pass_v_stem = q(past_pass_stem_base, i_base_suffix_v)
local past_pass_c_stem = q(past_pass_stem_base, i_base_suffix_c)
local nonpast_pass_v_stem = q(nonpast_stem_base, a_base_suffix_v)
local nonpast_pass_c_stem = q(nonpast_stem_base, a_base_suffix_c)
-- imperative stem
local imp_v_stem = q(past_stem_base, vform_nonpast_a_vowel(vform) and a_base_suffix_v or i_base_suffix_v)
local imp_c_stem = q(past_stem_base, vform_nonpast_a_vowel(vform) and a_base_suffix_c or i_base_suffix_c)
-- make parts
make_hollow_geminate_verb(base, "geminate", past_v_stem, past_c_stem, past_pass_v_stem,
past_pass_c_stem, nonpast_v_stem, nonpast_c_stem, nonpast_pass_v_stem,
nonpast_pass_c_stem, imp_v_stem, imp_c_stem, prefix_vowel, altgem_note)
-- active participle
insert_form_or_forms(base, "ap", q(MU, nonpast_v_stem))
-- passive participle
insert_form_or_forms(base, "pp", q(MU, nonpast_pass_v_stem))
end
-------------------------------------------------------------------------------
-- Conjugation functions for specific conjugation types --
-------------------------------------------------------------------------------
local function form_i_imp_stem_through_rad1(base, nonpast_vowel, rad1)
local imp_vowel = map_vowel(nonpast_vowel, function(vow)
if vow == A or vow == I then
return I
elseif vow == U then
return U
elseif not skip_slot(base, "imp_2ms") then
error(("Internal error: Non-past vowel %s isn't a, i, or u, should have been caught earlier"):format(
dump(nonpast_vowel)))
else
-- Passive-only; imperative won't ever be displayed so it doesn't matter.
return I
end
end)
-- Mace ("Arabic Verbs and Essentials of Grammar" p. 63: [https://archive.org/details/arabicverbsessen00john/page/62/mode/2up])
-- claims that initial hamza is assimilated/elided into a long vowel in the form-I imperative, but apparently
-- this isn't corrrect.
local vowel_on_alif = map_vowel(imp_vowel, function(vow)
return ALIF .. vow
end)
return q(vowel_on_alif, rad1, SK)
end
-- Implement form-I sound or assimilated verb. ASSIMILATED is true for assimilated verbs.
local function make_form_i_sound_assimilated_verb(base, vowel_spec, assimilated)
local rad1, rad2, rad3, past_vowel, nonpast_vowel = get_radicals_3(vowel_spec)
-- Verbal nouns (maṣādir) for form I are unpredictable and have to be supplied
-- past and non-past stems, active and passive
local past_stem = q(rad1, A, rad2, past_vowel, rad3)
local nonpast_stem = assimilated and q(rad2, nonpast_vowel, rad3) or
q(rad1, SK, rad2, nonpast_vowel, rad3)
local past_pass_stem = q(rad1, U, rad2, I, rad3)
local nonpast_pass_stem = q(rad1, SK, rad2, A, rad3)
-- imperative stem
-- check for irregular verb with reduced imperative (أَخَذَ or أَكَلَ or أَمَرَ)
local reducedimp = reduced_imperative_verb(rad1, rad2, rad3)
if reducedimp then
base.irregular = true
end
local imp_stem_suffix = q(rad2, nonpast_vowel, rad3)
local long_imp_stem_base = form_i_imp_stem_through_rad1(base, nonpast_vowel, rad1)
local short_imp_stem_base = ""
local imp_stem = q((assimilated or reducedimp) and "" or long_imp_stem_base, imp_stem_suffix)
-- A form-I mithal that keeps its wāw spells its imperative on a hamzat wasl,
-- اِوْجَلْ / اِوْنَ. Tell postprocess_term() not to reduce that اِوْ to اِي -- see #10
-- there for why the substitution list can't decide this for itself.
if not assimilated and req(rad1, W) then
base.orth.keep_initial_w = true
end
-- make parts
make_sound_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem, imp_stem, "a")
if reducedimp == "shortlong" then
make_1stem_imperative(base, iut.combine_form_and_footnotes(q(long_imp_stem_base, imp_stem_suffix),
mw.getCurrentFrame():preprocess("[used especially with a clitic such as {{m|ar|فَ}} or {{m|ar|وَ}}]")))
end
-- Check for irregular verb سَأَلَ with alternative jussive and imperative. Calling this after make_sound_verb()
-- adds additional entries to the paradigm parts.
if saal_radicals(rad1, rad2, rad3) then
base.irregular = true
nonpast_1stem_conj(base, "juss", "a", "سَل")
nonpast_1stem_conj(base, "juss_pass", "u", "سَل")
make_1stem_imperative(base, "سَل")
end
-- Active participle.
insert_form_or_forms(base, "ap1", q(rad1, AA, rad2, I, rad3))
-- Insert alternative active participle (stative type I) فَعِيل. Since not all verbs have this, we require that
-- verbs that do have it specify it explicitly; a shortcut ++ is provided to make this easier (e.g. <ap:++> to
-- indicate that the alternative form should be used for the active participle, <ap:+,++> to indicate that both
-- forms can be used, and <ap:-> to indicate that there is no active participle). The same form is used for
-- secondary default passive participle.
insert_ap2_pp2(base, q(rad1, A, rad2, II, rad3))
-- Active participle, stative type II فَعِل (+++).
insert_form_or_forms(base, "ap3", q(rad1, A, rad2, I, rad3))
-- Active participle, color/defect أَفْعَل (+cd).
insert_form_or_forms(base, "apcd", q(HAMZA, A, rad1, SK, rad2, A, rad3))
-- Active participle, -ān فَعْلَان (+an).
insert_form_or_forms(base, "apan", q(rad1, A, rad2, SK, rad3, AAN))
-- Passive participle.
insert_form_or_forms(base, "pp", q(MA, rad1, SK, rad2, UU, rad3))
end
conjugations["I-sound"] = function(base, vowel_spec)
make_form_i_sound_assimilated_verb(base, vowel_spec, false)
end
conjugations["none-sound"] = function(base, vowel_spec)
-- All default stems are nil.
make_sound_verb(base)
end
conjugations["none-hollow"] = function(base, vowel_spec)
-- All default stems are nil.
make_hollow_geminate_verb(base, false)
end
conjugations["none-geminate"] = function(base, vowel_spec)
-- All default stems are nil.
make_hollow_geminate_verb(base, "geminate")
end
conjugations["none-final-weak"] = function(base, vowel_spec)
-- All default stems are nil.
make_final_weak_verb(base)
end
conjugations["I-assimilated"] = function(base, vowel_spec)
make_form_i_sound_assimilated_verb(base, vowel_spec, "assimilated")
end
local function make_form_i_hayy_verb(base, vowel_spec)
-- Verbal nouns (maṣādir) for form I are unpredictable and have to be supplied
base.irregular = true
-- past and non-past stems, active and passive, and imperative stem
local past_c_stem = "حَيِي"
local past_v_stem_long = past_c_stem
local past_v_stem_short = "حَيّ"
-- 3mp of the long variant (حَيِيَ) is حَيُوا, not the geminated حَيُّوا of the short
-- variant (حَيَّ) -- rad2 (ي) here is a plain radical, not doubled; see README
-- "Open findings" #4. Needs its own stem, distinct from both the long and short ones.
local past_v_stem_3mp = "حَي"
local past_pass_c_stem = "حُيِي"
local past_pass_v_stem_long = past_pass_c_stem
local past_pass_v_stem_short = "حُيّ"
local past_pass_v_stem_3mp = "حُي"
local nonpast_stem = "حْي"
local nonpast_pass_stem = nonpast_stem
local imp_stem = _I .. nonpast_stem
-- make parts
past_2stem_conj(base, "past", {}, past_c_stem)
past_2stem_conj(base, "past_pass", {}, past_pass_c_stem)
local variant = vowel_spec.variant or "both"
if variant == "short" or variant == "both" then
past_2stem_conj(base, "past", past_v_stem_short, {})
past_2stem_conj(base, "past_pass", past_pass_v_stem_short, {})
end
function inflect_long_variant(tense, long_stem, mp_stem)
inflect_tense_1(base, tense, "",
{long_stem, long_stem, long_stem, long_stem, mp_stem},
{past_endings[4], past_endings[5], past_endings[7], past_endings[8],
past_endings[12]},
{"3ms", "3fs", "3md", "3fd", "3mp"})
end
if variant == "long" or variant == "both" then
inflect_long_variant("past", past_v_stem_long, past_v_stem_3mp)
inflect_long_variant("past_pass", past_pass_v_stem_long, past_pass_v_stem_3mp)
end
nonpast_1stem_conj(base, "ind", "a", nonpast_stem, ind_endings_aa)
nonpast_1stem_conj(base, "sub", "a", nonpast_stem, sub_endings_aa)
nonpast_1stem_conj(base, "juss", "a", nonpast_stem, juss_endings_aa)
nonpast_1stem_conj(base, "ind_pass", "u", nonpast_pass_stem, ind_endings_aa)
nonpast_1stem_conj(base, "sub_pass", "u", nonpast_pass_stem, sub_endings_aa)
nonpast_1stem_conj(base, "juss_pass", "u", nonpast_pass_stem, juss_endings_aa)
inflect_tense_imp(base, {imp_stem, all_same = 1}, imp_endings_aa)
-- active and passive participles apparently do not exist for this verb
end
-- Implement form-I final-weak assimilated+final-weak verb. ASSIMILATED is true for assimilated verbs.
local function make_form_i_final_weak_verb(base, vowel_spec, assimilated)
local rad1, rad2, rad3, past_vowel, nonpast_vowel = get_radicals_3(vowel_spec)
-- حَيَّ or حَيِيَ is weird enough that we handle it as a separate function.
if hayy_radicals(rad1, rad2, rad3) then
make_form_i_hayy_verb(base, vowel_spec)
return
end
-- Verbal nouns (maṣādir) for form I are unpredictable and have to be supplied.
-- Past and non-past stems, active and passive, and imperative stem.
local past_stem = q(rad1, A, rad2)
local past_pass_stem = q(rad1, U, rad2)
local nonpast_stem, nonpast_pass_stem, imp_stem
if raa_radicals(rad1, rad2, rad3) then
base.irregular = true
nonpast_stem = rad1
nonpast_pass_stem = rad1
imp_stem = rad1
else
nonpast_pass_stem = q(rad1, SK, rad2)
if assimilated then
nonpast_stem = rad2
imp_stem = rad2
else
nonpast_stem = nonpast_pass_stem
imp_stem = q(form_i_imp_stem_through_rad1(base, nonpast_vowel, rad1), rad2)
end
end
-- A form-I mithal that keeps its wāw spells its imperative on a hamzat wasl,
-- اِوْجَلْ / اِوْنَ. Tell postprocess_term() not to reduce that اِوْ to اِي -- see #10
-- there for why the substitution list can't decide this for itself.
if not assimilated and req(rad1, W) then
base.orth.keep_initial_w = true
end
-- Make parts.
local past_ending_vowel =
req(rad3, Y) and req(past_vowel, A) and "ay" or
req(rad3, W) and req(past_vowel, A) and "aw" or
req(past_vowel, I) and "ī" or "ū"
-- Try to preserve footnotes attached to the third radical and/or past and/or non-past vowels.
local past_footnotes = iut.combine_footnotes(rget_footnotes(rad3), rget_footnotes(past_vowel))
local nonpast_ending_vowel = req(nonpast_vowel, A) and "ā" or req(nonpast_vowel, I) and "ī" or "ū"
local nonpast_footnotes = iut.combine_footnotes(rget_footnotes(rad3), rget_footnotes(nonpast_vowel))
make_final_weak_verb(base,
iut.combine_form_and_footnotes(past_stem, past_footnotes),
iut.combine_form_and_footnotes(past_pass_stem, past_footnotes),
iut.combine_form_and_footnotes(nonpast_stem, nonpast_footnotes),
iut.combine_form_and_footnotes(nonpast_pass_stem, nonpast_footnotes),
iut.combine_form_and_footnotes(imp_stem, nonpast_footnotes),
past_ending_vowel, nonpast_ending_vowel, "a",
final_weak_uu_retains_rad3(rad1, rad2, rad3, past_ending_vowel, nonpast_ending_vowel))
-- Active participle.
insert_form_or_forms(base, "ap1", q(rad1, AA, rad2, IN))
-- Active participle, stative type I فَعِيّ (++). FIXME: Is this correct when rad3 is W?
insert_ap2_pp2(base, q(rad1, A, rad2, II, SH))
-- Active participle, stative type II فَعٍ (+++). FIXME: Any examples of this to verify it's correct?
insert_form_or_forms(base, "ap3", q(rad1, A, rad2, IN))
-- Active participle, color/defect أَفْعَى (+cd).
insert_form_or_forms(base, "apcd", q(HAMZA, A, rad1, SK, rad2, AAMAQ))
-- Active participle, -ān فَعْيَان or فَعْوَان (+an).
-- FIXME: Any examples of this for both rad3 = W and y to verify it's correct?
insert_form_or_forms(base, "apan", q(rad1, A, rad2, SK, rad3, AAN))
-- Passive participle.
insert_form_or_forms(base, "pp", q(MA, rad1, SK, rad2, req(rad3, Y) and II or UU, SH))
end
conjugations["I-final-weak"] = function(base, vowel_spec)
make_form_i_final_weak_verb(base, vowel_spec, false)
end
conjugations["I-assimilated+final-weak"] = function(base, vowel_spec)
make_form_i_final_weak_verb(base, vowel_spec, "assimilated")
end
conjugations["I-hollow"] = function(base, vowel_spec)
local rad1, rad2, rad3, past_vowel, nonpast_vowel = get_radicals_3(vowel_spec)
-- In some sense, hollow vowels i~i and u~u are more "correct" than a~i and a~u, but the latter follow the
-- pattern of other form-I verbs, so we map i~i to a~i and u~u to a~u in infer_radicals(). Now however we have
-- to undo this to get the actual past vowel based on the non-past vowel.
if req(past_vowel, A) then
past_vowel = map_vowel(past_vowel, function(vow)
return req(nonpast_vowel, A) and I or rget(nonpast_vowel)
end)
end
local lengthened_nonpast = map_vowel(nonpast_vowel, function(vow)
return vow == U and UU or vow == I and II or AA
end)
-- Verbal nouns (maṣādir) for form I are unpredictable and have to be supplied.
-- active past stems - vowel (v) and consonant (c)
local past_v_stem = q(rad1, AA, rad3)
local past_c_stem = q(rad1, past_vowel, rad3)
-- active non-past stems - vowel (v) and consonant (c)
local nonpast_v_stem = q(rad1, lengthened_nonpast, rad3)
local nonpast_c_stem = q(rad1, nonpast_vowel, rad3)
-- passive past stems - vowel (v) and consonant (c)
-- 'ufīla always; the contracted stem takes whichever of i/u the active past_c_stem
-- *isn't* -- xāfa/xiftu (i) -> passive xufta (u), qāla/qultu (u) -> passive qilta (i).
-- Contraction drops rad2, so this vowel is the only thing distinguishing active from
-- passive in these forms, hence the two roots' behaviour is opposite, not independent.
-- Confirmed on two printed pages (خافَ p.224 "خُفْتَ", قالَ p.138 "قِلْتَ"); previously
-- hardcoded to u from خافَ alone, which is only half the pattern -- see README.
local past_pass_v_stem = q(rad1, II, rad3)
local past_pass_c_stem = q(rad1, map_vowel(past_vowel, function(vow)
return vow == I and U or I
end), rad3)
-- passive non-past stems - vowel (v) and consonant (c)
-- yufāla/yufalna
-- stem is built differently but conjugation is identical to sound verbs
local nonpast_pass_v_stem = q(rad1, AA, rad3)
local nonpast_pass_c_stem = q(rad1, A, rad3)
-- imperative stem
local imp_v_stem = nonpast_v_stem
local imp_c_stem = nonpast_c_stem
-- make parts
make_hollow_geminate_verb(base, false, past_v_stem, past_c_stem, past_pass_v_stem,
past_pass_c_stem, nonpast_v_stem, nonpast_c_stem, nonpast_pass_v_stem,
nonpast_pass_c_stem, imp_v_stem, imp_c_stem, "a")
if kaan_radicals(rad1, rad2, rad3) then
local endings = make_nonpast_endings(U, {}, {}, {}, {})
inflect_tense(base, "juss", nonpast_prefix_consonants, q(A, rad1), endings)
base.irregular = true
end
-- سالَ يَسالُ keeps سَأَلْتُ's fatha in its contracted past -- سَلْتَ, not the سِلْتَ
-- the a~a pair would give -- and the book says why in as many words, under p202's
-- own table: "سالَ يَسالُ، لغة في سَأَلَ المهموز ... ويُقالُ في الماضي سَلْتُ بفتحِ
-- أوّلهِ مثلَ سَأَلْتُ فحُذِفَتِ الهمزةُ كما حُذِفَتْ مِنْ رَأَيْتُ فقيلَ فيه رَيْتُ".
-- So this is not a hollow-vowel exception and no rule about the a~a pair should be
-- touched for it: it is سَأَلْتُ with the hamza dropped, the way رَأَيْتُ gives رَيْتُ.
-- Added as an extra variant rather than a replacement, for the same reason
-- saal_radicals() adds سَلْ beside اِسْأَلْ instead of replacing it -- the book prints
-- both, in different places (p202 sets سَلْتَ, p176 sets سَأَلْتَ). Gated on the a~a
-- pair, because a سول verb with a u non-past is a different verb. README finding #19.
if saal_hollow_radicals(rad1, rad2, rad3) and req(nonpast_vowel, A) then
base.irregular = true
past_2stem_conj(base, "past", past_v_stem, q(rad1, A, rad3))
end
-- Active participle.
insert_form_or_forms(base, "ap1", req(rad3, HAMZA) and q(rad1, AA, HAMZA, IN) or
q(rad1, AA, HAMZA, I, rad3))
-- Active participle, stative type I فَيِّد (++). FIXME: Any examples of this to verify it's correct?
insert_ap2_pp2(base, q(rad1, A, Y, SH, I, rad3))
-- Active participle, stative type II فَيِد (+++). FIXME: Any examples of this to verify it's correct?
insert_form_or_forms(base, "ap3", q(rad1, A, Y, I, rad3))
-- Active participle, color/defect أَفّيَد or أَفّوَد (+cd). FIXME: Any examples of this to verify it's correct?
insert_form_or_forms(base, "apcd", q(HAMZA, A, rad1, SK, rad2, A, rad3))
-- Active participle, -ān فَيْدَان or فَوْدَان (+an). Example: جَاعَ "to be hungry", act part جَوْعَان
insert_form_or_forms(base, "apan", q(rad1, A, rad2, SK, rad3, AAN))
-- Passive participle.
insert_form_or_forms(base, "pp", q(MA, rad1, req(rad2, Y) and II or UU, rad3))
end
conjugations["I-geminate"] = function(base, vowel_spec)
local rad1, rad2, rad3, past_vowel, nonpast_vowel = get_radicals_3(vowel_spec)
-- Verbal nouns (maṣādir) for form I are unpredictable and have to be supplied.
-- active past stems - vowel (v) and consonant (c)
-- The contracted stem's vowel is the past vowel for most roots (مَدَدْتَ) but follows the
-- مضارع for the إتباع lexemes (هَمُمْتَ); see geminate_degemination_vowel().
local past_v_stem = q(rad1, A, rad2, SH)
local past_c_stem = q(rad1, A, rad2,
geminate_degemination_vowel(rad1, rad2, rad3, past_vowel, nonpast_vowel), rad2)
-- active non-past stems - vowel (v) and consonant (c)
local nonpast_v_stem = q(rad1, nonpast_vowel, rad2, SH)
local nonpast_c_stem = q(rad1, SK, rad2, nonpast_vowel, rad2)
-- passive past stems - vowel (v) and consonant (c)
-- dulla/dulilta
local past_pass_v_stem = q(rad1, U, rad2, SH)
local past_pass_c_stem = q(rad1, U, rad2, I, rad2)
-- passive non-past stems - vowel (v) and consonant (c)
--yudallu/yudlalna
-- stem is built differently but conjugation is identical to sound verbs
local nonpast_pass_v_stem = q(rad1, A, rad2, SH)
local nonpast_pass_c_stem = q(rad1, SK, rad2, A, rad2)
-- imperative stem
local imp_v_stem = q(rad1, nonpast_vowel, rad2, SH)
local imp_c_stem = q(form_i_imp_stem_through_rad1(base, nonpast_vowel, rad1), rad2, nonpast_vowel, rad2)
-- make parts
make_hollow_geminate_verb(base, "geminate", past_v_stem, past_c_stem, past_pass_v_stem,
past_pass_c_stem, nonpast_v_stem, nonpast_c_stem, nonpast_pass_v_stem,
nonpast_pass_c_stem, imp_v_stem, imp_c_stem, "a")
-- Active participle.
insert_form_or_forms(base, "ap1", q(rad1, AA, rad2, SH))
-- Active participle, stative type I فَعِيع (++). FIXME: Any examples of this to verify it's correct?
insert_ap2_pp2(base, q(rad1, A, rad2, II, rad2))
-- Active participle, stative type II فَعّ (+++). Example: بَرَّ "to be pious", active participle بَرّ
insert_form_or_forms(base, "ap3", q(rad1, A, rad2, SH))
-- Active participle, color/defect أَفَعّ (+cd).
-- Example: لَصَّ "to be thievish, to steal repeatedly", active participle أَلَصّ.
insert_form_or_forms(base, "apcd", q(HAMZA, A, rad1, A, rad2, SH))
-- Active participle, -ān فَعَّان (+an). FIXME: Any examples of this to verify it's correct?
insert_form_or_forms(base, "apan", q(rad1, A, rad2, SH, AAN))
-- Passive participle.
insert_form_or_forms(base, "pp", q(MA, rad1, SK, rad2, UU, rad2))
end
-- Return the ta- (active, past and non-past) and tu- (passive past) prefixes for a form II/III/V/VI verb.
-- Form V and VI verbs normally use ta- and tu-, but reduced (base.reduced) verbs use different prefixes. Form II
-- and III verbs have no prefix.
local function form_ii_iii_v_vi_ta_tu_prefix(base, rad1)
local vform = base.verb_form
if vform == "V" or vform == "VI" then
if base.reduced then
-- To simplify the code, we generate two rad1's with a sukūn between them, which is cleaned up in
-- postprocessing.
return q(_I, rad1, SK), q(rad1, SK), q(_U, rad1, SK)
else
return TA, TA, TU
end
else
return "", "", ""
end
end
-- Make form II or V sound or final-weak verb.
local function make_form_ii_v_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local final_weak = is_final_weak(base, vowel_spec)
local vform = base.verb_form
local ta_past_prefix, ta_nonpast_prefix, tu_past_prefix = form_ii_iii_v_vi_ta_tu_prefix(base, rad1)
local vn = vform == "V" and
q(ta_past_prefix, rad1, A, rad2, SH, final_weak and IN or q(U, rad3)) or
q(TA, rad1, SK, rad2, II, final_weak and AH or rad3)
-- various stem bases
local past_stem_base = q(ta_past_prefix, rad1, A, rad2, SH)
local nonpast_stem_base = q(ta_nonpast_prefix, rad1, A, rad2, SH)
local past_pass_stem_base = q(tu_past_prefix, rad1, U, rad2, SH)
-- make parts
make_augmented_sound_final_weak_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base,
vn)
end
conjugations["II-sound"] = function(base, vowel_spec)
make_form_ii_v_sound_final_weak_verb(base, vowel_spec)
end
conjugations["II-final-weak"] = function(base, vowel_spec)
make_form_ii_v_sound_final_weak_verb(base, vowel_spec)
end
local function make_form_iii_alt_vn(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local final_weak = is_final_weak(base, vowel_spec)
-- Insert alternative verbal noun فِعَال. Since not all verbs have this, we require that verbs that do have it
-- specify it explicitly; a shortcut ++ is provided to make this easier (e.g. <vn:+,++> to indicate that
-- both the normal verbal noun مُفَاعَلَة and secondary verbal noun فِعَال are available).
insert_form_or_forms(base, "vn2", q(rad1, I, rad2, AA, final_weak and HAMZA or rad3))
end
-- Make form III or VI sound or final-weak verb.
local function make_form_iii_vi_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local final_weak = is_final_weak(base, vowel_spec)
local vform = base.verb_form
local ta_past_prefix, ta_nonpast_prefix, tu_past_prefix = form_ii_iii_v_vi_ta_tu_prefix(base, rad1)
local vn = vform == "VI" and
q(ta_past_prefix, rad1, AA, rad2, final_weak and IN or q(U, rad3)) or
q(MU, rad1, AA, rad2, final_weak and AAH or q(A, rad3, AH))
-- various stem bases
local past_stem_base = q(ta_past_prefix, rad1, AA, rad2)
local nonpast_stem_base = q(ta_nonpast_prefix, rad1, AA, rad2)
local past_pass_stem_base = q(tu_past_prefix, rad1, UU, rad2)
-- make parts
make_augmented_sound_final_weak_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base,
vn)
if vform == "III" then
make_form_iii_alt_vn(base, vowel_spec)
end
end
conjugations["III-sound"] = function(base, vowel_spec)
make_form_iii_vi_sound_final_weak_verb(base, vowel_spec)
end
conjugations["III-final-weak"] = function(base, vowel_spec)
make_form_iii_vi_sound_final_weak_verb(base, vowel_spec)
end
-- Make form III or VI geminate verb.
local function make_form_iii_vi_geminate_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vform = base.verb_form
local ta_past_prefix, ta_nonpast_prefix, tu_past_prefix = form_ii_iii_v_vi_ta_tu_prefix(base, rad1)
-- Alternative verbal noun فِعَال will be inserted when we add sound parts below.
local vn = vform == "VI" and q(ta_past_prefix, rad1, AA, rad2, SH) or q(MU, rad1, AA, rad2, SH, AH)
-- Various stem bases.
local past_stem_base = q(ta_past_prefix, rad1, AA)
local nonpast_stem_base = q(ta_nonpast_prefix, rad1, AA)
local past_pass_stem_base = q(tu_past_prefix, rad1, UU)
-- Make parts.
local variant = vowel_spec.variant or "short"
if variant == "short" or variant == "both" then
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
-- Also add alternative sound (non-compressed) parts. This will lead to some duplicate entries, but they are
-- removed during addition.
if variant == "long" or variant == "both" then
make_form_iii_vi_sound_final_weak_verb(base, vowel_spec)
elseif vform == "III" then
-- Still need to add the alternative form-III verbal noun.
make_form_iii_alt_vn(base, vowel_spec)
end
end
conjugations["III-geminate"] = function(base, vowel_spec)
make_form_iii_vi_geminate_verb(base, vowel_spec)
end
-- Make form IV sound or final-weak verb.
local function make_form_iv_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local final_weak = is_final_weak(base, vowel_spec)
-- core of stem base, minus stem prefixes
local stem_core
-- check for irregular verb أَرَى
local is_raa = raa_radicals(rad1, rad2, rad3)
if is_raa then
base.irregular = true
stem_core = rad1
else
stem_core = q(rad1, SK, rad2)
end
-- verbal noun
local vn = is_raa and
q(HAMZA, I, stem_core, AA, HAMZA, AH) or
q(HAMZA, I, stem_core, AA, final_weak and HAMZA or rad3)
-- various stem bases
local past_stem_base = q(HAMZA, A, stem_core)
local nonpast_stem_base = stem_core
local past_pass_stem_base = q(HAMZA, U, stem_core)
-- make parts
make_augmented_sound_final_weak_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base,
vn)
end
conjugations["IV-sound"] = function(base, vowel_spec)
make_form_iv_sound_final_weak_verb(base, vowel_spec)
end
conjugations["IV-final-weak"] = function(base, vowel_spec)
make_form_iv_sound_final_weak_verb(base, vowel_spec)
end
conjugations["IV-hollow"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
-- verbal noun
local vn = q(HAMZA, I, rad1, AA, rad3, AH)
-- various stem bases
local past_stem_base = q(HAMZA, A, rad1)
local nonpast_stem_base = rad1
local past_pass_stem_base = q(HAMZA, U, rad1)
-- make parts
make_augmented_hollow_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["IV-geminate"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = q(HAMZA, I, rad1, SK, rad2, AA, rad2)
-- various stem bases
local past_stem_base = q(HAMZA, A, rad1)
local nonpast_stem_base = rad1
local past_pass_stem_base = q(HAMZA, U, rad1)
-- make parts
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["V-sound"] = function(base, vowel_spec)
make_form_ii_v_sound_final_weak_verb(base, vowel_spec)
end
conjugations["V-final-weak"] = function(base, vowel_spec)
make_form_ii_v_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VI-sound"] = function(base, vowel_spec)
make_form_iii_vi_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VI-final-weak"] = function(base, vowel_spec)
make_form_iii_vi_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VI-geminate"] = function(base, vowel_spec)
make_form_iii_vi_geminate_verb(base, vowel_spec)
end
-- Make a verbal noun of the general form that applies to forms VII and above. RAD12 is the first consonant cluster
-- (after initial اِ) and RAD34 is the second consonant cluster. RAD5 is the final consonant.
local function high_form_verbal_noun(rad12, rad34, rad5)
return q(_I, rad12, I, rad34, AA, rad5)
end
-- Populate a sound or final-weak verb for any of the various high-numbered augmented forms (form VII and up) that
-- have up to 5 consonants in two clusters in the stem and the same pattern of vowels between. Some of these
-- consonants in certain verb parts are w's, which leads to apparent anomalies in certain stems of these parts, but
-- these anomalies are handled automatically in postprocessing, where we resolve sequences of iwC -> īC, uwC -> ūC,
-- w + sukūn + w -> w + shadda.
-- RAD12 is the first consonant cluster (after initial اِ) and RAD34 is the second consonant cluster. RAD5 is the
-- final consonant.
local function make_high_form_sound_final_weak_verb(base, vowel_spec, rad12, rad34, rad5)
local final_weak = is_final_weak(base, vowel_spec)
local vn = high_form_verbal_noun(rad12, rad34, final_weak and HAMZA or rad5)
-- various stem bases
local nonpast_stem_base = q(rad12, A, rad34)
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, rad12, U, rad34)
-- make parts
make_augmented_sound_final_weak_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base,
vn)
end
local function form_vii_nrad1(base, rad1)
if base.reduced then
if not req(rad1, M) then
error(("Internal error: Form VII first radical %s is not م but .reduced specified; should have been caught earlier"):
format(rget(rad1)))
end
return M .. SH
else
return q("نْ", rad1)
end
end
-- Make form VII sound or final-weak verb.
local function make_form_vii_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
make_high_form_sound_final_weak_verb(base, vowel_spec, form_vii_nrad1(base, rad1), rad2, rad3)
end
conjugations["VII-sound"] = function(base, vowel_spec)
make_form_vii_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VII-final-weak"] = function(base, vowel_spec)
make_form_vii_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VII-hollow"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local nrad1 = form_vii_nrad1(base, rad1)
local vn = high_form_verbal_noun(nrad1, Y, rad3)
-- various stem bases
local nonpast_stem_base = nrad1
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, nrad1)
-- make parts
make_augmented_hollow_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["VII-geminate"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local nrad1 = form_vii_nrad1(base, rad1)
local vn = high_form_verbal_noun(nrad1, rad2, rad2)
-- various stem bases
local nonpast_stem_base = q(nrad1, A)
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, nrad1, U)
-- make parts
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
-- Return Form VIII verbal noun.
local function form_viii_verbal_noun(base, vowel_spec, rad1, rad2, rad3)
local final_weak = is_final_weak(base, vowel_spec)
rad3 = final_weak and HAMZA or rad3
return {high_form_verbal_noun(vowel_spec.form_viii_assim, rad2, rad3)}
end
-- Make form VIII sound or final-weak verb.
local function make_form_viii_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
-- check for irregular verb اِتَّخَذَ
if axadh_radicals(rad1, rad2, rad3) then
base.irregular = true
rad1 = T
end
make_high_form_sound_final_weak_verb(base, vowel_spec, vowel_spec.form_viii_assim, rad2, rad3)
end
conjugations["VIII-sound"] = function(base, vowel_spec)
make_form_viii_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VIII-final-weak"] = function(base, vowel_spec)
make_form_viii_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VIII-hollow"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = form_viii_verbal_noun(base, vowel_spec, rad1, Y, rad3)
-- various stem bases
local nonpast_stem_base = vowel_spec.form_viii_assim
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, nonpast_stem_base)
-- make parts
make_augmented_hollow_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["VIII-geminate"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = form_viii_verbal_noun(base, vowel_spec, rad1, rad2, rad2)
-- various stem bases
local nonpast_stem_base = q(vowel_spec.form_viii_assim, A)
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, vowel_spec.form_viii_assim, U)
-- make parts
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["IX-sound"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = q(_I, rad1, SK, rad2, I, rad3, AA, rad3)
-- various stem bases
local nonpast_stem_base = q(rad1, SK, rad2, A)
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, rad1, SK, rad2, U)
-- make parts
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["IX-final-weak"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
make_high_form_sound_final_weak_verb(base, vowel_spec, q(rad1, SK, rad2), rad3, rad3)
end
-- Populate a sound or final-weak verb for any of the various high-numbered
-- augmented forms that have 5 consonants in the stem and the same pattern of
-- vowels. Some of these consonants in certain verb parts are w's, which leads to
-- apparent anomalies in certain stems of these parts, but these anomalies
-- are handled automatically in postprocessing, where we resolve sequences of
-- iwC -> īC, uwC -> ūC, w + sukūn + w -> w + shadda.
local function make_high5_form_sound_final_weak_verb(base, vowel_spec, rad1, rad2, rad3, rad4, rad5)
make_high_form_sound_final_weak_verb(base, vowel_spec, q(rad1, SK, rad2), q(rad3, SK, rad4), rad5)
end
-- Make form X sound or final-weak verb.
local function make_form_x_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
-- check for irregular verb اِسْتَحْيَا (also اِسْتَحَى)
local is_hayy = hayy_radicals(rad1, rad2, rad3)
local variant = vowel_spec.variant or "both"
if not is_hayy or variant == "long" or variant == "both" then
make_high5_form_sound_final_weak_verb(base, vowel_spec, S, T, rad1, rad2, rad3)
end
if is_hayy and (variant == "short" or variant == "both") then
base.irregular = true
-- Add alternative entries to the verbal paradigms. Any duplicates are removed during addition.
make_high_form_sound_final_weak_verb(base, vowel_spec, S .. SK .. T, rad1, rad3)
end
end
conjugations["X-sound"] = function(base, vowel_spec)
make_form_x_sound_final_weak_verb(base, vowel_spec)
end
conjugations["X-final-weak"] = function(base, vowel_spec)
make_form_x_sound_final_weak_verb(base, vowel_spec)
end
conjugations["X-hollow"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = q(base.reduced and "اِسْ" or "اِسْتِ", rad1, AA, rad3, AH)
-- various stem bases
local past_stem_base = q(base.reduced and "اِسْ" or "اِسْتَ", rad1)
local nonpast_stem_base = q(base.reduced and "سْ" or "سْتَ", rad1)
local past_pass_stem_base = q(base.reduced and "اُسْ" or "اُسْتُ", rad1)
-- make parts
make_augmented_hollow_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["X-geminate"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = q("اِسْتِ", rad1, SK, rad2, AA, rad2)
-- various stem bases
local past_stem_base = q("اِسْتَ", rad1)
local nonpast_stem_base = q("سْتَ", rad1)
local past_pass_stem_base = q("اُسْتُ", rad1)
-- make parts
if base.altgem then
inflect_tense(base, "past", "", {q(past_stem_base, A, rad2, SH), all_same = 1},
past_endings_ay_12_person_only)
end
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn,
base.altgem and "[uncommon]" or nil)
end
conjugations["XI-sound"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = q(_I, rad1, SK, rad2, II, rad3, AA, rad3)
-- various stem bases
local nonpast_stem_base = q(rad1, SK, rad2, AA)
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, rad1, SK, rad2, UU)
-- make parts
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
-- Probably no form XI final-weak, since already geminate in form; would behave as XI-sound.
-- Make form XII sound or final-weak verb.
local function make_form_xii_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
make_high5_form_sound_final_weak_verb(base, vowel_spec, rad1, rad2, W, rad2, rad3)
end
conjugations["XII-sound"] = function(base, vowel_spec)
make_form_xii_sound_final_weak_verb(base, vowel_spec)
end
conjugations["XII-final-weak"] = function(base, vowel_spec)
make_form_xii_sound_final_weak_verb(base, vowel_spec)
end
-- Make form XIII sound or final-weak verb.
local function make_form_xiii_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
make_high5_form_sound_final_weak_verb(base, vowel_spec, rad1, rad2, W, W, rad3)
end
conjugations["XIII-sound"] = function(base, vowel_spec)
make_form_xiii_sound_final_weak_verb(base, vowel_spec)
end
conjugations["XIII-final-weak"] = function(base, vowel_spec)
make_form_xiii_sound_final_weak_verb(base, vowel_spec)
end
-- Make a form XIV or XV sound or final-weak verb. Last radical appears twice (if`anlala / yaf`anlilu) so if it were
-- w or y you'd get if`anwā / yaf`anwī or if`anyā / yaf`anyī, i.e. unlike for most augmented verbs, the identity of
-- the radical matters.
local function make_form_xiv_xv_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local lastrad = base.verb_form == "XV" and Y or rad3
make_high5_form_sound_final_weak_verb(base, vowel_spec, rad1, rad2, N, rad3, lastrad)
end
conjugations["XIV-sound"] = function(base, vowel_spec)
make_form_xiv_xv_sound_final_weak_verb(base, vowel_spec)
end
conjugations["XIV-final-weak"] = function(base, vowel_spec)
make_form_xiv_xv_sound_final_weak_verb(base, vowel_spec)
end
conjugations["XV-sound"] = function(base, vowel_spec)
make_form_xiv_xv_sound_final_weak_verb(base, vowel_spec)
end
-- Probably no form XV final-weak, since already final-weak in form; would behave as XV-sound.
-- Make form Iq or IIq sound or final-weak verb.
local function make_form_iq_iiq_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3, rad4 = get_radicals_4(vowel_spec)
local final_weak = is_final_weak(base, vowel_spec)
local vform = base.verb_form
local vn = vform == "IIq" and
q(TA, rad1, A, rad2, SK, rad3, (final_weak and IN or q(U, rad4))) or
q(rad1, A, rad2, SK, rad3, (final_weak and AAH or q(A, rad4, AH)))
local ta_pref = vform == "IIq" and TA or ""
local tu_pref = vform == "IIq" and TU or ""
-- various stem bases
local past_stem_base = q(ta_pref, rad1, A, rad2, SK, rad3)
local nonpast_stem_base = past_stem_base
local past_pass_stem_base = q(tu_pref, rad1, U, rad2, SK, rad3)
-- make parts
make_augmented_sound_final_weak_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base,
vn)
end
conjugations["Iq-sound"] = function(base, vowel_spec)
make_form_iq_iiq_sound_final_weak_verb(base, vowel_spec)
end
conjugations["Iq-final-weak"] = function(base, vowel_spec)
make_form_iq_iiq_sound_final_weak_verb(base, vowel_spec)
end
conjugations["IIq-sound"] = function(base, vowel_spec)
make_form_iq_iiq_sound_final_weak_verb(base, vowel_spec)
end
conjugations["IIq-final-weak"] = function(base, vowel_spec)
make_form_iq_iiq_sound_final_weak_verb(base, vowel_spec)
end
-- The نون of اِفْعَنْلَلَ, or the إدغام that replaces it. Where ل1 is weak the reference
-- prints the نون assimilated into it: model 427 (p.415) sets اِهْبَنْيَخَ as اِهْبَيَّخَ,
-- and its own footnote gives the root as أصْلُهُ هَبْيَخَ, so the ي is ل1 and the نون is
-- the wazn's. Emitting ل1 twice with a sukūn between them is how reduced forms V/VI
-- write their تاء التفعّل too -- postprocess_subs' "same letter separated by sukūn"
-- rule turns the pair into the šadda, and the مضارع and أمر come out اِهْبَيِّخْ /
-- يَهْبَيِّخُ, which is what the page prints.
--
-- Requested with |مدغم=, never inferred from the radical -- the same call forms V/VI,
-- VII and X already make. p.415 is the only افعنلل paradigm in the corpus with a weak
-- ل1 (the other five, اِفْعَنْلَلَ اِحْوَنْصَلَ اِحْرَنْجَمَ اِفْرَنْقَعَ اِسْلَنْطَأَ
-- اِطْلَنْفَأَ, are all sound there), and one attestation is not enough to make every
-- root of the shape assimilate for every caller on ar.wiktionary.
local function form_iiiq_n_augment(base, rad3)
if not base.reduced then
return N
end
if not (req(rad3, W) or req(rad3, Y)) then
error(("Form IIIq .reduced assimilates the نون into ل1, which must be و or ي, but saw %s"):
format(rget(rad3)))
end
return rad3
end
-- Make form IIIq sound or final-weak verb.
local function make_form_iiiq_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3, rad4 = get_radicals_4(vowel_spec)
make_high5_form_sound_final_weak_verb(base, vowel_spec, rad1, rad2,
form_iiiq_n_augment(base, rad3), rad3, rad4)
end
conjugations["IIIq-sound"] = function(base, vowel_spec)
make_form_iiiq_sound_final_weak_verb(base, vowel_spec)
end
conjugations["IIIq-final-weak"] = function(base, vowel_spec)
make_form_iiiq_sound_final_weak_verb(base, vowel_spec)
end
conjugations["IVq-sound"] = function(base, vowel_spec)
local rad1, rad2, rad3, rad4 = get_radicals_4(vowel_spec)
local vn = q(_I, rad1, SK, rad2, I, rad3, SK, rad4, AA, rad4)
-- various stem bases
local past_stem_base = q(_I, rad1, SK, rad2, A, rad3)
local nonpast_stem_base = q(rad1, SK, rad2, A, rad3)
local past_pass_stem_base = q(_U, rad1, SK, rad2, U, rad3)
-- make parts
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
-- Probably no form IVq final-weak, since already geminate in form; would behave as IVq-sound.
end
create_conjugations()
-------------------------------------------------------------------------------
-- Guts of main conjugation function --
-------------------------------------------------------------------------------
--W: Lexical exceptions — roots the sources conjugate SOUND in a form whose general
-- rule would not. Two rules are overridden here, and both are regular enough that the
-- exceptions have to be listed rather than derived:
--
-- * إعلال — a wāw or yāʾ second radical contracting to a long vowel (أَفَالَ,
-- اِسْتَجَابَ). The listed roots keep the consonant: أَفْيَلَ, اِسْتَجْوَبَ.
-- * إدغام — a geminate root assimilating rad2 into rad3 (عَالَّ, تَعَاثَّ). The listed
-- roots print the فكّ instead: عالَلَ, تَعاثَثَ.
--
-- Keyed by verb form .. ":" .. rad1..rad2..rad3, with the radicals as normalize_root()
-- leaves them (every hamza seat folded to bare ء). The form belongs in the key because
-- soundness is a fact about the lexeme *in that form*, not about the root: جوب is sound
-- in form X (اِسْتَجْوَبَ) and hollow in form I (جَابَ), and the source prints both.
--
-- Upstream's own commentary names several such verbs — izdawaja, istaḥwana, istajwaba,
-- ʕawira — and observes that a caller supplying a *lemma* needs no table, because the
-- lemma spells the soundness out. This repo's callers supply a root and a وزن, which do
-- not, so this is what carries it.
local SOUND_ROOTS = {
-- Form IV keeping a yāʾ middle radical (أَفْيَلَ). Attested verbs, not the صفة مشبهة
-- like أَخْيَف/خَيْفاء; each is sourced. Forms VII/VIII/X of these roots stay hollow.
["IV:خيل"] = true, -- أَخْيَلَ: أخيلت السماءُ تهيأت للمطر — المعجم الوسيط ج1 ص266 (وبه أَخالت أيضًا)
["IV:غيل"] = true, -- أَغْيَلَ: أغيلته فهي مُغْيِل، سقته الغَيْل — لسان العرب ج11 ص111 (وبه أغالت أيضًا)
["IV:حيج"] = true, -- أَحْيَجَ: أحيجت الأرضُ، على خلاف القياس — تاج العروس ج5 ص500
["IV:حين"] = true, -- أَحْيَنَ: أحين القومُ آن لهم أن يبلغوا ما أملوه — المعجم الوسيط ج1 ص212
["IV:خيف"] = true, -- أَخْيَفَ: أخيف الحاجُّ نزلوا خيف منى — كتاب الأفعال لابن القوطية ص35
["IV:ريف"] = true, -- أَرْيَفَ: أريفت الأرضُ إريافًا (خصبت) — المحيط في اللغة ج10 ص256
["IV:زين"] = true, -- أَزْيَنَ: أزينت الأرضُ، حسّنها عشبها — مقاييس اللغة ج3 ص41
-- أنطوان الدحداح، معجم تصريف الأفعال العربية. Each of these is a printed paradigm in
-- its own right under the model number given — the number on the page's own disk — and
-- is in fixtures/ as a whole page rather than as a single cited form.
["IV:ثوب"] = true, -- أَثْوَبَ / يُثْوِبُ، نموذج ٢٢٦ (beside أَثَابَ from the same root)
["IV:نيء"] = true, -- أَنْيَأَ / يُنْيِئُ، نموذج ٢٢٦ (أنيأ اللحمَ، من النِّيء)
["VII:سيء"] = true, -- اِنْسَيَأَ / يَنْسَيِئُ، نموذج ٢٥٦
["VIII:عول"] = true, -- اِعْتَوَلَ / يَعْتَوِلُ، نموذج ٢٦٦
["X:جوب"] = true, -- اِسْتَجْوَبَ / يَسْتَجْوِبُ، نموذج ٢٨٦
["III:علل"] = true, -- عالَلَ / يُعالِلُ، نموذج ٢١١
["III:فرر"] = true, -- فارَرَ / يُفارِرُ، نموذج ٢١١
["VI:عثث"] = true, -- تَعاثَثَ / يَتَعاثَثُ، نموذج ٢٤١
["VI:غضض"] = true, -- تَغاضَضَ / يَتَغاضَضُ، نموذج ٢٤١
}
-- Given form, weakness and radicals, check to make sure the radicals present are allowable for the weakness. Hamzas on
-- alif/wāw/yāʾ seats are never allowed (should always appear as hamza-on-the-line), and various weaknesses have various
-- strictures on allowable consonants.
local function check_radicals(form, weakness, rad1, rad2, rad3, rad4)
local function hamza_check(index, rad)
if rad == HAMZA_ON_ALIF or rad == HAMZA_UNDER_ALIF or
rad == HAMZA_ON_W or rad == HAMZA_ON_Y then
error("Radical " .. index .. " is " .. rad .. " but should be ء (hamza on the line)")
end
end
local function check_waw_ya(index, rad)
if not is_waw_ya(rad) then
error("Radical " .. index .. " is " .. rad .. " but should be و or ي")
end
end
local function check_not_waw_ya(index, rad)
if is_waw_ya(rad) then
error("In a sound verb, radical " .. index .. " should not be و or ي")
end
end
hamza_check(rad1)
hamza_check(rad2)
hamza_check(rad3)
hamza_check(rad4)
if weakness == "assimilated" or weakness == "assimilated+final-weak" then
if rad1 ~= W then
error("Radical 1 is " .. rad1 .. " but should be و")
end
-- don't check that non-assimilated form I verbs don't have wāw as their
-- first radical because some form-I verbs exist where a first-radical wāw
-- behaves as sound, e.g. wajuha yawjuhu "to be distinguished".
end
if weakness == "final-weak" or weakness == "assimilated+final-weak" then
if rad4 then
check_waw_ya(4, rad4)
else
check_waw_ya(3, rad3)
end
elseif vform_supports_final_weak(form) then
-- non-final-weak verbs cannot have weak final radical if there's a corresponding
-- final-weak verb category. I think this is safe. We may have problems with
-- ḥayya/ḥayiya yaḥyā if we treat it as a geminate verb.
if rad4 then
check_not_waw_ya(4, rad4)
else
check_not_waw_ya(3, rad3)
end
end
if weakness == "hollow" then
check_waw_ya(2, rad2)
-- don't check that non-hollow verbs in forms that support hollow verbs
-- don't have wāw or yāʾ as their second radical because some verbs exist
-- where a middle-radical wāw/yāʾ behaves as sound, e.g. form-VIII izdawaja
-- "to be in pairs".
end
if weakness == "geminate" then
if rad4 then
error("Internal error: No geminate quadrilaterals, should not be seen")
end
if rad2 ~= rad3 then
error("Weakness is geminate; radical 3 is " .. rad3 .. " but should be same as radical 2 " .. rad2)
end
elseif vform_supports_geminate(form) then
-- non-geminate verbs cannot have second and third radical same if there's
-- a corresponding geminate verb category. I think this is safe. We
-- don't fuss over double wāw or double yāʾ because this could legitimately
-- be a final-weak verb with middle wāw/yāʾ, treated as sound.
if rad4 then
error("Internal error: No quadrilaterals should support geminate verbs")
end
if rad2 == rad3 and not is_waw_ya(rad2) and not SOUND_ROOTS[form .. ":" .. rad1 .. rad2 .. rad3] then
error("Weakness is '" .. weakness .. "'; radical 2 and 3 are same at " .. rad2 .. " but should not be; consider making weakness 'geminate'")
end
end
end
-- array of substitutions; each element is a 2-entry array FROM, TO; do it
-- this way so the concatenations only get evaluated once
local postprocess_subs = {
-- reorder short-vowel + shadda -> shadda + short-vowel for easier processing
{"(" .. AIU .. ")" .. SH, SH .. "%1"},
----------same letter separated by sukūn should instead use shadda---------
------------happens e.g. in kun-nā "we were".-----------------
{"(.)" .. SK .. "%1", "%1" .. SH},
---------------------------- assimilated verbs ----------------------------
-- iw, iy -> ī (assimilated verbs)
{I .. W .. SK, II},
{I .. Y .. SK, II},
-- uw, uy -> ū (assimilated verbs)
{U .. W .. SK, UU},
{U .. Y .. SK, UU},
-------------- final -yā uses tall alif not alif maqṣūra ------------------
{"(" .. Y .. SH .. "?" .. A .. ")" .. AMAQ, "%1" .. ALIF},
----------------------- handle hamza assimilation -------------------------
-- initial hamza + short-vowel + hamza + sukūn -> hamza + long vowel
{HAMZA .. A .. HAMZA .. SK, HAMZA .. A .. ALIF},
{HAMZA .. I .. HAMZA .. SK, HAMZA .. I .. Y},
{HAMZA .. U .. HAMZA .. SK, HAMZA .. U .. W}
}
local postprocess_tr_subs = {
{"ī([" .. vowels .. "y*])", "iy%1"},
{"ū([" .. vowels .. "w*])", "uw%1"},
{"(.)%*", "%1%1"}, -- implement shadda
---------------------------- assimilated verbs ----------------------------
-- iw, iy -> ī (assimilated verbs)
{"iw([^" .. vowels .. "w])", "ī%1"},
{"iy([^" .. vowels .. "y])", "ī%1"},
-- uw, uy -> ū (assimilated verbs)
{"uw([^" .. vowels .. "w])", "ū%1"},
{"uy([^" .. vowels .. "y])", "ū%1"},
----------------------- handle hamza assimilation -------------------------
-- initial hamza + short-vowel + hamza + sukūn -> hamza + long vowel
{"ʔaʔ(" .. NV .. ")", "ʔā%1"},
{"ʔiʔ(" .. NV .. ")", "ʔī%1"},
{"ʔuʔ(" .. NV .. ")", "ʔū%1"},
}
-- Post-process verb parts to eliminate phonological anomalies. Many of the changes, particularly the tricky ones,
-- involve converting hamza to have the proper seat. The rules for this are complicated and are documented on the
-- [[w:Hamza]] Wikipedia page. In some cases there are alternatives allowed, and we handle them below by returning
-- multiple possibilities.
--
-- ORTHOGRAPHIC EXEMPTIONS (`orth`, set on `base` by the code that knows the fact)
--
-- postprocess_subs above and ar_utilities.process_hamza apply general Arabic orthography
-- to a finished word. A handful of the reference's verb spellings are decisions neither
-- pass can make, because what settles them is not in the string: that a hamza is a
-- *radical*, that a short vowel is the stem's rather than iʿrāb, that a verb is form VIII
-- rather than form I. Each of the three has both halves in the corpus. Form I أَتَى and
-- form VIII اِئْتَمَنَ reach this function's 1s مضارع as the same ءَ + ءْ + ت, and the book
-- prints آتِي for the one and أَأْتَمِنُ for the other (#14). شَأَى's imperative اُشْؤُ and
-- جَرُؤَ's past both end in hamza + a short vowel, and only the first of the two vowels
-- belongs to the stem (#12).
--
-- module/ar-utilities.lua is byte-identical to module/vendor/ar-utilities.lua, and its
-- other callers are on-wiki nominal templates that cannot be regression-tested from this
-- repo, so none of this is fixed by editing it. Each case is instead handled on the
-- caller's side of the shared passes, in one of three ways:
--
-- * park the sequence on a placeholder so a shared rule cannot see it, and restore it
-- afterwards -- #10's original mechanism, now also #14's;
-- * add a spelling beside whatever the shared code returns, because the reference
-- attests both and this module already carries alternatives elsewhere -- #16, #17; or
-- * rewrite the sequence, either before the shared pass so its rule never matches
-- (#12's past clause writes the ā as an ألف مقصورة, which the madda rule does not
-- look for) or after it, where the shared code has made a decision the caller's fact
-- overrides (#12's seating clause, #18's).
--
-- Adding one is three things: a key in `base.orth` set by the builder that knows the
-- fact, a clause here naming the finding, and the XFAIL entries in tests/run.lua deleted
-- in the same commit.
--
-- Three of the clauses below are unconditional, and deliberately so: they repair a
-- spelling the shared code produces that Arabic does not use (#18), restore one it
-- discards (#17), or extend one of its rules to a seat it never reaches (#15). None of
-- the three needs a fact from the caller -- only a place to live that is not the shared
-- file.
local function postprocess_term(term, orth)
if term == "?" then
return "?"
end
orth = orth or {}
-- Phase 1: the reductions in postprocess_subs, with the parked exemptions held out
-- across them. `park_w` is a parameter rather than read from `orth` because #16 runs
-- this phase both ways -- see below.
local function reduce(t, park_w)
-- Add BORDER at text boundaries.
t = BORDER .. t .. BORDER
-- #10: a word-initial hamzat wasl + wāw + sukūn is how a form-I mithal that keeps
-- its wāw spells its imperative (اِوْنَ، اِوْجَلْ). The iw -> ī reduction is right
-- everywhere else and cannot simply be dropped -- it is what turns the form VIII
-- mithal past اِوْتَعَدَ into اِيتَعَدَ, in the same word-initial position, so position
-- alone doesn't separate the two cases.
if park_w then
t = rsub(t, BORDER .. ALIF .. I .. W .. SK, BORDER .. ALIF .. I .. KEEP_W_PH .. SK)
end
-- #14: the reference spells the 1s مضارع of a hamza-initial form VIII analytically,
-- أَأْتَمِنُ -- the prefix hamza, then the quiescent radical hamza on its own seat --
-- where the أَ + أْ -> آ contraction below and the alif-madda rule in process_hamza
-- between them return آتَمِنُ. Form I of a hamza-initial root arrives here with the
-- identical sequence and *is* printed contracted (آكُلُ، آخُذُ، آتِي), so the string
-- cannot decide this and the flag does.
if orth.analytic_hamza then
t = rsub(t, BORDER .. HAMZA .. A .. HAMZA .. SK,
BORDER .. HAMZA .. A .. KEEP_HAMZA_PH .. SK)
end
-- Do the main post-processing, based on the pattern substitutions in postprocess_subs.
for _, sub in ipairs(postprocess_subs) do
t = rsub(t, sub[1], sub[2])
end
-- #12, the past half: a form-I final-weak verb on a wāw rad3 builds its past 3ms ā
-- as a real alif (دَعَا), and after a hamza rad2 that puts hamza-on-alif + fatḥa +
-- alif in front of process_hamza's madda rule (أَا -> آ), which swallows the seat:
-- شَأَى comes out شَآ. The rule itself is right -- it is what gives قَرَأَ its dual قَرَآ --
-- and it keys on ALIF, not on AMAQ, which is why the module already gets رَأَى and
-- نَأَى right: a yāʾ rad3 never produces the second alif. So the ā is written as an
-- ألف مقصورة here instead, which sidesteps the madda rule rather than suppressing
-- it. Only the past 3ms of an -aw verb reaches this sequence; every derived form
-- already ends its past 3ms in AMAQ.
if orth.hamza_rad2_final_weak then
t = rsub(t, HAMZA .. A .. ALIF .. BORDER, HAMZA .. A .. AMAQ .. BORDER)
end
t = t:gsub(KEEP_W_PH, W)
-- Restored as a plain hamza, not a seat: the seating pass below still has to place it,
-- and gets it right (a quiescent medial hamza after a fatḥa takes the alif).
t = t:gsub(KEEP_HAMZA_PH, HAMZA)
return (t:gsub(BORDER, ""))
end
-- Phase 2: hamza seats. Returns the list of spellings for one reduced term.
local function seat(t)
if not rfind(t, HAMZA) then
return { t }
end
-- #17: after a long ū, process_hamza treats و + ؤُ + و as having no acceptable
-- original spelling and returns only its two alternatives (ئُو، ءُو) -- while the
-- same function keeps the original beside the alternative after a long ā, which is
-- what gives سَاؤُوا. The reference prints the wāw seat after a long ū throughout
-- (يَسُوؤُونَ، تَسُوؤُونَ، سُوؤُوا, against its own تَسُوئِينَ / سُوئِي for the kasra: the
-- seat follows the hamza's own vowel). So the discarded spelling is added back
-- here, after theirs rather than instead of them -- the same order the long-ā
-- branch of that function already uses.
local waw_seat
if rfind(t, W .. HAMZA .. U .. W) then
local parked = t:gsub(W .. HAMZA .. U .. W, W .. WAW_SEAT_PH .. U .. W)
waw_seat = ar_utilities.process_hamza(parked:gsub(HAMZA, HAMZA_PH))[1]
waw_seat = waw_seat:gsub(WAW_SEAT_PH, HAMZA_ON_W)
end
local out = ar_utilities.process_hamza(t:gsub(HAMZA, HAMZA_PH))
if waw_seat then
out[#out + 1] = waw_seat
end
-- #12, the imperative/jussive half: apocopation strands the radical hamza at the
-- end of the word, where process_hamza takes its seat from the *preceding* letter's
-- vowel and, finding a sukūn, drops it on the line -- اُشْءُ, أَفْءِ. That rule is right
-- for a hamza whose own vowel is iʿrāb (جُزْء), and cannot be made position-sensitive
-- inside the shared file: the fatḥa of جَرُؤَ is the ماضٍ ending and the ḍamma before
-- it rightly wins the seat. Here the short vowel left after rad3 goes is the stem's
-- own, which is the fact this flag carries. The reference seats it: اُشْؤُ (p160, شأو,
-- form I) and أَفْإِ (p300, فأو, form IV) -- two roots, two measures, two pages, and
-- the two vowels between them.
--
-- The seat is the wāw for a ḍamma and the alif otherwise; #18's substitution below
-- then writes the alif's hamza underneath when the vowel is a kasra, which is how
-- the alif branch comes out as إ. That is not a third rule invented here: the same
-- إ is what p368's اِرْتَإِ and p182's imperative إ already print, and what the module
-- already produces for both, having reached the alif seat by its own route (a
-- preceding fatḥa, and word-initial position). Only p300 needed the seat itself.
--
-- Gated on a preceding sukūn, which is the whole of what the two pages attest. The
-- hamza after a *long* vowel is left alone (وأي's passive jussive تُوءَ), where the
-- shared code also leaves it on the line and no page here prints the slot; and the
-- pattern wants the vowel directly after the hamza, so a šadda'd seat (p271's رَأِّ)
-- is not matched, the same gate #18 gets for free.
if orth.hamza_rad2_final_weak then
for i, v in ipairs(out) do
v = rsub(BORDER .. v .. BORDER, SK .. HAMZA .. "(" .. AIU .. ")" .. BORDER,
function(vowel)
return SK .. (vowel == U and HAMZA_ON_W or HAMZA_ON_ALIF) .. vowel .. BORDER
end)
out[i] = (v:gsub(BORDER, ""))
end
end
-- #15: a hamza left on the line, carrying a fatḥa, with an alif after it, is
-- printed as a madda -- but not when that would end the word directly after an
-- alif. The reference sets يَداآنِ / تَداآنِ (p201, دوء), يَهاآنِ / تَهاآنِ (p242,
-- هوء) and يَسُوآنِ / تَسُوآنِ (p157, سوء) for the مضارع duals, and سُوآ for p157's
-- imperative dual, while the same three verbs print their *word-final* duals
-- داءا / هاءا / سَاءَا with the hamza on the line -- so the exception is carried by
-- the preceding alif, not by the position alone: سُوآ is word-final too and does
-- contract, after a long ū. Ten cells, three roots, three pages, and the blocked
-- case attested on all three. process_hamza applies this rule only to a hamza it
-- has seated on an alif (which is what gives تَدَرْبَآ); after a long vowel it
-- leaves the seat on the line and the rule never fires, so the extension is here.
--
-- Confined to a hamza after a *long vowel*, which is the whole of what those three
-- pages attest. Written without that gate it also contracts the فَعْلان participle
-- سَوْءَان to سَوْآن -- a hamza after the sukūn of a diphthong, not after a long vowel,
-- in a slot no fixture covers and no page here prints. The mater carries no sukūn
-- in a long vowel as this module builds one, so requiring the two to be adjacent
-- is the gate.
for i, v in ipairs(out) do
v = BORDER .. v .. BORDER
v = rsub(v, ALIF .. HAMZA .. A .. ALIF .. BORDER, ALIF .. NO_MADDA_PH .. A .. ALIF .. BORDER)
v = rsub(v, "([" .. AMAD .. ALIF .. W .. Y .. "])" .. HAMZA .. A .. ALIF, "%1" .. AMAD)
v = v:gsub(NO_MADDA_PH, HAMZA)
out[i] = (v:gsub(BORDER, ""))
end
-- #18: a hamza seated on an alif and carrying a bare kasra is written *below* the
-- alif. The seat is chosen from the preceding letter's vowel, which is right when
-- the hamza's own vowel is iʿrāb (مَلْجَأٍ) and is why the rule lives in the shared
-- code; in a verb there is no iʿrāb, and the kasra that follows an apocopated
-- radical hamza is the stem's own -- so اِرْتَأَى's jussive is اِرْتَإِ.
--
-- Not when the alif also carries a šadda, and the corpus is what says so: رَأَّى
-- (p271, form II of the *same* root رأو as p368's اِرْتَأَى) prints its apocopated
-- imperative رَأِّ, hamza above, where the doubled radical puts a šadda on the seat.
-- Written unconditionally first, this rule broke that cell and nothing else in 379
-- paradigms, which is both the counter-example and its own control: one root, two
-- forms, two pages, and the presence of the šadda the only difference between them.
-- No test for the šadda is needed: postprocess_subs has already reordered it in
-- front of the vowel, so أ + šadda + kasra simply isn't the sequence below.
for i, v in ipairs(out) do
out[i] = v:gsub(HAMZA_ON_ALIF .. I, HAMZA_UNDER_ALIF .. I)
end
return out
end
local out = seat(reduce(term, orth.keep_initial_w))
-- #16: a retained-wāw مثال reduces اِوْ to اِيْ in the imperative on p240 (اِيْجَعْ, all
-- five cells) and does not on p247 (اِوْنَ) -- the book carries both spellings and
-- grammar allows both, so the module carries both too, the way it already carries
-- سَائُوا | سَاؤُوا. #10's park is still right; what was missing is the second form
-- beside the first. Widening loose() instead would retire the suite's only check on
-- the mithal-wāwī / mithal-yāʾī imperative distinction, which is why this is here.
if orth.keep_initial_w then
for _, reduced in ipairs(seat(reduce(term, false))) do
local seen = false
for _, v in ipairs(out) do
if v == reduced then
seen = true
break
end
end
if not seen then
out[#out + 1] = reduced
end
end
end
if #out == 1 then
return out[1]
end
return out
end
local function postprocess_translit(translit)
if translit == "?" then
return "?"
end
-- Add BORDER at text boundaries.
translit = BORDER .. translit .. BORDER
-- Do the main post-processing, based on the pattern substitutions in postprocess_tr_subs.
for _, sub in ipairs(postprocess_tr_subs) do
translit = rsub(translit, sub[1], sub[2])
end
translit = translit:gsub(BORDER, "")
return translit
end
-- #13: نقل الحركة + إدغام in a لفيف مقرون verb outside form I. Where the paradigm brings
-- two vowelled yāʾs together on a *quiescent* radical, the reference moves the first
-- yāʾ's vowel back onto that radical and geminates the pair: أَحْيَيَا -> أَحَيَّا,
-- يُحْيِيَانِ / تُحْيِيَانِ -> يُحِيَّانِ / تُحِيَّانِ, أَحْيِيَا -> أَحِيَّا (p302, form IV on حيي),
-- and the same five slots of اِسْتَحْيَا (p389, form X on the same root).
--
-- Only the نقل is done here. The إدغام is postprocess_subs' own "same letter separated
-- by a sukūn -> šadda" rule, which already puts the šadda in front of the vowel the way
-- the rest of the module writes it -- so this has to run *before* postprocess_forms(),
-- and does, from conjugate_verb().
--
-- The gate is that sukūn, and the reference's pages calibrate it from both sides:
-- * a *long* vowel in front of the first yāʾ can host nothing, and عايا (p287, form
-- III on عيي) prints يُعايِيانِ، تُعايِيانِ and عايِيا with both yāʾs. The pattern below
-- does not match them because there is no consonant + sukūn there to match;
-- * the second yāʾ has to carry a short vowel of its own. The control is in the same
-- columns of the pages that do contract: يُحْيِي (3ms), يُحْيِينَ (3fp) and تُحْيِينَ
-- (2fs), where it is the mater of a long ī, are printed uncontracted, and the
-- pattern does not match those either.
-- Between them the two conditions pick out exactly the five slots of p302 and p389 that
-- contract, against the twenty-odd cells of the same two paradigms that do not.
--
-- Form I is excluded, and by attestation rather than by phonology: حَيِيَ (p229, 017_159)
-- and عَيِيَ (p250, 238_159) put the identical consonant + sukūn + yāʾ sequence in their
-- مضارع and imperative duals and both print them uncontracted -- يَحْيَيانِ، اِحْيَيا،
-- يَعْيَيانِ، اِعْيَيا. Form I has its own version of this alternation, حَيَّ beside حَيِيَ,
-- and it is a different mechanism: the vowel is dropped rather than moved, which is why
-- make_form_i_hayy_verb() spells it out as a stem pair instead.
--
-- Added beside the uncontracted form and never instead of it: both spellings are
-- current, and form X already carries the two the module builds from its own stems
-- (اِسْتَحْيَيَا | اِسْتَحَيَا), so this is a third entry in a slot that already had a choice.
local NAQL_FROM = "(.)" .. SK .. Y .. "(" .. AIU .. ")" .. Y .. "(" .. AIU .. ")"
local NAQL_TO = "%1%2" .. Y .. SK .. Y .. "%3"
local function add_naql_idgham_forms(base)
-- "none" is a user-supplied paradigm with no verb form to reason from; form I is
-- excluded on the evidence above.
if base.verb_form == "I" or base.verb_form == "none" then
return
end
-- Collected first and inserted afterwards: inserting into base.forms while iterating
-- over it would let a contracted form be re-read as a source in the same pass.
local additions
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
local naql, changed = rsubb(form.form, NAQL_FROM, NAQL_TO)
if changed then
additions = additions or {}
additions[#additions + 1] = {slot, {form = naql, footnotes = form.footnotes}}
end
end
end
if additions then
for _, addition in ipairs(additions) do
iut.insert_form(base.forms, addition[1], addition[2])
end
end
end
local function postprocess_forms(base)
local converted_values = {}
for slot, forms in pairs(base.forms) do
local need_dedup = false
for i, form in ipairs(forms) do
local term = postprocess_term(form.form, base.orth)
local translit = form.translit and postprocess_translit(form.translit) or nil
if term ~= form.form or translit ~= form.translit then
need_dedup = true
end
converted_values[i] = {term, translit}
end
if need_dedup then
local temp_dedup = {}
for i = 1, #forms do
local new_term, new_translit = unpack(converted_values[i])
if type(new_term) == "table" then
for _, nt in ipairs(new_term) do
local new_formobj = {
form = nt,
translit = new_translit,
footnotes = forms[i].footnotes,
}
iut.insert_form(temp_dedup, "temp", new_formobj)
end
else
local new_formobj = {
form = new_term,
translit = new_translit,
footnotes = forms[i].footnotes,
}
iut.insert_form(temp_dedup, "temp", new_formobj)
end
end
base.forms[slot] = temp_dedup.temp
end
end
end
local function process_slot_overrides(base)
for slot, forms in pairs(base.slot_overrides) do
local existing_values = base.forms[slot]
base.forms[slot] = nil
for _, form in ipairs(forms) do
-- + in active participle for form I requests slot ap1
if form.form == "+" and (base.verb_form ~= "I" or slot ~= "ap") then
if not existing_values then
error(("Slot '%s' requested the default value but no such value available"):format(slot))
end
-- We maintain an invariant that no two slots share a form object (although they may share the footnote
-- lists inside the form objects). However, there is no need to copy the form objects here because there
-- is a one-to-one correspondence between slots and slot overrides, i.e. you can't have a default value
-- go into two slots.
insert_form_or_forms(base, slot, existing_values, "allow overrides", form.uncertain)
elseif default_indicator_to_active_participle_slot[form.form] then
if form.form == "++" then
if slot ~= "vn" and slot ~= "ap" and slot ~= "pp" then
error(("Secondary default value request '++' only applicable to verbal nouns and pariciples, but found in slot '%s'"):
format(slot))
end
else
if slot ~= "ap" then
error(("Secondary default value request '%s' only applicable to active pariciples, but found in slot '%s'"):
format(form.form, slot))
end
end
local secondary_default_slot =
slot == "vn" and "vn2" or slot == "pp" and "pp2" or
default_indicator_to_active_participle_slot[form.form]
local existing_values = base.forms[secondary_default_slot]
if not existing_values then
error(("Slot '%s' requested a secondary default value using '%s' but no such value available"):
format(slot, form.form))
end
-- See comment above about the lack of need to copy the form objects.
insert_form_or_forms(base, slot, existing_values, "allow overrides", form.uncertain)
-- To make sure there aren't shared form objects.
base.forms[secondary_default_slot] = nil
else
insert_form_or_forms(base, slot, form, "allow overrides", form.uncertain)
end
end
end
-- Now, for non-stative form-I verbs, fill the active participle slot from ap1 unless it should be missing (e.g.
-- passive-only or user specified 'ap:-').
if base.verb_form == "I" and not base.forms.ap and base.forms.ap1 and not skip_slot(base, "ap") then
local saw_non_stative = false
for _, vowel_spec in ipairs(base.conj_vowels) do
if req(vowel_spec.past, A) then
saw_non_stative = true
break
end
end
if saw_non_stative then
base.forms.ap = base.forms.ap1
-- To make sure there aren't shared form objects.
base.forms.ap1 = nil
end
end
end
local function handle_lemma_linked(base)
-- Compute linked versions of potential lemma slots, for use in {{ar-verb}}. We substitute the original lemma
-- (before removing links) for forms that are the same as the lemma, if the original lemma has links.
for _, slot in ipairs(export.potential_lemma_slots) do
if base.forms[slot] then
insert_form_or_forms(base, slot .. "_linked", iut.map_forms(base.forms[slot], function(form)
if form == base.lemma and rfind(base.linked_lemma, "%[%[") then
return base.linked_lemma
else
return form
end
end))
end
end
end
-- Process specs given by the user using 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'.
local function process_addnote_specs(base)
for _, spec in ipairs(base.addnote_specs) do
for _, slot_spec in ipairs(spec.slot_specs) do
slot_spec = "^" .. slot_spec .. "$"
for slot, forms in pairs(base.forms) do
if rfind(slot, slot_spec) then
-- To save on memory, side-effect the existing forms.
for _, form in ipairs(forms) do
form.footnotes = iut.combine_footnotes(form.footnotes, spec.footnotes)
end
end
end
end
end
end
local function add_missing_links_to_forms(base)
-- Any forms without links should get them now. Redundant ones will be stripped later.
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
form.form = "[[" .. form.form .. "]]"
end
end
end
end
local function conjugate_verb(base)
construct_stems(base)
-- Orthographic exemptions the shared hamza/reduction passes can't decide for
-- themselves; see the block comment on postprocess_term(). Most are set by the
-- stem builder that knows the fact, so this table has to exist before dispatch.
base.orth = base.orth or {}
for _, vowel_spec in ipairs(base.conj_vowels) do
-- Reconstruct conjugation type from verb form and (possibly inferred) weakness.
conj_type = base.verb_form .. "-" .. vowel_spec.weakness
-- #14: a hamza-initial form VIII spells its 1s مضارع analytically (أَأْتَمِنُ), where
-- form I of a hamza-initial root contracts to a madda (آتِي) from the identical
-- sequence. Declared here rather than in the four VIII builders because it holds
-- for all of them and depends on nothing else they compute.
if base.verb_form == "VIII" and vowel_spec.rad1 and rfind(rget(vowel_spec.rad1) or "", HAMZA_ANY) then
base.orth.analytic_hamza = true
end
-- #12: a final-weak verb whose rad2 is a hamza. Two of the shared passes read that
-- radical as an ordinary word-final hamza and get it wrong in the two slots where
-- rad3 stops being a consonant -- see the two clauses in postprocess_term(). Like
-- #14 this is declared here rather than in a builder: it holds for every form the
-- root can take (شأو, فأو, رأو, وأي in the corpus, forms I, II, IV and VIII) and
-- depends on nothing else the builders compute.
if rfind(vowel_spec.weakness or "", "final%-weak") and vowel_spec.rad2 and
rfind(rget(vowel_spec.rad2) or "", HAMZA_ANY) then
base.orth.hamza_rad2_final_weak = true
end
-- Check that the conjugation type is recognized.
if not conjugations[conj_type] then
error("Unknown conjugation type '" .. conj_type .. "'")
end
-- The way the conjugation functions work is they always add entries to the appropriate parts of the paradigm
-- (each of which is an array), rather than setting the values. This makes it possible to call more than one
-- conjugation function and essentially get a paradigm of the "either A or B" kind. Doing this may insert
-- duplicate entries into a particular paradigm part, but this is not a problem because we check for duplicate
-- entries when adding them, and don't insert in that case.
conjugations[conj_type](base, vowel_spec)
end
-- #13: before postprocess_forms(), which supplies the إدغام half of the alternation.
add_naql_idgham_forms(base)
postprocess_forms(base)
process_slot_overrides(base)
-- This should happen before add_missing_links_to_forms() so that the comparison `form == base.lemma` in
-- handle_lemma_linked() works correctly and compares unlinked forms to unlinked forms.
handle_lemma_linked(base)
process_addnote_specs(base)
if not base.alternant_multiword_spec.args.noautolinkverb then
add_missing_links_to_forms(base)
end
end
local function parse_indicator_spec(angle_bracket_spec)
-- Store the original angle bracket spec so we can reconstruct the overall conj spec with the lemma(s) in them.
local base = {
angle_bracket_spec = angle_bracket_spec,
conj_vowels = {},
root_consonants = {},
user_stem_overrides = {},
user_slot_overrides = {},
slot_explicitly_missing = {},
slot_uncertain = {},
slot_override_uses_default = {},
addnote_specs = {},
}
local function parse_err(msg)
error(msg .. ": " .. angle_bracket_spec)
end
local function fetch_footnotes(separated_group)
local footnotes
for j = 2, #separated_group - 1, 2 do
if separated_group[j + 1] ~= "" then
parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'")
end
if not footnotes then
footnotes = {}
end
table.insert(footnotes, separated_group[j])
end
return footnotes
end
local inside = angle_bracket_spec:match("^<(.*)>$")
assert(inside)
local segments = put.parse_multi_delimiter_balanced_segment_run(inside, {{"[", "]"}, {"<", ">"}})
local dot_separated_groups = put.split_alternating_runs_and_strip_spaces(segments, "%.")
-- The first dot-separated element must specify the verb form, e.g. IV or IIq. If the form is I, it needs to include
-- the the past and non-past vowels, e.g. I/a~u for kataba ~ yaktubu. More than one vowel can be given,
-- comma-separated, and more than one past~non-past pair can be given, slash-separated, e.g. I/a,u~u/i~a for form I
-- كمل, which can be conjugated as kamala/kamula ~ yakmulu or kamila ~ yakmalu. An individual vowel spec must be one
-- of a, i or u and in general (a) at least one past~non-past pair most be given, and (b) both past and non-past
-- vowels must be given even though sometimes the vowel can be determined from the unvocalized form. An exception is
-- passive-only verbs, where the vowels can't in general be determined (except indirectly in some cases by looking
-- at an associated non-passive verb); in that case, the vowel~vowel spec can left out.
local slash_separated_groups = put.split_alternating_runs_and_strip_spaces(dot_separated_groups[1], "/")
local form_spec = slash_separated_groups[1]
base.form_footnotes = fetch_footnotes(form_spec)
if form_spec[1] == "" then
parse_err("Missing verb form")
end
if not allowed_vforms_with_weakness_set[form_spec[1]] then
parse_err(("Unrecognized verb form '%s', should be one of %s"):format(
form_spec[1], list_to_text(allowed_vforms, nil, " or ")))
end
if form_spec[1]:find("%-") then
base.verb_form, base.explicit_weakness = form_spec[1]:match("^(.-)%-(.*)$")
else
base.verb_form = form_spec[1]
end
if #slash_separated_groups > 1 then
if base.verb_form ~= "I" then
parse_err(("Past~non-past vowels can only be specified when verb form is I, but saw form '%s'"):format(
base.verb_form))
end
for i = 2, #slash_separated_groups do
local slash_separated_group = slash_separated_groups[i]
local tilde_separated_groups = put.split_alternating_runs_and_strip_spaces(slash_separated_group, "~")
if #tilde_separated_groups ~= 2 then
parse_err(("Expected two tilde-separated vowel specs: %s"):format(table.concat(slash_separated_group)))
end
local function parse_conj_vowels(tilde_separated_group, vtype)
local conj_vowel_objects = {}
local comma_separated_groups = put.split_alternating_runs_and_strip_spaces(tilde_separated_group, ",")
for _, comma_separated_group in ipairs(comma_separated_groups) do
local conj_vowel = comma_separated_group[1]
if conj_vowel ~= "a" and conj_vowel ~= "i" and conj_vowel ~= "u" then
parse_err(("Expected %s conjugation vowel '%s' to be one of a, i or u in %s"):format(
vtype, conj_vowel, table.concat(slash_separated_group)))
end
conj_vowel = dia[conj_vowel]
local conj_vowel_footnotes = fetch_footnotes(comma_separated_group)
-- Try to use strings when possible as it makes q() significantly more efficient.
if conj_vowel_footnotes then
table.insert(conj_vowel_objects, {form = conj_vowel, footnotes = conj_vowel_footnotes})
else
table.insert(conj_vowel_objects, conj_vowel)
end
end
return conj_vowel_objects
end
local conj_vowel_spec = {
past = parse_conj_vowels(tilde_separated_groups[1], "past"),
nonpast = parse_conj_vowels(tilde_separated_groups[2], "non-past"),
}
table.insert(base.conj_vowels, conj_vowel_spec)
end
end
for i = 2, #dot_separated_groups do
local dot_separated_group = dot_separated_groups[i]
local first_element = dot_separated_group[1]
if first_element == "addnote" then
local spec_and_footnotes = fetch_footnotes(dot_separated_group)
if #spec_and_footnotes < 2 then
parse_err("Spec with 'addnote' should be of the form 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'")
end
local slot_spec = table.remove(spec_and_footnotes, 1)
local slot_spec_inside = rmatch(slot_spec, "^%[(.*)%]$")
if not slot_spec_inside then
parse_err("Internal error: slot_spec " .. slot_spec .. " should be surrounded with brackets")
end
local slot_specs = rsplit(slot_spec_inside, ",")
-- FIXME: Here, [[Module:it-verb]] called strip_spaces(). Generally we don't do this. Should we?
table.insert(base.addnote_specs, {slot_specs = slot_specs, footnotes = spec_and_footnotes})
elseif first_element:find("^var:") then
if #dot_separated_group > 1 then
parse_err(("Can't attach footnotes to 'var:' spec '%s'"):format(first_element))
end
base.variant = first_element:match("^var:(.*)$")
elseif first_element:find("^I+V?:") then
local root_cons, root_cons_value = first_element:match("^(I+V?):(.*)$")
local root_index
if root_cons == "I" then
root_index = 1
elseif root_cons == "II" then
root_index = 2
elseif root_cons == "III" then
root_index = 3
elseif root_cons == "IV" then
root_index = 4
if not base.verb_form:find("q$") then
parse_err(("Can't specify root consonant IV for non-quadriliteral verb form '%s': %s"):format(
base.verb_form, first_element))
end
end
local cons, translit = root_cons_value:match("^(.*)//(.*)$")
if not cons then
cons = root_cons_value
end
local root_footnotes = fetch_footnotes(dot_separated_group)
if not translit and not root_footnotes then
base.root_consonants[root_index] = cons
else
base.root_consonants[root_index] = {form = cons, translit = translit, footnotes = root_footnotes}
end
elseif first_element:find("^[a-z][a-z0-9_]*:") then
local slot_or_stem, remainder = first_element:match("^(.-):(.*)$")
dot_separated_group[1] = remainder
local comma_separated_groups = put.split_alternating_runs_and_strip_spaces(dot_separated_group, "[,،]")
if overridable_stems[slot_or_stem] then
if base.user_stem_overrides[slot_or_stem] then
parse_err("Overridable stem '" .. slot_or_stem .. "' specified twice")
end
base.user_stem_overrides[slot_or_stem] = overridable_stems[slot_or_stem](comma_separated_groups,
{prefix = slot_or_stem, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
else -- assume a form override; we validate further later when the possible slots are available
if base.user_slot_overrides[slot_or_stem] then
parse_err("Form override '" .. slot_or_stem .. "' specified twice")
end
base.user_slot_overrides[slot_or_stem] = allow_multiple_values_for_override(comma_separated_groups,
{prefix = slot_or_stem, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes},
"is form override")
end
elseif indicator_flags[first_element] then
if #dot_separated_group > 1 then
parse_err("No footnotes allowed with '" .. first_element .. "' spec")
end
if base[first_element] then
parse_err("Spec '" .. first_element .. "' specified twice")
end
base[first_element] = true
else
local passive, uncertain = first_element:match("^(.*)(%?)$")
passive = passive or first_element
uncertain = not not uncertain
if passive_types[passive] then
if #dot_separated_group > 1 then
parse_err("No footnotes allowed with '" .. passive .. "' spec")
end
if base.passive then
parse_err("Value for passive type specified twice")
end
base.passive = passive
base.passive_uncertain = uncertain
else
parse_err("Unrecognized spec '" .. first_element .. "'")
end
end
end
return base
end
-- Normalize all lemmas, substituting the pagename for blank lemmas and adding links to multiword lemmas.
local function normalize_all_lemmas(alternant_multiword_spec, head)
-- (1) Add links to all before and after text. Remember the original text so we can reconstruct the verb spec later.
if not alternant_multiword_spec.args.noautolinktext then
iut.add_links_to_before_and_after_text(alternant_multiword_spec, "remember original")
end
-- (2) Remove any links from the lemma, but remember the original form so we can use it below in the 'lemma_linked'
-- form.
iut.map_word_specs(alternant_multiword_spec, function(base)
if base.lemma == "" then
base.lemma = head
end
base.user_specified_lemma = base.lemma
base.lemma = m_links.remove_links(base.lemma)
base.user_specified_verb = base.lemma
base.verb = base.user_specified_verb
local linked_lemma
if alternant_multiword_spec.args.noautolinkverb or base.user_specified_lemma:find("%[%[") then
linked_lemma = base.user_specified_lemma
else
-- Add links to the lemma so the user doesn't specifically need to, since we preserve
-- links in multiword lemmas and include links in non-lemma forms rather than allowing
-- the entire form to be a link.
linked_lemma = iut.add_links(base.user_specified_lemma)
end
base.linked_lemma = linked_lemma
end)
end
--W: Lexical exceptions — hollow roots in the Form I فَعُلَ pattern (past~non-past u~u)
-- that keep the middle radical SOUND instead of contracting to a long vowel (هَيُؤَ /
-- يَهْيُؤُ, not هَاءَ / يَهُوءُ). This is not the general rule for u~u hollow verbs --
-- طَالَ / يَطُولُ (ط-و-ل) contracts as normal -- so each entry here is a specific
-- attested exception, not a phonological class.
-- Keyed by rad1..rad2..rad3.
-- Keyed with bare hamza (ء) for rad3, matching normalize_root()'s canonicalization of root radicals
-- (HAMZA_ON_ALIF etc. all fold to HAMZA) -- the raw root "هيأ" normalizes to radicals ه, ي, ء.
local SOUND_FORM_I_UU_ROOTS = {
["هي" .. HAMZA] = true, -- هَيُؤَ ـُ: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان، ط2، 1995، ص203
}
-- Determine weakness from radicals. Used when root given in place of lemma (e.g. for {{ar-verb forms}}).
-- `past_vowel`/`nonpast_vowel`, if given, are the past/non-past vowel of a form-I verb (a string or
-- footnote-bearing form object, per `req()`); they let SOUND_FORM_I_UU_ROOTS single out the specific
-- vowel pattern under which a hollow root is attested as sound, without affecting its other patterns
-- (e.g. a root could still contract normally under a different past~non-past pairing).
local function weakness_from_radicals(form, rad1, rad2, rad3, rad4, past_vowel, nonpast_vowel)
local weakness = nil
local quadlit = form:find("q$")
-- If weakness unspecified, derive from radicals.
if not quadlit then
if is_waw_ya(rad3) and rad1 == W and form == "I" then
weakness = form_i_w_assimilated(past_vowel, nonpast_vowel, rad1, rad2, rad3) and "assimilated+final-weak" or
"final-weak"
elseif is_waw_ya(rad3) and vform_supports_final_weak(form) then
weakness = "final-weak"
elseif rad2 == rad3 and vform_supports_geminate(form) then
-- ...unless the source prints the فكّ rather than the إدغام for this
-- lexeme in this form (عالَلَ, تَعاثَثَ); see SOUND_ROOTS.
weakness = SOUND_ROOTS[form .. ":" .. rad1 .. rad2 .. rad3] and "sound" or "geminate"
elseif is_waw_ya(rad2) and vform_supports_hollow(form) then
--W: Both wāw (و) and yāʾ (ي) in the middle position create hollow verbs, in form I
-- (قَالَ from ق-و-ل, بَاعَ from ب-ي-ع) and in the augmented forms IV, VII, VIII, X
-- (أَتَاسَ from ت-ي-س, أَبَانَ from ب-ي-ن, أَطَاحَ from ط-ي-ح — معجم متن اللغة).
if SOUND_ROOTS[form .. ":" .. rad1 .. rad2 .. rad3] then
-- Lexical exceptions that keep the middle radical sound (أَفْيَلَ,
-- اِسْتَجْوَبَ) instead of contracting it; see SOUND_ROOTS.
weakness = "sound"
elseif form == "I" and past_vowel and nonpast_vowel and req(past_vowel, U) and req(nonpast_vowel, U) and
SOUND_FORM_I_UU_ROOTS[rad1 .. rad2 .. rad3] then
-- Lexical exceptions whose Form I فَعُلَ keeps the middle radical sound (هَيُؤَ); see
-- SOUND_FORM_I_UU_ROOTS. Gated to u~u specifically since that's the attested pattern.
weakness = "sound"
else
weakness = "hollow"
end
elseif rad1 == W and form == "I" then
-- Vowel-conditioned, like the lemma path below: a wāw-initial form-I verb only
-- elides its wāw under a kasra (or lowered-kasra) non-past. Before this, the two
-- inference paths in this module disagreed -- infer_radicals() kept the wāw for
-- i~a and u~u while this one dropped it for every vowel pattern.
weakness = form_i_w_assimilated(past_vowel, nonpast_vowel, rad1, rad2, rad3) and "assimilated" or "sound"
else
weakness = "sound"
end
else
if is_waw_ya(rad4) then
weakness = "final-weak"
else
weakness = "sound"
end
end
return weakness
end
-- Join the infixed tāʔ (ت) to the first radical in form VIII verbs. This may cause assimilation of the tāʔ to the
-- radical or in some cases the radical to the tāʔ. Used when a root is supplied instead of a lemma (which already has
-- the appropriate assimilation in it).
--W: `reduced` is |مدغم=. A hamza first radical assimilates into the infixed tāʾ the
-- same way a wāw does -- اِئْتَحَدَ becomes اِتَّحَدَ, اِئْتَزَرَ becomes اِتَّزَرَ, اِئْتَخَذَ
-- becomes اِتَّخَذَ -- but unlike the wāw it is optional, and this book prints the class
-- both ways: p358's اِئْتَمَنَ and اِئْتَشَرَ unassimilated beside p359's اِتَّحَدَ and
-- اِتَّزَرَ, all four under model 262 (افتعل مهموز الفاء). p359 states the derivation in
-- its own footnotes -- «أصلُ الفعلِ اِئْتَحَدَ» and «أصلُ الفعلِ اِئْتَزَرَ وهوَ الأصحُّ» --
-- so the أصل is the module's default and the assimilation is what the caller asks for.
-- Requested, never inferred from the radical: the same rule |مدغم= follows everywhere
-- else, and the reason p358 does not have to be wrong for p359 to be right.
local function form_viii_join_ta(rad, reduced)
if rad == W or rad == Y or rad == "ت" then return "تّ"
elseif rad == HAMZA and reduced then return "تّ"
elseif rad == "د" then return "دّ"
elseif rad == "ث" then return "ثّ"
elseif rad == "ذ" then return "ذّ"
elseif rad == "ز" then return "زْد"
elseif rad == "ص" then return "صْط"
elseif rad == "ض" then return "ضْط"
elseif rad == "ط" then return "طّ"
elseif rad == "ظ" then return "ظّ"
else return rad .. SK .. "ت"
end
end
local function detect_indicator_spec(base)
base.forms = {}
base.stem_overrides = {}
base.slot_overrides = {}
if not base.conj_vowels[1] then
-- These may be converted to inferred vowels. If not, we throw an error if form I and not passive-only.
base.conj_vowels = {{
past = "-",
nonpast = "-",
}}
else
-- If multiple vowels specified for a given vowel type (e.g. a,u~u), expand so that each spec in
local expansion = {}
for _, spec in ipairs(base.conj_vowels) do
for _, past in ipairs(spec.past) do
for _, nonpast in ipairs(spec.nonpast) do
table.insert(expansion, {past = past, nonpast = nonpast})
end
end
end
base.conj_vowels = expansion
end
local vform = base.verb_form
-- check for quadriliteral form (Iq, IIq, IIIq, IVq)
base.quadlit = not not vform:find("q$")
-- Infer radicals as necessary. We infer a separate set of radicals for each past~non-past vowel combination because
-- they may be different (particularly with form-I hollow verbs).
for _, vowel_spec in ipairs(base.conj_vowels) do
-- NOTE: rad1, rad2, etc. refer to user-specified radicals, which are formobj tables that optionally specify an
-- explicit manual translit, whereas ir1, ir2, etc. refer to inferred radicals, which are either strings or
-- lists of possible radicals.
local rads = base.root_consonants
local rad1, rad2, rad3, rad4 = rads[1], rads[2], rads[3], rads[4]
-- Default any unspecified radicals to radicals determined from the headword. The returned radicals may be
-- lists of possible radicals, where the first radical should be chosen if the user didn't explicitly specify a
-- radical but all are allowed. If `ambig = true` is set in the table, the radical is considered ambiguous and
-- categories won't be created for weak radicals.
local weakness, ir1, ir2, ir3, ir4
if vform ~= "none" then
ir1, ir2, ir3 = rmatch(base.lemma, "^([^_])_([^_])_([^_])$")
if not ir1 then
ir1, ir2, ir3, ir4 = rmatch(base.lemma, "^([^_])_([^_])_([^_])_([^_])$")
end
if ir1 then
-- root given instead of lemma
weakness = weakness_from_radicals(vform, ir1, ir2, ir3, ir4, vowel_spec.past, vowel_spec.nonpast)
if vform == "VIII" then
vowel_spec.form_viii_assim = form_viii_join_ta(ir1, base.reduced)
end
else
local ret = export.infer_radicals {
headword = base.lemma,
vform = vform,
passive = base.passive,
past_vowel = vowel_spec.past,
nonpast_vowel = vowel_spec.nonpast,
is_reduced = base.reduced,
}
weakness, ir1, ir2, ir3, ir4 = ret.weakness, ret.rad1, ret.rad2, ret.rad3, ret.rad4
vowel_spec.form_viii_assim = ret.form_viii_assim
vowel_spec.past = ret.past_vowel
vowel_spec.nonpast = ret.nonpast_vowel
vowel_spec.variant = base.variant or ret.variant
end
end
-- For most ambiguous radicals, the choice of radical doesn't matter because it doesn't affect the conjugation
-- one way or another. For form I hollow verbs, however, it definitely does. In fact, the choice of radical is
-- critical even beyond the past and non-past vowels because it affects the form of the passive participle. So,
-- check for this and signal an error if the radical could not be inferred and is not given explicitly.
if vform == "I" and type(ir2) == "table" and ir2.need_radical and not rad2 then
error("Unable to guess middle radical of hollow form I verb; need to specify radical explicitly")
end
if vform == "I" and not is_passive_only(base.passive) and (
rget(vowel_spec.past) == "-" or rget(vowel_spec.nonpast) == "-") then
error("Form I verb that isn't passive-only or final-weak must have past~non-past vowels specified")
end
-- Convert ambiguous radicals.
local function regularize_inferred_radical(rad)
if type(rad) == "table" then
if rad.ambig then
return {form = rad[1], ambig = true}
else
return rad[1]
end
else
return rad
end
end
-- Return the appropriate radical at index `index` (1 through 4), based either on the user-specified radical
-- `user_radical` or (if unspecified) `inferred_radical`, inferred from the unvocalized lemma. Two values are
-- returned, the "regularized" version of the radical (where ambiguous inferred radicals are converted to their
-- most likely actual radical) and the non-regularized version. The returned values are form objects rather than
-- strings.
local function fetch_radical(user_radical, inferred_radical, index)
if not user_radical then
return regularize_inferred_radical(inferred_radical), inferred_radical
else
local rad_formval = rget(user_radical)
if type(inferred_radical) == "table" then
local allowed_radical_set = m_table.listToSet(inferred_radical)
if not allowed_radical_set[rad_formval] then
error(("For lemma %s, radical %s ambiguously inferred as %s but user radical incompatibly given as %s"):
format(base.lemma, index,
list_to_text(inferred_radical, nil, " or "), rad_formval))
end
elseif rad_formval ~= inferred_radical then
error(("For lemma %s, radical %s inferred as %s but user radical incompatibly given as %s"):
format(base.lemma, index, inferred_radical, rad_formval))
end
return user_radical, user_radical
end
end
if vform ~= "none" then
vowel_spec.rad1, vowel_spec.unreg_rad1 = fetch_radical(rad1, ir1, 1)
vowel_spec.rad2, vowel_spec.unreg_rad2 = fetch_radical(rad2, ir2, 2)
vowel_spec.rad3, vowel_spec.unreg_rad3 = fetch_radical(rad3, ir3, 3)
if base.quadlit then
vowel_spec.rad4, vowel_spec.unreg_rad4 = fetch_radical(rad4, ir4, 4)
end
end
if vform == "I" then
-- If explicit weakness given using 'I-sound' or 'I-assimilated', we may need to adjust the inferred weakness.
if base.explicit_weakness == "sound" then
if weakness == "assimilated" then
weakness = "sound"
elseif weakness == "assimilated+final-weak" then
-- Verbs like waniya~yawnā "to be faint; to languish" (although the defaults should handle this
-- correctly)
weakness = "final-weak"
else
error(("Can't specify form 'I-sound' when inferred weakness is '%s' for lemma %s"):format(
weakness, base.lemma))
end
elseif base.explicit_weakness == "assimilated" then
if weakness == "sound" then
-- i~a verbs like waṭiʔa~yaṭaʔu "to tread, to trample"; wasiʕa~yasaʕu "to be spacious; to be well-off";
-- waṯiʔa~yaṯaʔu "to get bruised, to be sprained", which would default to sound.
weakness = "assimilated"
elseif weakness == "final-weak" then
-- For completeness; not clear if any verbs occur where this is needed. (There are plenty of
-- assimilated+final-weak verbs but the defaults should take care of them.)
weakness = "assimilated+final-weak"
else
error(("Can't specify form 'I-assimilated' when inferred weakness is '%s' for lemma %s"):format(
weakness, base.lemma))
end
elseif base.explicit_weakness then
error(("Internal error: Unrecognized value '%s' for base.explicit_weakness"):format(base.explicit_weakness))
end
elseif vform == "none" then
weakness = base.explicit_weakness
elseif base.explicit_weakness then
error(("Internal error: Explicit weakness should not be specifiable except with forms I and none, but saw explicit weakness '%s' with verb form '%s'"):
format(base.explicit_weakness, vform))
end
vowel_spec.weakness = weakness
if vform ~= "none" then
-- Error if radicals are wrong given the weakness. More likely to happen if the weakness is explicitly given
-- rather than inferred. Will also happen if certain incorrect letters are included as radicals e.g. hamza on
-- top of various letters, alif maqṣūra, tā' marbūṭa.
check_radicals(vform, weakness, rget(vowel_spec.rad1), rget(vowel_spec.rad2), rget(vowel_spec.rad3),
base.quadlit and rget(vowel_spec.rad4) or nil)
end
-- Check the variant value.
local form_iii_vi_geminate = (vform == "III" or vform == "VI") and rget(vowel_spec.rad2) == rget(vowel_spec.rad3) and
not req(vowel_spec.rad2, Y)
local hayy_i_x = hayy_radicals(vowel_spec.rad1, vowel_spec.rad2, vowel_spec.rad3) and (vform == "I" or vform == "X")
if form_iii_vi_geminate or hayy_i_x then
if vowel_spec.variant and vowel_spec.variant ~= "long" and vowel_spec.variant ~= "short" and vowel_spec.variant ~= "both" then
error(("For form-III/VI geminate verb or form-I/X verb with ح-ي-ي radicals, saw unrecognized 'var:%s' value; should be 'var:long', 'var:short' or 'var:both'"):format(
vowel_spec.variant))
end
elseif vowel_spec.variant then
error(("Variant value 'var:%s' not allowed in this context"):format(vowel_spec.variant))
end
end
-- If form I, regroup expanded vowels for display purposes.
if vform == "I" then
local group_by_past = {}
for _, vowel_spec in ipairs(base.conj_vowels) do
m_table.insertIfNot(group_by_past, {
past = undia[rget(vowel_spec.past)],
nonpasts = {undia[rget(vowel_spec.nonpast)]},
}, {
key = function(obj) return obj.past end,
combine = function(obj1, obj2)
for _, nonpast in ipairs(obj2.nonpasts) do
m_table.insertIfNot(obj1.nonpasts, nonpast)
end
end,
})
end
local group_by_nonpast = {}
for _, vowel_spec in ipairs(group_by_past) do
m_table.insertIfNot(group_by_nonpast, {
pasts = {vowel_spec.past},
nonpasts = vowel_spec.nonpasts,
}, {
key = function(obj) return obj.nonpasts end,
combine = function(obj1, obj2)
for _, past in ipairs(obj2.pasts) do
m_table.insertIfNot(obj1.pasts, past)
end
end,
})
end
base.grouped_conj_vowels = group_by_nonpast
end
-- Set value of passive. If not specified, default is yes for forms II, III, IV and Iq; no but uncertainly for
-- forms VII, IX, XI - XV and IIIq - IVq, as well as form I with past vowel u; impersonal but uncertainly for form
-- V, VI, X and IIq, as well as form I with past vowel i; and yes but uncertainly for the remainder (form I with
-- past vowel only a and form VIII).
if not base.passive then
base.passive_defaulted = true
-- Temporary tracking for defaulted passives by verb form, weakness and (for form I) past/non-past vowels.
track_if_ar_conj(base, "passive-defaulted/" .. vform)
for _, vowel_spec in ipairs(base.conj_vowels) do
track_if_ar_conj(base, "passive-defaulted/" .. vform.. "/" .. vowel_spec.weakness)
if vform == "I" then
--W: use rget(); the vowel is a form object when the user attached a footnote
-- (e.g. <I/a[نادر]~u>), and undia[<table>] is nil, which crashes format() on Lua 5.1.
local past_nonpast = ("%s~%s"):format(undia[rget(vowel_spec.past)], undia[rget(vowel_spec.nonpast)])
track_if_ar_conj(base, "passive-defaulted/I/" .. past_nonpast)
track_if_ar_conj(base, "passive-defaulted/I/" .. vowel_spec.weakness .. "/" .. past_nonpast)
end
end
if vform_probably_full_passive(vform) then
base.passive = "pass"
else
base.passive_uncertain = true
for _, vowel_spec in ipairs(base.conj_vowels) do
if vform_probably_no_passive(vform, vowel_spec.weakness, vowel_spec.past, vowel_spec.nonpast) then
base.passive = "nopass"
break
elseif vform_probably_impersonal_passive(vform, vowel_spec.weakness, vowel_spec.past,
vowel_spec.nonpast) then
base.passive = "ipass"
break
end
end
base.passive = base.passive or "pass"
end
end
-- NOTE: Currently there are no built-in stems or form overrides for Arabic; this code is inherited from
-- [[Module:ca-verb]], where such things do exist, and is kept for generality in case we decide in the future to
-- implement such things.
-- Override built-in verb stems and overrides with user-specified ones.
for stem, values in pairs(base.user_stem_overrides) do
base.stem_overrides[stem] = values
end
for slot, values in pairs(base.user_slot_overrides) do
if not base.alternant_multiword_spec.verb_slots_map[slot] then
error("Unrecognized override slot '" .. slot .. "': " .. base.angle_bracket_spec)
end
if export.unsettable_slots_set[slot] then
error("Slot '" .. slot .. "' cannot be set using an override: " .. base.angle_bracket_spec)
end
if skip_slot(base, slot, "allow overrides") then
error("Override slot '" .. slot ..
"' would be skipped based on the passive, 'noimp' and/or 'no_nonpast' settings: " ..
base.angle_bracket_spec)
end
base.slot_overrides[slot] = values
end
if base.verb_form == "none-final-weak" then
for _, stem_type in ipairs { "past", "past_pass", "nonpast", "nonpast_pass" } do
if base.stem_overrides[stem_type .. "_c"] or base.stem_overrides[stem_type .. "_v"] then
error(("Specify past stem for verb type 'none-final-weak' using '%s:...' not '%s_c:...' or '%s_v:...'"):
format(stem_type, stem_type, stem_type))
end
end
for _, stem_type in ipairs { "past", "nonpast" } do
if base.stem_overrides[stem_type] or not base.stem_overrides[stem_type .. "_final_weak_vowel"] then
error(("For verb type 'none-final-weak', if '%s:...' specified, so must '%s_final_weak_vowel:...'"):
format(stem_type, stem_type))
end
end
end
end
local function detect_all_indicator_specs(alternant_multiword_spec)
add_slots(alternant_multiword_spec)
alternant_multiword_spec.verb_forms = {}
-- This means at least one individual base had the slot marked as explicitly missing. Another base (e.g. when
-- there are multiple alternants) might have a value for the slot. In practice, we only respect this when there are
-- no overall values in the slot and `slot_uncertain` isn't set; in this case, we display "no ..." for the slot
-- instead of simply not displaying anything for the slot.
alternant_multiword_spec.slot_explicitly_missing = {}
-- This means at least one individual base had no values for the slot and the slot marked as explicitly uncertain.
-- Note that this is different from a value being present but marked as uncertain (e.g. if an override was given
-- with a ? after it); this causes the form object for the value to have `uncertain = true` set. If there are no
-- overall values in the slot and `slot_uncertain` is set, we display this in the headword.
alternant_multiword_spec.slot_uncertain = {}
iut.map_word_specs(alternant_multiword_spec, function(base)
-- So arguments, etc. can be accessed. WARNING: Creates circular reference.
base.alternant_multiword_spec = alternant_multiword_spec
detect_indicator_spec(base)
if not base.nocat then
m_table.insertIfNot(alternant_multiword_spec.verb_forms, base.verb_form)
end
if base.passive then
alternant_multiword_spec.passive = base.passive
end
if base.passive_uncertain then
alternant_multiword_spec.passive_uncertain = true
end
for slot, _ in pairs(base.slot_explicitly_missing) do
alternant_multiword_spec.slot_explicitly_missing[slot] = true
end
end)
end
local function determine_slot_uncertainty_from_forms(alternant_multiword_spec)
iut.map_word_specs(alternant_multiword_spec, function(base)
-- If no verbal noun and verb form is not 'none' (manually-specified stems) — which currently only happens for
-- form I — and the verbal noun wasn't explicitly indicated as missing using <vn:->, we assume it's just
-- unknown/unspecified rather than missing. Same with active participles.
for uncertain_slot, _ in pairs(slots_that_may_be_uncertain) do
if not base.forms[uncertain_slot] and vform ~= "none" and not skip_slot(base, uncertain_slot) then
base.slot_uncertain[uncertain_slot] = true
end
end
-- Propagate slot uncertainty up. Currently only the verbal noun can have this set but we write the code
-- generally.
for slot, _ in pairs(base.slot_uncertain) do
alternant_multiword_spec.slot_uncertain[slot] = true
end
end)
-- If slot is uncertain and has no value, explicitly set its value to "?".
for uncertain_slot, _ in pairs(slots_that_may_be_uncertain) do
if not alternant_multiword_spec.forms[uncertain_slot] and
alternant_multiword_spec.slot_uncertain[uncertain_slot] then
alternant_multiword_spec.forms[uncertain_slot] = {{form = "?"}}
end
end
end
-- Determine certain properties of the verb from the overall forms, such as whether the verb is active-only or
-- passive-only, is impersonal, lacks an imperative, etc.
local function determine_verb_properties_from_forms(alternant_multiword_spec)
alternant_multiword_spec.has_active = false
alternant_multiword_spec.has_passive = false
alternant_multiword_spec.has_non_impers_active = false
alternant_multiword_spec.has_non_impers_passive = false
alternant_multiword_spec.has_imp = false
alternant_multiword_spec.has_past = false
alternant_multiword_spec.has_nonpast = false
for slot, _ in pairs(alternant_multiword_spec.forms) do
if slot == "ap" or slot:find("[123]") and not slot:find("_pass") then
alternant_multiword_spec.has_active = true
end
if slot == "pp" or slot:find("[123]") and slot:find("_pass") then
alternant_multiword_spec.has_passive = true
end
if slot:find("[123]") and not slot:find("pass_[123]") and not slot:find("3ms") then
alternant_multiword_spec.has_non_impers_active = true
end
if slot:find("pass_[123]") and not slot:find("3ms") then
alternant_multiword_spec.has_non_impers_passive = true
end
if slot:find("^imp_") then
alternant_multiword_spec.has_imp = true
end
if slot:find("^past_") then
alternant_multiword_spec.has_past = true
end
if slot:find("^ind_") or slot:find("^sub_") or slot:find("^juss_") then
alternant_multiword_spec.has_nonpast = true
end
end
end
--W: The categories this used to build alongside the annotation are gone: show()
-- has not emitted them since the format_categories() return was commented out,
-- so every insert_cat() call was building a table nothing read. What is left is
-- the title-bar annotation, which is the half that reaches a reader.
local function add_annotation(alternant_multiword_spec, base, insert_ann)
-- Useful e.g. in constructing suppletive verbs out of parts. For a verb like جاء or أتى whose imperative comes
-- from the unrelated verb تعالى, we don't want the latter verb showing up in annotations.
if base.nocat then
return
end
local vform = base.verb_form
if vform ~= "none" then
insert_ann("form", vform)
--W: Add morphological pattern corresponding to the form
local morph_pattern = FORM_TO_MORPHOLOGICAL_PATTERN[vform]
if morph_pattern then
insert_ann("morph_pattern", morph_pattern)
end
end
if base.reduced then
insert_ann("reduced", "reduced")
end
for _, vowel_spec in ipairs(base.conj_vowels) do
local rad1, rad2, rad3, rad4 = get_radicals_4(vowel_spec)
local final_weak = is_final_weak(base, vowel_spec)
local weakness = vowel_spec.weakness
-- We have to distinguish weakness by form and weakness by conjugation. Weakness by form merely indicates the
-- presence of weak letters in certain positions in the radicals. Weakness by conjugation is related to how the
-- verbs are conjugated. For example, form-II verbs that are "hollow by form" (middle radical is wāw or yāʾ) are
-- conjugated as sound verbs. Another example: form-I verbs with initial wāw are "assimilated by form" and most
-- are assimilated by conjugation as well, but a few are sound by conjugation, e.g. wajuha yawjuhu "to be
-- distinguished" (rather than wajuha yajuhu); similarly for some hollow-by-form verbs in various forms, e.g.
-- form VIII izdawaja yazdawiju "to be in pairs" (rather than izdāja yazdāju). The annotation reports weakness
-- by conjugation; weakness by form was only ever distinguished by the radical categories, which are gone.
insert_ann("weakness", weakness)
end
if vform == "I" and not is_passive_only(base.passive) then
for _, vowel_spec in ipairs(base.grouped_conj_vowels) do
insert_ann("vowels",
("%s ~ %s"):format(table.concat(vowel_spec.pasts, "/"), table.concat(vowel_spec.nonpasts, "/")))
for _, past in ipairs(vowel_spec.pasts) do
for _, nonpast in ipairs(vowel_spec.nonpasts) do
if past == "-" or nonpast == "-" then
error("Internal error: Saw form I past vowel %s and non-past vowel %s but - in place of vowel should have triggered an error earlier")
end
--W: Add morphological pattern for form I based on vowels
local form_i_with_vowels = ("I/%s~%s"):format(past, nonpast)
local morph_pattern = FORM_TO_MORPHOLOGICAL_PATTERN[form_i_with_vowels]
if morph_pattern then
insert_ann("morph_pattern", morph_pattern)
end
end
end
end
end
if base.irregular then
insert_ann("irreg", "irregular")
end
end
--W: Compute the annotation displayed in the conjugation title bar. This used to
-- compute the verb's categories alongside it -- the two carry similar
-- information -- but show() stopped emitting them, so the category half was
-- building a table with no reader and has been removed.
local function compute_annotation(alternant_multiword_spec)
local ann = {}
alternant_multiword_spec.annotation = ann
ann.form = {}
ann.morph_pattern = {} --W: arabic morphological pattern corresponding to the form
ann.weakness = {}
ann.vowels = {}
ann.passive = nil
ann.reduced = {}
ann.irreg = {}
ann.defective = {}
local function insert_ann(anntype, value)
m_table.insertIfNot(alternant_multiword_spec.annotation[anntype], value)
end
iut.map_word_specs(alternant_multiword_spec, function(base)
add_annotation(alternant_multiword_spec, base, insert_ann)
end)
if alternant_multiword_spec.has_active then
if alternant_multiword_spec.has_passive and alternant_multiword_spec.has_non_impers_passive then
ann.passive = "full passive"
elseif alternant_multiword_spec.has_passive then
ann.passive = "impersonal passive"
else
ann.passive = "no passive"
end
else
if alternant_multiword_spec.has_non_impers_passive then
ann.passive = "passive-only"
else
ann.passive = "impersonal (passive-only)"
end
end
if alternant_multiword_spec.passive_uncertain then
ann.passive = ann.passive .. ' <abbr title="passive status uncertain">(?)</abbr>'
end
if alternant_multiword_spec.has_active and not alternant_multiword_spec.has_imp then
insert_ann("defective", "no imperative")
end
if not alternant_multiword_spec.has_past then
insert_ann("defective", "no past")
end
if not alternant_multiword_spec.has_nonpast then
insert_ann("defective", "no non-past")
end
local ann_parts = {}
local function insert_ann_part(part, conj)
local val = table.concat(ann[part], conj or " or ")
if val ~= "" and val ~= "regular" then
table.insert(ann_parts, val)
end
end
insert_ann_part("form")
insert_ann_part("weakness")
insert_ann_part("reduced")
insert_ann_part("vowels")
if ann.passive then
table.insert(ann_parts, ann.passive)
end
insert_ann_part("irreg")
insert_ann_part("defective", "، ")
--W: Save morph_pattern before overwriting annotation with string
alternant_multiword_spec.morph_pattern = ann.morph_pattern
alternant_multiword_spec.annotation = table.concat(ann_parts, "، ")
end
local function show_forms(alternant_multiword_spec)
local lemmas = {}
for _, slot in ipairs(export.potential_lemma_slots) do
if alternant_multiword_spec.forms[slot] then
for _, formobj in ipairs(alternant_multiword_spec.forms[slot]) do
table.insert(lemmas, formobj)
end
break
end
end
alternant_multiword_spec.lemmas = lemmas -- save for later use in make_table()
alternant_multiword_spec.vn = alternant_multiword_spec.forms.vn -- save for later use in make_table()
-- Reconstruct the original verb spec without overrides for verbal nouns and participles, since those specific slots
-- are ignored by {{ar-verb form}}. Compute this once beforehand; `transform_accel_obj` is called repeatedly on each
-- form and we don't want to compute this repeatedly.
local reconstructed_verb_spec = iut.reconstruct_original_spec(alternant_multiword_spec, {
preprocess_angle_bracket_spec = function(spec)
spec = spec:match("^<(.*)>$")
assert(spec)
local segments = put.parse_multi_delimiter_balanced_segment_run(spec, {{"[", "]"}, {"<", ">"}})
local dot_separated_groups = put.split_alternating_runs_and_strip_spaces(segments, "%.")
-- Rejoin each dot-separated group into a single string, since we aren't actually going to do any parsing
-- of bracket-bounded textual runs; then filter out overrides for verbal nouns and participles.
local filtered_indicators = {}
for _, dot_separated_group in ipairs(dot_separated_groups) do
local indicator = table.concat(dot_separated_group)
-- FIXME: Do we want to filter out any other indicators?
if not (indicator:find("^vn:") or indicator:find("^[ap]p:")) then
table.insert(filtered_indicators, indicator)
end
end
return ("<%s>"):format(table.concat(filtered_indicators, "."))
end,
})
-- If we're dealing with a single word, no alternants and a single verb form, use the auto-conjugation-fetching
-- variant.
local reconstructed_lemma, inside = reconstructed_verb_spec:match("^([^ <>()]+)(%b<>)$")
if inside and alternant_multiword_spec.verb_forms[1] and not alternant_multiword_spec.verb_forms[2] then
reconstructed_verb_spec = ("+%s<%s>"):format(reconstructed_lemma, alternant_multiword_spec.verb_forms[1])
end
local function transform_accel_obj(slot, formobj, accel_obj)
if not accel_obj then
return accel_obj
end
if slot == "ap" or slot == "pp" or slot == "vn" then
-- FIXME: [[Module:accel]] can't correctly handle more than one verb form for participles and verbal nouns
accel_obj.form = slot .. "-" .. table.concat(alternant_multiword_spec.verb_forms, "،")
else
accel_obj.form = "verb-form-" .. reconstructed_verb_spec
end
return accel_obj
end
local function generate_link(data)
local form = data.form
local term = form.formval_for_link
local alt = form.alt
if term == "?" then
term = nil
alt = "?"
end
--W: Create simple link for verb forms without #Arabic anchor
local display = alt or term
local link
if display then
link = link_term_simple(display)
else
link = ""
end
link = link .. iut.get_footnote_text(form.footnotes, data.footnote_obj)
--W: qualifier/label rendering removed along with the q/qq/l/ll modifiers;
-- it required [[Module:pron qualifier]], absent on ar.wiktionary.
return link
end
local props = {
lang = lang,
lemmas = lemmas,
transform_accel_obj = transform_accel_obj,
generate_link = generate_link,
slot_list = alternant_multiword_spec.verb_slots,
include_translit = false,
}
iut.show_forms(alternant_multiword_spec.forms, props)
end
--W: Tatweel and the invisible direction/joining marks survive copy-paste and
-- MediaWiki keeps them in page titles, so strip them from both sides before
-- comparing a |بؤرة= value against a generated form.
local FOCUS_IGNORE = "[" .. u(0x0640) .. u(0x061C) .. u(0x200B) .. "-" .. u(0x200F)
.. u(0x202A) .. "-" .. u(0x202E) .. u(0xFEFF) .. "]"
local function normalize_for_focus(s)
return (rsub(s, FOCUS_IGNORE, ""))
end
--W: Which slots hold `focus`? Must run before show_forms() turns the form
-- lists into rendered wikitext.
local function find_focus_slots(alternant_multiword_spec, focus)
if not focus or focus == "" then
return nil
end
local target = normalize_for_focus(focus)
local slots = {}
for slot, forms in pairs(alternant_multiword_spec.forms) do
if type(forms) == "table" then
for _, formobj in ipairs(forms) do
if type(formobj) == "table" and formobj.form
and normalize_for_focus(formobj.form) == target then
slots[slot] = true
break
end
end
end
end
return slots
end
--W: 'yes' unless |موسع= asked for the table open. [[Template:inflection-table-top]]
-- turns any non-empty |tall= into the mw-collapsed class.
local function collapsed_arg(alternant_multiword_spec)
if alternant_multiword_spec.expanded then
return nil
end
return 'yes'
end
--W: Put the marker class on the cell itself rather than on a span around its
-- contents, so the highlight covers the whole cell instead of hugging the word.
-- Runs on the table wikitext below, before m_string_utilities.format() fills the
-- {slot} placeholders in. Every form cell in either table has one of two shapes:
--
-- | {past_1s} -> | class="avf-focus" | {past_1s}
-- | rowspan="2" | {past_1s} -> | rowspan="2" class="avf-focus" | {past_1s}
--
-- Styled by [[Template:ar-verb-form/style.css]] (.inflection-table td.avf-focus).
local function mark_focus_cells(text, focus_slots)
if not focus_slots then
return text
end
return (rsub(text, "\n(|[^\n]*)", function(cell)
local slot = rmatch(cell, "^|%s*{([%w_]+)}%s*$")
if slot then
if focus_slots[slot] then
return '\n| class="avf-focus" | {' .. slot .. "}"
end
return nil
end
local attrs
attrs, slot = rmatch(cell, "^|%s*(.-)%s*|%s*{([%w_]+)}%s*$")
if slot and focus_slots[slot] then
return "\n| " .. attrs .. ' class="avf-focus" | {' .. slot .. "}"
end
return nil
end))
end
-------------------------------------------------------------------------------
-- Functions to create inflection tables --
-------------------------------------------------------------------------------
-- Make the conjugation table. Called from export.show().
local function make_table(alternant_multiword_spec)
local text = mw.getCurrentFrame():expandTemplate{
title = 'inflection-table-top',
args = {
title = 'تصريف {title}',
--W: |tall= is what puts mw-collapsed on the wrapper. |موسع= drops it.
-- (Not `expanded and nil or 'yes'` — in Lua that is always 'yes'.)
tall = collapsed_arg(alternant_multiword_spec),
palette = 'green',
category = 'conjugation',
class = 'tr-alongside', -- temp hack to prevent extra line break
}
}
text = text .. [=[
! colspan="6" | <<الْمَصْدَر>>
| colspan="7" | {vn}
]=]
if alternant_multiword_spec.has_active then
text = text .. [=[
|-
! colspan="6" | <<اِسْم الْفَاعِل>>
| colspan="7" | {ap}
]=]
end
if alternant_multiword_spec.has_passive then
text = text .. [=[
|-
! colspan="6" | <<اِسْم الْمَفْعُول>>
| colspan="7" | {pp}
]=]
end
text = text .. [=[
|-
! colspan="999" class="separator" |
]=]
if alternant_multiword_spec.has_active then
text = text .. [=[
|-
! colspan="12" class="outer" | <<الْفِعْل الْمَعْلُوم>>
|-
! colspan="2" |
! colspan="3" | <<الْمُفْرَد>>
! rowspan="12" class="separator" |
! colspan="2" | <<الْمُثَنَّى>>
! rowspan="12" class="separator" |
! colspan="3"| <<الْجَمْع>>
|-
! colspan="2"|
! <<الْمُتَكَلِّم>>
! <<الْمُخَاطَب>>
! <<الْغَائِب>>
! <<الْمُخَاطَب>>
! <<الْغَائِب>>
! <<الْمُتَكَلِّم>>
! <<الْمُخَاطَب>>
! <<الْغَائِب>>
|-
! rowspan="2" | <<الْمَاضِي>>
! class="secondary" | المذكر
| rowspan="2" | {past_1s}
| {past_2ms}
| {past_3ms}
| rowspan="2" | {past_2d}
| {past_3md}
| rowspan="2" | {past_1p}
| {past_2mp}
| {past_3mp}
|-
! class="secondary" | المؤنث
| {past_2fs}
| {past_3fs}
| {past_3fd}
| {past_2fp}
| {past_3fp}
|-
! rowspan="2" | <<الْمُضَارِع الْمَرْفُوع>>
! class="secondary" | المذكر
| rowspan="2" | {ind_1s}
| {ind_2ms}
| {ind_3ms}
| rowspan="2" | {ind_2d}
| {ind_3md}
| rowspan="2" | {ind_1p}
| {ind_2mp}
| {ind_3mp}
|-
! class="secondary" | المؤنث
| {ind_2fs}
| {ind_3fs}
| {ind_3fd}
| {ind_2fp}
| {ind_3fp}
|-
! rowspan="2" | <<الْمُضَارِع الْمَنْصُوب>>
! class="secondary" | المذكر
| rowspan="2" | {sub_1s}
| {sub_2ms}
| {sub_3ms}
| rowspan="2" | {sub_2d}
| {sub_3md}
| rowspan="2" | {sub_1p}
| {sub_2mp}
| {sub_3mp}
|-
! class="secondary" | المؤنث
| {sub_2fs}
| {sub_3fs}
| {sub_3fd}
| {sub_2fp}
| {sub_3fp}
|-
! rowspan="2" | <<الْمُضَارِع الْمَجْزُوم>>
! class="secondary" | المذكر
| rowspan="2" | {juss_1s}
| {juss_2ms}
| {juss_3ms}
| rowspan="2" | {juss_2d}
| {juss_3md}
| rowspan="2" | {juss_1p}
| {juss_2mp}
| {juss_3mp}
|-
! class="secondary" | المؤنث
| {juss_2fs}
| {juss_3fs}
| {juss_3fd}
| {juss_2fp}
| {juss_3fp}
|-
! rowspan="2" | <<الْأَمْر>>
! class="secondary" | المذكر
| rowspan="2" |
| {imp_2ms}
| rowspan="2" |
| rowspan="2" | {imp_2d}
| rowspan="2" |
| rowspan="2" |
| {imp_2mp}
| rowspan="2" |
|-
! class="secondary" | المؤنث
| {imp_2fs}
| {imp_2fp}
]=]
end
if alternant_multiword_spec.has_passive then
text = text .. [=[
|-
! colspan="999" class="separator" |
|-
! colspan="12" class="outer" | <<الْفِعْل الْمَجْهُول>>
|-
! colspan="2" |
! colspan="3" | <<الْمُفْرَد>>
! rowspan="10" class="separator" |
! colspan="2" | <<الْمُثَنَّى>>
! rowspan="10" class="separator" |
! colspan="3" | <<الْجَمْع>>
|-
! colspan="2" |
! <<الْمُتَكَلِّم>>
! <<الْمُخَاطَب>>
! <<الْغَائِب>>
! <<الْمُخَاطَب>>
! <<الْغَائِب>>
! <<الْمُتَكَلِّم>>
! <<الْمُخَاطَب>>
! <<الْغَائِب>>
|-
! rowspan="2" | <<الْمَاضِي>>
! class="secondary" | المذكر
| rowspan="2" | {past_pass_1s}
| {past_pass_2ms}
| {past_pass_3ms}
| rowspan="2" | {past_pass_2d}
| {past_pass_3md}
| rowspan="2" | {past_pass_1p}
| {past_pass_2mp}
| {past_pass_3mp}
|-
! class="secondary" | المؤنث
| {past_pass_2fs}
| {past_pass_3fs}
| {past_pass_3fd}
| {past_pass_2fp}
| {past_pass_3fp}
|-
! rowspan="2" | <<الْمُضَارِع الْمَرْفُوع>>
! class="secondary" | المذكر
| rowspan="2" | {ind_pass_1s}
| {ind_pass_2ms}
| {ind_pass_3ms}
| rowspan="2" | {ind_pass_2d}
| {ind_pass_3md}
| rowspan="2" | {ind_pass_1p}
| {ind_pass_2mp}
| {ind_pass_3mp}
|-
! class="secondary" | المؤنث
| {ind_pass_2fs}
| {ind_pass_3fs}
| {ind_pass_3fd}
| {ind_pass_2fp}
| {ind_pass_3fp}
|-
! rowspan="2" | <<الْمُضَارِع الْمَنْصُوب>>
! class="secondary" | المذكر
| rowspan="2" | {sub_pass_1s}
| {sub_pass_2ms}
| {sub_pass_3ms}
| rowspan="2" | {sub_pass_2d}
| {sub_pass_3md}
| rowspan="2" | {sub_pass_1p}
| {sub_pass_2mp}
| {sub_pass_3mp}
|-
! class="secondary" | المؤنث
| {sub_pass_2fs}
| {sub_pass_3fs}
| {sub_pass_3fd}
| {sub_pass_2fp}
| {sub_pass_3fp}
|-
! rowspan="2" | <<الْمُضَارِع الْمَجْزُوم>>
! class="secondary" | المذكر
| rowspan="2" | {juss_pass_1s}
| {juss_pass_2ms}
| {juss_pass_3ms}
| rowspan="2" | {juss_pass_2d}
| {juss_pass_3md}
| rowspan="2" | {juss_pass_1p}
| {juss_pass_2mp}
| {juss_pass_3mp}
|-
! class="secondary" | المؤنث
| {juss_pass_2fs}
| {juss_pass_3fs}
| {juss_pass_3fd}
| {juss_pass_2fp}
| {juss_pass_3fp}
]=]
end
text = text .. mw.getCurrentFrame():expandTemplate{
title = 'inflection-table-bottom',
args = {
notes = '{footnote}',
}
}
local forms = alternant_multiword_spec.forms
if not alternant_multiword_spec.lemmas then
forms.title = "—"
else
local linked_lemmas = {}
for _, form in ipairs(alternant_multiword_spec.lemmas) do
--W: Create simple link for lemmas without #Arabic anchor
-- table.insert(linked_lemmas, link_term(form.form, "term"))
table.insert(linked_lemmas, link_term_simple(form.form))
end
forms.title = table.concat(linked_lemmas, "، ")
end
local ann_parts = {}
if alternant_multiword_spec.annotation ~= "" then
table.insert(ann_parts, alternant_multiword_spec.annotation)
end
if alternant_multiword_spec.vn then
local linked_vns = {}
for _, form in ipairs(alternant_multiword_spec.vn) do
table.insert(linked_vns, link_term(form.form, "term"))
end
table.insert(ann_parts, (#linked_vns > 1 and "verbal nouns" or "verbal noun") .. " " ..
table.concat(linked_vns, "، "))
end
local annotation = table.concat(ann_parts, "، ")
--W: use only arabic morphological pattern in title annotation
local morph_patterns = alternant_multiword_spec.morph_pattern
if morph_patterns and #morph_patterns > 0 then
annotation = table.concat(morph_patterns, "، ")
forms.title = forms.title .. " (" .. annotation .. ")"
end
-- Format the table.
text = mark_focus_cells(text, alternant_multiword_spec.focus_slots)
local tagged_table = rsub(text, "<<(.-)>>", tag_text)
return m_string_utilities.format(tagged_table, forms)
end
-- Helper function to get root letters and verb classification for simplified table header
-- Returns: root_display (e.g., "ح س ب"), verb_type (e.g., "فعل ثلاثي صحيح سالم")
local function get_verb_info(alternant_multiword_spec)
local root_display = ""
local verb_type = "فعل"
local rad1, rad2, rad3, rad4
-- Extract radicals from the base word spec using iut.map_word_specs
-- This accesses the radicals directly from the parsed verb specification
iut.map_word_specs(alternant_multiword_spec, function(base)
-- Get radicals from the first conjugation vowel spec
if base.conj_vowels and #base.conj_vowels > 0 then
local vowel_spec = base.conj_vowels[1]
-- Extract radicals, handling both table and string types
local function extract_radical(rad)
if type(rad) == "table" then
-- If it's a table, get the first element or the string representation
return rad[1] or rget(rad)
else
return rad
end
end
rad1 = extract_radical(vowel_spec.rad1)
rad2 = extract_radical(vowel_spec.rad2)
rad3 = extract_radical(vowel_spec.rad3)
rad4 = vowel_spec.rad4 and extract_radical(vowel_spec.rad4)
end
end)
-- Get basic/derived classification from morphological pattern
local basic_deriv
if alternant_multiword_spec.morph_pattern and #alternant_multiword_spec.morph_pattern > 0 then
local morph_pattern = alternant_multiword_spec.morph_pattern[1]
basic_deriv = MORPHOLOGICAL_PATTERN_TO_BASIC_DERIV[morph_pattern]
end
-- Format root display with spaces between letters
if rad1 and rad2 and rad3 then
if rad4 then
-- Quadrilateral
root_display = rad1 .. " " .. rad2 .. " " .. rad3 .. " " .. rad4
verb_type = "فعل رباعي"
if basic_deriv then
verb_type = verb_type .. " " .. basic_deriv
end
else
-- triliteral
root_display = rad1 .. " " .. rad2 .. " " .. rad3
verb_type = "فعل ثلاثي"
if basic_deriv then
verb_type = verb_type .. " " .. basic_deriv
if basic_deriv == "مُجرَّد" then
--W: the classification concerns only triliteral basic verbs (الثلاثي المُجرَّد)
local classification = export.classify_triliteral_verb(rad1, rad2, rad3)
verb_type = verb_type .. " " .. classification
end
end
end
end
return root_display, verb_type
end
-- Make simplified conjugation table for ar.wiktionary. Called from export.show().
-- This table shows only past, present indicative, and imperative forms.
-- No passive voice, no participles, no verbal nouns.
local function make_table_ar(alternant_multiword_spec)
local text = mw.getCurrentFrame():expandTemplate{
title = 'inflection-table-top',
args = {
title = 'تصريف {title}',
--W: |tall= is what puts mw-collapsed on the wrapper. |موسع= drops it.
-- (Not `expanded and nil or 'yes'` — in Lua that is always 'yes'.)
tall = collapsed_arg(alternant_multiword_spec),
palette = 'green',
category = 'conjugation',
class = 'tr-alongside', -- temp hack to prevent extra line break
}
}
-- Get verb root and classification
local root_display, verb_type = get_verb_info(alternant_multiword_spec)
-- First row: Root and verb type spanning all columns
text = text .. "! colspan=\"2\" | <<الجذر>>: " .. root_display .. "\n"
text = text .. "| colspan=\"3\" | <<'''" .. verb_type .. "'''>>\n"
text = text .. [=[
|-
! colspan="2" | <<الضمائر>>
! <<الماضي>>
! <<المضارع>>
! <<الأمر>>
|-
! rowspan="2" | <<المتكلّم>>
| <<أنا>>
| {past_1s}
| {ind_1s}
|
|-
| <<نحن>>
| {past_1p}
| {ind_1p}
|
|-
! rowspan="5" | <<المخاطب>>
| <<أنتَ>>
| {past_2ms}
| {ind_2ms}
| {imp_2ms}
|-
| <<أنتِ>>
| {past_2fs}
| {ind_2fs}
| {imp_2fs}
|-
| <<أنتما>>
| {past_2d}
| {ind_2d}
| {imp_2d}
|-
| <<أنتم>>
| {past_2mp}
| {ind_2mp}
| {imp_2mp}
|-
| <<أنتنّ>>
| {past_2fp}
| {ind_2fp}
| {imp_2fp}
|-
! rowspan="6" | <<الغائب>>
| <<هو>>
| {past_3ms}
| {ind_3ms}
|
|-
| <<هي>>
| {past_3fs}
| {ind_3fs}
|
|-
| <<هما>>
| {past_3md}
| {ind_3md}
|
|-
| <<هما>>
| {past_3fd}
| {ind_3fd}
|
|-
| <<هم>>
| {past_3mp}
| {ind_3mp}
|
|-
| <<هنّ>>
| {past_3fp}
| {ind_3fp}
|
]=]
text = text .. mw.getCurrentFrame():expandTemplate{
title = 'inflection-table-bottom',
args = {
notes = '{footnote}',
}
}
local forms = alternant_multiword_spec.forms
if not alternant_multiword_spec.lemmas then
forms.title = "—"
else
local linked_lemmas = {}
for _, form in ipairs(alternant_multiword_spec.lemmas) do
--W: Create simple link for lemmas without #Arabic anchor
-- table.insert(linked_lemmas, link_term(form.form, "term"))
table.insert(linked_lemmas, link_term_simple(form.form))
end
forms.title = table.concat(linked_lemmas, "، ")
end
local ann_parts = {}
if alternant_multiword_spec.annotation ~= "" then
table.insert(ann_parts, alternant_multiword_spec.annotation)
end
local annotation = table.concat(ann_parts, "، ")
--W: use only arabic morphological pattern in title annotation
local morph_patterns = alternant_multiword_spec.morph_pattern
if morph_patterns and #morph_patterns > 0 then
annotation = table.concat(morph_patterns, "، ")
forms.title = forms.title .. " (" .. annotation .. ")"
end
-- Format the table.
text = mark_focus_cells(text, alternant_multiword_spec.focus_slots)
local tagged_table = rsub(text, "<<(.-)>>", tag_text)
return m_string_utilities.format(tagged_table, forms)
end
-------------------------------------------------------------------------------
-- Verb classification functions --
-------------------------------------------------------------------------------
--[=[
تصنيف الفعل الثلاثي المُجرَّد حسب نوعه
Classify an Arabic triliteral basic verb root based on its three letters.
@param r1 الحرف الأول (first root letter - الفاء)
@param r2 الحرف الثاني (second root letter - العين)
@param r3 الحرف الثالث (third root letter - اللام)
@return str: نوع الفعل (verb type classification in Arabic)
Examples:
classify_triliteral_verb('ك', 'ت', 'ب') --> 'صحيح سالم'
classify_triliteral_verb('أ', 'ت', 'ي') --> 'معتل ناقص يائي مهموز الفاء'
classify_triliteral_verb('ق', 'ل', 'و') --> 'معتل ناقص واوي'
]=]
function export.classify_triliteral_verb(r1, r2, r3)
-- تعريف أحرف العلة والهمزة
-- الحروف الضعيفة (أحرف العلة): واو وياء فقط
local weak_letters = {[W] = true, [Y] = true}
-- الهمزة: جميع أشكال الهمزة (ء، أ، إ، ؤ، ئ)
local hamza_letters = {
[HAMZA] = true, -- ء
[HAMZA_ON_ALIF] = true, -- أ
[HAMZA_UNDER_ALIF] = true, -- إ
[HAMZA_ON_W] = true, -- ؤ
[HAMZA_ON_Y] = true -- ئ
}
-- فحص كل حرف
local is_hamza = {hamza_letters[r1] or false, hamza_letters[r2] or false, hamza_letters[r3] or false}
local is_weak = {weak_letters[r1] or false, weak_letters[r2] or false, weak_letters[r3] or false}
-- عدد أحرف العلة
local weak_count = (is_weak[1] and 1 or 0) + (is_weak[2] and 1 or 0) + (is_weak[3] and 1 or 0)
-- فحص التضعيف (الحرف الثاني = الثالث)
local is_doubled = (r2 == r3)
-- ═══════════════════════════════════════════════════════════
-- المُعتل: الفعل الذي يحتوي على حرف أو أكثر من أحرف العلة
-- ═══════════════════════════════════════════════════════════
if weak_count > 0 then
-- ─────────────────────────────────────────────────────
-- لفيف: يحتوي على حرفين أو أكثر من أحرف العلة
-- ─────────────────────────────────────────────────────
if weak_count >= 2 then
-- مقرون: حرفا العلة متجاوران
if is_weak[2] and is_weak[3] then -- الثاني والثالث
--W: المُضعَّف يُفحَص أولا: جذر مثل حيي حرفا علته متماثلان، فهو لفيف
-- مقرون مُضعَّف، وهذا أخصُّ من المقرون المُجرَّد. Paper 1's ids 38
-- and 39. This test used to be missing altogether, so حيي and عيي
-- came back as plain conjoined and tests/classify_test.lua carried
-- a GEMINATED_CONJOINED_IDS exemption to say so.
if is_doubled then
if r2 == W then
return "معتل لفيف مقرون مُضعَّف واوي"
end
return "معتل لفيف مقرون مُضعَّف يائي"
end
if is_hamza[1] then
return "معتل لفيف مقرون مهموز الفاء"
end
return "معتل لفيف مقرون"
elseif is_weak[1] and is_weak[2] then -- الأول والثاني
return "معتل لفيف مقرون"
-- مفروق: الأول والثالث حرفا علة
elseif is_weak[1] and is_weak[3] then
if is_hamza[2] then
return "معتل لفيف مفروق مهموز العين"
end
return "معتل لفيف مفروق"
end
-- ─────────────────────────────────────────────────────
-- مثال: الحرف الأول حرف علة
-- ─────────────────────────────────────────────────────
elseif is_weak[1] then
if r1 == W then -- واوي
if is_hamza[3] then
return "معتل مثال واوي مهموز اللام"
elseif is_doubled then
return "معتل مثال واوي مُضعَّف"
elseif is_hamza[2] then
return "معتل مثال واوي مهموز العين"
end
return "معتل مثال واوي"
else -- يائي (ي)
if is_doubled then
return "معتل مثال يائي مُضعَّف"
elseif is_hamza[2] then
return "معتل مثال يائي مهموز العين"
end
return "معتل مثال يائي"
end
-- ─────────────────────────────────────────────────────
-- أجوف: الحرف الثاني حرف علة
-- ─────────────────────────────────────────────────────
elseif is_weak[2] then
if r2 == W then -- واوي
if is_hamza[3] then
return "معتل أجوف واوي مهموز اللام"
elseif is_hamza[1] then
return "معتل أجوف واوي مهموز الفاء"
end
return "معتل أجوف واوي"
else -- يائي (ي)
if is_hamza[3] then
return "معتل أجوف يائي مهموز اللام"
elseif is_hamza[1] then
return "معتل أجوف يائي مهموز الفاء"
end
return "معتل أجوف يائي"
end
-- ─────────────────────────────────────────────────────
-- ناقص: الحرف الثالث حرف علة
-- ─────────────────────────────────────────────────────
elseif is_weak[3] then
if r3 == W then -- واوي
if is_hamza[1] then
return "معتل ناقص واوي مهموز الفاء"
elseif is_hamza[2] then
return "معتل ناقص واوي مهموز العين"
end
return "معتل ناقص واوي"
else -- يائي (ي)
if is_hamza[1] then
return "معتل ناقص يائي مهموز الفاء"
elseif is_hamza[2] then
return "معتل ناقص يائي مهموز العين"
end
return "معتل ناقص يائي"
end
end
-- ═══════════════════════════════════════════════════════════
-- الصحيح: الفعل الذي لا يحتوي على أحرف العلة
-- ═══════════════════════════════════════════════════════════
else
-- ─────────────────────────────────────────────────────
-- مهموز: يحتوي على همزة
-- ─────────────────────────────────────────────────────
if is_hamza[1] or is_hamza[2] or is_hamza[3] then
-- مهموز الفاء واللام: الأول والثالث همزة
if is_hamza[1] and is_hamza[3] then
return "صحيح مهموز الفاء واللام"
-- مهموز الفاء
elseif is_hamza[1] then
if is_doubled then
return "صحيح مُضعَّف مهموز الفاء"
end
return "صحيح مهموز الفاء"
-- مهموز العين
elseif is_hamza[2] then
return "صحيح مهموز العين"
-- مهموز اللام
elseif is_hamza[3] then
return "صحيح مهموز اللام"
end
-- ─────────────────────────────────────────────────────
-- مُضعَّف: الحرف الثاني = الثالث
-- ─────────────────────────────────────────────────────
elseif is_doubled then
return "صحيح مُضعَّف"
-- ─────────────────────────────────────────────────────
-- سالم: لا همزة، لا حرف علة، لا تضعيف
-- ─────────────────────────────────────────────────────
else
return "صحيح سالم"
end
end
return "غير معروف"
end
-------------------------------------------------------------------------------
-- External entry points --
-------------------------------------------------------------------------------
--W: Normalize root to use underscores as separators
-- Accepts: "كتب", "ك_ت_ب", or "ك ت ب"
-- Returns: "ك_ت_ب"
local function normalize_root(root)
if not root then
return nil
end
-- Helper function to normalize a single character/radical
local function normalize_char(char)
-- Convert all hamza variants to canonical bare hamza
if char == HAMZA_ON_ALIF or char == HAMZA_UNDER_ALIF or
char == HAMZA_ON_W or char == HAMZA_ON_Y then
return HAMZA
-- Convert alif maqṣūra to yaa (ى → ي)
elseif char == AMAQ then
return Y
-- Reject alif - it's not a root radical
elseif char == ALIF then
error("Root contains alif (ا) which is not a valid root radical. For weak verbs, use و (waw) or ي (yaa) instead.")
end
return char
end
-- Convert alif madda to hamza + alif for processing (will be caught as error below)
root = root:gsub(AMAD, HAMZA .. ALIF)
-- Replace spaces with underscores
root = root:gsub(" ", "_")
-- If no underscores yet, insert them between each character
if not root:find("_") then
-- Extract only Arabic letters (excluding diacritics)
-- Arabic letter range: U+0621 to U+064A (basic letters)
local chars = {}
for char in mw.ustring.gmatch(root, "[ء-ي]") do
table.insert(chars, normalize_char(char))
end
root = table.concat(chars, "_")
else
-- Root already has underscores (e.g., "أ_م_ن"), normalize each radical
local parts = mw.text.split(root, "_")
for i, part in ipairs(parts) do
parts[i] = normalize_char(part)
end
root = table.concat(parts, "_")
end
return root
end
--W: Construct the [1] parameter from root (جذر) and morphological pattern (وزن)
-- Example:
-- input: root="كتب", pattern="فعَل يفعُل"
-- output: "ك_ت_ب<I/a~u>"
-- `force_full_passive`, if true, appends ".pass" so the verb gets a full personal
-- passive paradigm instead of the module's default impersonal-passive guess for
-- vforms like I (past vowel i), V, VI, X and IIq (see |مبني للمجهول= on {{ar-conj}}).
-- `reduced`, if true, appends ".reduced" so an affix consonant assimilates into the
-- radical beside it: forms V/VI use the assimilated تاء التفعّل prefix (اِسَّمَّعَ)
-- instead of the default تَ- prefix (تَسَمَّعَ), and form IIIq assimilates اِفْعَنْلَلَ's
-- نون into a weak ل1 (اِهْبَيَّخَ for اِهْبَنْيَخَ) -- see |مدغم= on {{ar-conj}}. Not every
-- root with an assimilable radical is necessarily attested with the assimilated form, so
-- this isn't inferred automatically from the root; it must be requested.
local function construct_verb_spec(root, pattern, force_full_passive, reduced)
if not root or not pattern then
return nil
end
local normalized_root = normalize_root(root)
local form_code = MORPHOLOGICAL_PATTERN_TO_FORM[pattern]
if not form_code then
error("Unknown morphological pattern (وزن صرفي): " .. pattern)
end
if force_full_passive then
form_code = form_code .. ".pass"
end
if reduced then
form_code = form_code .. ".reduced"
end
return normalized_root .. "<" .. form_code .. ">"
end
-- Wrapper function that accepts جذر (root) and وزن (pattern) as parameters
-- Returns: verb_type (e.g., "فعل ثلاثي مُجرَّد صحيح سالم")
-- Example: export.get_verb_type({["جذر"] = "كتب", ["وزن"] = "فعَل يفعُل"})
function export.get_verb_type(args)
local verb_spec
if args["جذر"] and args["وزن"] then
verb_spec = construct_verb_spec(args["جذر"], args["وزن"])
elseif args[1] then
verb_spec = args[1]
else
error("Must provide either جذر and وزن, or a verb specification in args[1]")
end
local alternant_multiword_spec = export.do_generate_forms({[1] = verb_spec})
local _, verb_type = get_verb_info(alternant_multiword_spec)
return verb_type
end
-- Append two lists `l1` and `l2`, removing duplicates. If either is {nil}, just return the other.
local function combine_lists(l1, l2)
-- combine_footnotes() does exactly what we want.
return iut.combine_footnotes(l1, l2)
end
local function combine_metadata(data)
local src1 = data.form1
local src2 = data.form2
local dest = data.dest_form
dest.uncertain = src1.uncertain or src2.uncertain
if src1.genders and src2.genders and not m_table.deepEquals(src1.genders, src2.genders) then
-- do nothing
else
dest.genders = src1.genders or src2.genders
end
if src1.pos and src2.pos and src1.pos ~= src2.pos then
-- do nothing
else
dest.pos = src1.pos or src2.pos
end
-- Don't copy .alt, .gloss, .lit, .id, which describe a single term and don't extend to multiword terms.
dest.q = combine_lists(src1.q, src2.q)
dest.qq = combine_lists(src1.qq, src2.qq)
dest.l = combine_lists(src1.l, src2.l)
dest.ll = combine_lists(src1.ll, src2.ll)
end
-- Externally callable function to parse and conjugate a verb given user-specified arguments.
-- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms`
-- for each slot. If there are no values for a slot, the slot key will be missing. The value
-- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms(args, source_template, headword_head)
local PAGENAME = mw.loadData("Module:headword/data").pagename
local function in_template_space()
local nsText = mw.title.getCurrentTitle().nsText
return nsText == "Template" or nsText == "قالب"
end
-- Determine the verb spec we're being asked to generate the conjugation of. This may be taken from the current page
-- title or the value of |pagename=; but not when called from {{ar-verb form}}, where the page title is a
-- non-lemma form. Note that the verb spec may omit the lemma; e.g. it may be "<II>". For this reason, we use the
-- value of `pagename` computed here down below, when calling normalize_all_lemmas().
local pagename = source_template ~= "ar-verb form" and args.pagename or PAGENAME
local head = headword_head or pagename
--W: If both root (جذر) and morphological pattern (وزن) are provided, construct [1]
if args["جذر"] and args["جذر"] ~= "" and args["وزن"] and args["وزن"] ~= "" then
local constructed = construct_verb_spec(args["جذر"], args["وزن"], args["مبني للمجهول"], args["مدغم"])
if constructed and constructed ~= "" then
args[1] = constructed
end
end
local arg1 = args[1]
if not arg1 then
if (pagename == "ar-conj" or pagename == "ar-verb" or pagename == "ar-verb form" or pagename == "تصريف") and in_template_space() then
arg1 = "كتب<I/a~u.pass>"
else
arg1 = "<>"
end
end
-- When called from {{ar-verb form}}, determine the non-lemma form whose inflections we're being asked to
-- determine. This normally comes from the page title or the value of |pagename=.
local verb_form_of_form
if source_template == "ar-verb form" then
verb_form_of_form = args.pagename
if not verb_form_of_form then
if PAGENAME == "ar-verb form" and in_template_space() then
verb_form_of_form = "كتبت"
else
verb_form_of_form = PAGENAME
end
end
end
local incorporated_headword_head_into_lemma = false
if arg1:find("^<.*>$") then -- missing lemma
if head:find(" ") then
-- If multiword lemma, try to add arg spec after the first word.
-- Try to preserve the brackets in the part after the verb, but don't do it
-- if there aren't the same number of left and right brackets in the verb
-- (which means the verb was linked as part of a larger expression).
local first_word, post = rmatch(head, "^(.-)( .*)$")
local left_brackets = rsub(first_word, "[^%[]", "")
local right_brackets = rsub(first_word, "[^%]]", "")
if #left_brackets == #right_brackets then
arg1 = iut.remove_redundant_links(first_word) .. arg1 .. post
incorporated_headword_head_into_lemma = true
else
-- Try again using the form without links.
local linkless_head = m_links.remove_links(head)
if linkless_head:find(" ") then
first_word, post = rmatch(linkless_head, "^(.-)( .*)$")
arg1 = first_word .. arg1 .. post
else
error("Unable to incorporate <...> spec into explicit head due to a multiword linked verb or " ..
"unbalanced brackets; please include <> explicitly: " .. arg1)
end
end
else
-- Will be incorporated through `head` below in the call to normalize_all_lemmas().
incorporated_headword_head_into_lemma = true
end
end
local parse_props = {
parse_indicator_spec = parse_indicator_spec,
angle_brackets_omittable = true,
allow_blank_lemma = true,
}
local alternant_multiword_spec = iut.parse_inflected_text(arg1, parse_props)
alternant_multiword_spec.pos = pos or "verbs"
alternant_multiword_spec.args = args
alternant_multiword_spec.source_template = source_template
alternant_multiword_spec.verb_form_of_form = verb_form_of_form
alternant_multiword_spec.incorporated_headword_head_into_lemma = incorporated_headword_head_into_lemma
normalize_all_lemmas(alternant_multiword_spec, head)
detect_all_indicator_specs(alternant_multiword_spec)
local inflect_props = {
lang = lang,
slot_list = alternant_multiword_spec.verb_slots,
inflect_word_spec = conjugate_verb,
combine_metadata = combine_metadata,
-- We add links around the generated verbal forms rather than allow the entire multiword
-- expression to be a link, so ensure that user-specified links get included as well.
include_user_specified_links = true,
}
iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props)
if debug_translit then
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
if form.translit then
local full_form_translit = (lang:transliterate(m_links.remove_links(form.form)))
if full_form_translit ~= form.translit then
error(("Internal error: For slot '%s', form '%s' incremental translit '%s' not same as full translit '%s'"):
format(slot, form.form, form.translit, full_form_translit))
end
end
form.form = iut.remove_redundant_links(form.form)
end
end
end
-- Remove redundant brackets around entire forms.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = iut.remove_redundant_links(form.form)
end
end
-- Apply NFC-style normalization: reorder shadda+vowel to vowel+shadda
-- to match MediaWiki's automatic NFC normalization (which is applied on enwiktionary
-- but not in local Lua environments). This reverses the postprocessing step.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = apply_nfc_shadda(form.form)
end
end
determine_slot_uncertainty_from_forms(alternant_multiword_spec)
determine_verb_properties_from_forms(alternant_multiword_spec)
compute_annotation(alternant_multiword_spec)
if args.json and source_template == "ar-conj" then
-- There is a circular reference in `base.alternant_multiword_spec`, which points back to top level.
iut.map_word_specs(alternant_multiword_spec, function(base)
base.alternant_multiword_spec = nil
end)
return require("Module:JSON").toJSON(alternant_multiword_spec)
end
return alternant_multiword_spec
end
-- Entry point for {{ar-conj}}. Template-callable function to parse and conjugate a verb given
-- user-specified arguments and generate a displayable table of the conjugated forms.
function export.show(frame)
local parent_args = frame:getParent() and frame:getParent().args or frame.args --W
local params = {
[1] = {},
["noautolinktext"] = {type = "boolean"},
["noautolinkverb"] = {type = "boolean"},
["t"] = {}, -- for use by {{ar-verb form}}; otherwise ignored
["id"] = {}, -- for use by {{ar-verb form}}; otherwise ignored
["pagename"] = {}, -- for testing/documentation pages
["json"] = {type = "boolean"}, -- for bot use
--W: additional parameters for ar.wiktionary.org
["جذر"] = {type = "string"}, --W: الجذر اللغوي, root
["وزن"] = {type = "string"}, --W: الوزن الصرفي, morphological pattern
["مبني للمجهول"] = {type = "boolean"}, --W: force a full personal passive paradigm,
-- overriding the default impersonal-passive guess for vforms like I (past vowel
-- i), V, VI, X and IIq
["مدغم"] = {type = "boolean"}, --W: assimilate the affix into the radical beside it:
-- forms V/VI's تاء التفعّل into the first radical (اِسَّمَّعَ instead of
-- تَسَمَّعَ), or form IIIq's نون into a weak ل1 (اِهْبَيَّخَ for اِهْبَنْيَخَ)
["كامل"] = {type = "boolean"}, --W: show full table (default is simplified table)
["بؤرة"] = {type = "string"}, --W: highlight the cells holding this form
["موسع"] = {type = "boolean"}, --W: show the table expanded (default: collapsed)
}
local args = require("Module:parameters").process(parent_args, params)
--W: If both root (جذر) and morphological pattern (وزن) are provided, construct [1]
if args["جذر"] and args["جذر"] ~= "" and args["وزن"] and args["وزن"] ~= "" then
local constructed = construct_verb_spec(args["جذر"], args["وزن"], args["مبني للمجهول"], args["مدغم"])
if constructed and constructed ~= "" then
args[1] = constructed
end
end
local alternant_multiword_spec = export.do_generate_forms(args, "ar-conj")
if type(alternant_multiword_spec) == "string" then
-- JSON return value
return alternant_multiword_spec
end
--W: |بؤرة= marks the cells holding a given form, so that a conjugated-form
-- page ([[Module:ar-verb-form]]) can show the reader where in the paradigm
-- the word they looked up actually sits. The slots have to be found before
-- show_forms(), which replaces each form list with rendered wikitext.
alternant_multiword_spec.focus_slots =
find_focus_slots(alternant_multiword_spec, args["بؤرة"])
--W: A table whose one relevant cell is highlighted is no use folded away, so
-- [[Module:ar-verb-form]] asks for it open. Lemma pages keep it collapsed.
alternant_multiword_spec.expanded = args["موسع"] or false
show_forms(alternant_multiword_spec)
--W: Choose table type: simplified (default) or full (comprehensive)
local table_html
if args["كامل"] then
table_html = make_table(alternant_multiword_spec)
else
table_html = make_table_ar(alternant_multiword_spec)
end
--W: No categories. ar.wiktionary does not carry the enwiktionary category
-- tree this module was written against, so format_categories() was commented
-- out here; the insert_cat() calls that fed it are now gone too, and with
-- them alternant_multiword_spec.categories.
return table_html
end
function export.verb_forms(frame)
local parargs = frame:getParent().args
local params = {
[1] = {},
[2] = {},
[3] = {},
[4] = {},
[5] = {},
pagename = {},
}
for _, form in ipairs(allowed_vforms) do
-- FIXME: We go up to 5 here. The code supports unlimited variants but it's unlikely we will ever see more than
-- 2.
for index = 1, 5 do
local prefix = index == 1 and form or form .. index
params[prefix .. "-pv"] = {}
for _, extn in ipairs { "", "-vn", "-ap", "-pp" } do
params[prefix .. extn] = {}
params[prefix .. extn .. "-head"] = {}
-- FIXME: No -tr?
params[prefix .. extn .. "-gloss"] = {}
end
end
end
local args = require("Module:parameters").process(parargs, params)
local i = 1
local past_vowel_re = "^[aui,]*$"
local combined_root = nil
if not args[i] or rfind(args[i], past_vowel_re) then
combined_root = args.pagename or mw.loadData("Module:headword/data").pagename
if not rfind(combined_root, "^([^ ]) ([^ ]) ([^ ])$") and not
rfind(combined_root, "^([^ ]) ([^ ]) ([^ ]) ([^ ])$") then
error("When inferring roots from page title, need three or four space-separated radicals: " .. combined_root)
end
elseif rfind(args[i], " ") then
combined_root = args[i]
i = i + 1
else
local separate_roots = {}
while args[i] and not rfind(args[i], past_vowel_re) do
table.insert(separate_roots, args[i])
i = i + 1
end
combined_root = table.concat(separate_roots, " ")
end
local past_vowel = args[i]
i = i + 1
if past_vowel and not rfind(past_vowel, past_vowel_re) then
error("Unrecognized past vowel, should be 'a', 'i', 'u', 'a,u', etc. or empty: " .. past_vowel)
end
-- Spaces interfere with parsing as a unit in [[Module:inflection utilities]], so replace with underscore.
combined_root = combined_root:gsub(" ", "_")
local split_root = rsplit(combined_root, "_")
-- Map from verb forms (I, II, etc.) to a table of verb properties,
-- which has entries e.g. for "verb" (either true to autogenerate the verb
-- head, or an explicitly specified verb head using e.g. argument "I-head"),
-- and for "verb-gloss" (which comes from e.g. the argument "I" or "I-gloss"),
-- and for "vn" and "vn-gloss", "ap" and "ap-gloss", "pp" and "pp-gloss".
local verb_properties = {}
for _, form in ipairs(allowed_vforms) do
local formpropslist = {}
local derivs = {{"verb", ""}, {"vn", "-vn"}, {"ap", "-ap"}, {"pp", "-pp"}}
local index = 1
while true do
local formprops = {}
local prefix = index == 1 and form or form .. index
if prefix == "I" then
formprops.pv = past_vowel
end
if args[prefix .. "-pv"] then
formprops.pv = args[prefix .. "-pv"]
end
for _, deriv in ipairs(derivs) do
local prop = deriv[1]
local extn = deriv[2]
if args[prefix .. extn] == "+" then
formprops[prop] = true
elseif args[prefix .. extn] == "-" then
formprops[prop] = false
elseif args[prefix .. extn] then
formprops[prop] = true
formprops[prop .. "-gloss"] = args[prefix .. extn]
end
if args[prefix .. extn .. "-head"] then
if formprops[prop] == nil then
formprops[prop] = true
end
formprops[prop] = args[prefix .. extn .. "-head"]
end
if args[prefix .. extn .. "-gloss"] then
if formprops[prop] == nil then
formprops[prop] = true
end
formprops[prop .. "-gloss"] = args[prefix .. extn .. "-gloss"]
end
end
if formprops.verb then
-- If a verb form specified, also turn on vn (unless form I, with
-- unpredictable vn) and ap, and maybe pp, according to form,
-- weakness and past vowel. But don't turn these on if there's
-- an explicit on/off specification for them (e.g. I-pp=-).
if form ~= "I" and formprops.vn == nil then
formprops.vn = true
end
if formprops.ap == nil then
formprops.ap = true
end
local weakness = weakness_from_radicals(form, split_root[1], split_root[2], split_root[3],
split_root[4])
if formprops.pp == nil and not vform_probably_no_passive(form,
weakness, rsplit(formprops.pv or "", ","), {}) then
formprops.pp = true
end
if formprops.verb == true or formprops.vn == true or formprops.ap == true or formprops.pp == true then
formprops.need_autogen = true
end
table.insert(formpropslist, formprops)
index = index + 1
else
break
end
end
table.insert(verb_properties, {form, formpropslist})
end
-- Go through and create the verb form derivations as necessary, when they haven't been explicitly given.
for _, vplist in ipairs(verb_properties) do
local vform = vplist[1]
for _, props in ipairs(vplist[2]) do
if props.need_autogen then
local form_with_vowels
if vform == "I" then
local pv = props.pv
if not pv then
-- Make up likely past vowels based on weakness and actual radical.
if split_root[3] == W then -- final-weak
form_with_vowels = "I/a~u"
elseif split_root[3] == Y then
form_with_vowels = "I/a~i"
elseif split_root[2] == W then --hollow
form_with_vowels = "I/u~u"
elseif split_root[2] == Y then
form_with_vowels = "I/i~i"
else
-- most common; doesn't matter so much since we're not displaying the non-past
form_with_vowels = "I/a~u"
end
else
local pvs = rsplit(pv, ",")
local vowel_sufs = {}
for _, pv in ipairs(pvs) do
local vowel_spec
if pv == "a" then
-- Make up likely past vowels based on weakness and actual radical.
if split_root[3] == W then -- final-weak
vowel_spec = "a~u"
elseif split_root[3] == Y then
vowel_spec = "a~i"
elseif split_root[2] == W then --hollow
vowel_spec = "a~u"
elseif split_root[2] == Y then
vowel_spec = "a~i"
else
-- most common; doesn't matter so much since we're not displaying the non-past
vowel_spec = "a~u"
end
elseif pv == "i" then
-- most common; doesn't matter so much since we're not displaying the non-past
vowel_spec = "i~a"
elseif pv == "u" then
-- most common; doesn't matter so much since we're not displaying the non-past
vowel_spec = "u~u"
else
error(("Internal error: Bad past vowel '%s' in {{ar-verb forms}}"):format(pv))
end
table.insert(vowel_sufs, vowel_spec)
end
form_with_vowels = "I/" .. table.concat(vowel_sufs, "/")
end
else
form_with_vowels = vform
end
local angle_bracket_spec = ("%s<%s.pass>"):format(combined_root, form_with_vowels)
local alternant_multiword_spec = export.do_generate_forms({angle_bracket_spec}, "ar-verb forms")
local function format_forms(forms)
if not forms then
return "-" -- FIXME: Throw an error?
end
local formatted = {}
for _, form in ipairs(forms) do
if form.translit then
table.insert(formatted, ("%s//%s"):format(form.form, form.translit))
else
table.insert(formatted, form.form)
end
end
return table.concat(formatted, "،")
end
if props.verb == true then
props.verb = format_forms(alternant_multiword_spec.forms.past_3ms)
end
for _, deriv in ipairs({"vn", "ap", "pp"}) do
if props[deriv] == true then
props[deriv] = format_forms(alternant_multiword_spec.forms[deriv])
end
end
end
end
end
-- Go through and output the result
local formtextarr = {}
for _, vplist in ipairs(verb_properties) do
local form = vplist[1]
for _, props in ipairs(vplist[2]) do
local textarr = {}
if props.verb then
local text = "* '''[[Appendix:Arabic verbs#Form " .. form .. "|Form " .. form .. "]]''': "
local linktext = {}
local splitheads = rsplit(props.verb, "[,،]")
for _, head in ipairs(splitheads) do
table.insert(linktext, m_links.full_link({lang = lang, term = head, gloss = props["verb-gloss"]}))
end
text = text .. table.concat(linktext, "، ")
table.insert(textarr, text)
for _, derivengl in ipairs({{"vn", "Verbal noun"}, {"ap", "Active participle"}, {"pp", "Passive participle"}}) do
local deriv = derivengl[1]
local engl = derivengl[2]
if props[deriv] then
local text = "** " .. engl .. ": "
local linktext = {}
local splitheads = rsplit(props[deriv], "[,،]")
for _, head in ipairs(splitheads) do
local ar, translit = head:match("^(.*)//(.-)$")
if not ar then
ar = head
end
table.insert(linktext, m_links.full_link {lang = lang, term = ar, tr = translit,
gloss = props[deriv .. "-gloss"]} )
end
text = text .. table.concat(linktext, "، ")
table.insert(textarr, text)
end
end
table.insert(formtextarr, table.concat(textarr, "\n"))
end
end
end
return table.concat(formtextarr, "\n")
end
-- Infer radicals from lemma headword (i.e. 3rd masculine singular past) and verb form (I, II, etc.). Throw an error if
-- headword is malformed. A given returned radical may be actually be a list of possible radicals, where the first one
-- should be used if the user didn't explicitly give the radical. If the list contains a field `ambig = true`, the
-- radical is considered ambiguous and should not be categorized. `is_reduced` indicates that the user specified
-- `.reduced` to indicate that the verb form is reduced by assimilation and/or haplology (typically archaic Koranic
-- forms such as اِدَّارَأَ instead of تَدَارَأَ; or اِسْطَاعَ instead of اِسْتِطَاعَ; etc.
function export.infer_radicals(data)
local headword, vform, passive, past_vowel, nonpast_vowel, is_reduced =
data.headword, data.vform, data.passive, data.past_vowel, data.nonpast_vowel, data.is_reduced
past_vowel = past_vowel or "-"
nonpast_vowel = nonpast_vowel or "-"
local function verify_vowel(vowel, param)
--W: A past/non-past vowel may legitimately be a form object {form=..., footnotes=...}
-- when the user attaches a footnote, e.g. <I/a[نادر]~u>, so compare the formval.
-- Comparing the raw value crashed on Lua 5.1 ("bad argument #2 to 'format'").
local formval = rget(vowel)
if formval ~= A and formval ~= I and formval ~= U and formval ~= "-" then
error(("Internal error: Bad value for %s: %s (should be Arabic diacritic vowel or '-')"):format(
param, dump(vowel)))
end
end
verify_vowel(past_vowel, "past_vowel")
verify_vowel(nonpast_vowel, "nonpast_vowel")
local ch = {}
local form_viii_assim, variant
-- sub out alif-madda for easier processing
headword = rsub(headword, AMAD, HAMZA .. ALIF)
local function infer_err(msg, noann)
local anns = {}
local nohead, novform
if noann == "nohead" then
nohead = true
elseif noann == "novform" then
novform = true
elseif noann == "nohead-vform" then
nohead = true
novform = true
elseif noann then
error(("Internal error: Unrecognized value for 'noann': %s"):format(dump(noann)))
end
if not nohead then
table.insert(anns, ("headword=%s"):format(data.headword))
end
if not novform then
table.insert(anns, ("verb form=%s"):format(data.vform))
end
anns = table.concat(anns, "، ")
if anns ~= "" then
anns = ": " .. anns
end
error(msg .. anns)
end
local len = ulen(headword)
local expected_length
-- extract the headword letters into an array
for i = 1, len do
table.insert(ch, usub(headword, i, i))
end
-- check that the letter at the given index is the given string, or
-- is one of the members of the given array
local function check(index, must)
local letter = ch[index]
if type(must) == "string" then
if not letter then
infer_err("Letter " .. index .. " is nil")
end
if letter ~= must then
infer_err(("For verb form %s, letter %s must be %s, not %s"):format(vform, index, must, letter),
"novform")
end
elseif not m_table.contains(must, letter) then
infer_err("For verb form " .. vform .. ", radical " .. index ..
" must be one of " .. table.concat(must, " ") .. ", not " .. letter, "novform")
end
end
-- Check that length of headword is within [min, max]
local function check_len(min, max)
if min and len < min then
infer_err(("Not enough letters for verb form %s, expected at least %s"):format(vform, min), "novform")
end
if max and len > max then
infer_err(("Too many letters for verb form %s, expected at most %s"):format(vform, max), "novform")
end
end
-- A form I verb beginning with w- keeps the w in the non-past unless the non-past vowel is a kasra or a
-- lowered kasra; see form_i_w_assimilated(), which the radicals path uses too. This used to be spelt out
-- here as "i~a or u~u", which missed a~u (وَجَلَ يَوْجُلُ).
local function form_I_w_non_assimilated()
return not form_i_w_assimilated(past_vowel, nonpast_vowel)
end
-- Convert radicals to canonical form (handle various hamza varieties and check for misplaced alif or alif maqṣūra;
-- legitimate cases of these letters are handled above).
local function convert(rad, index)
if type(rad) == "table" then
for i, r in ipairs(rad) do
rad[i] = convert(r, index)
end
return rad
elseif rad == HAMZA_ON_ALIF or rad == HAMZA_UNDER_ALIF or
rad == HAMZA_ON_W or rad == HAMZA_ON_Y then
return HAMZA
elseif rad == AMAQ then
infer_err("Radical " .. index .. " must not be alif maqṣūra")
elseif rad == ALIF then
infer_err("Radical " .. index .. " must not be alif")
else
return rad
end
end
local quadlit = vform:find("q$")
-- find first radical, start of second/third radicals, check for
-- required letters
local radstart, rad1, rad2, rad3, rad4
local weakness
if vform == "I" or vform == "II" then
rad1 = ch[1]
radstart = 2
elseif vform == "III" then
rad1 = ch[1]
check(2, {ALIF, W}) -- W occurs in passive-only verbs
radstart = 3
elseif vform == "IV" then
-- this would be alif-madda but we replaced it with hamza-alif above.
if ch[1] == HAMZA and ch[2] == ALIF then
rad1 = HAMZA
else
check(1, HAMZA_ON_ALIF)
rad1 = ch[2]
end
radstart = 3
elseif vform == "V" then
check(1, is_reduced and ALIF or T)
rad1 = ch[2]
radstart = 3
elseif vform == "VI" then
check(1, is_reduced and ALIF or T)
if ch[2] == AMAD then
rad1 = HAMZA
radstart = 3
else
rad1 = ch[2]
check(3, {ALIF, W}) -- W occurs in passive-only verbs
radstart = 4
end
elseif vform == "VII" then
check(1, ALIF)
if is_reduced then
check(2, M)
rad1 = M
radstart = 3
else
check(2, N)
rad1 = ch[3]
radstart = 4
end
elseif vform == "VIII" then
check(1, ALIF)
rad1 = ch[2]
if rad1 == "د" then
rad1 = {"د", "ذ"} -- not considered ambiguous since it's usually د
radstart = 3
form_viii_assim = "دّ"
elseif rad1 == "ظ" and ch[3] == "ط" and len >= 5 then
-- [[اظطلم]], variant of [[اظلم]]
radstart = 4
form_viii_assim = "ظْط"
elseif rad1 == "ذ" and ch[3] == "د" and len >= 5 then
-- [[اذدكر]], variant of [[اذكر]]
radstart = 4
form_viii_assim = "ذْد"
elseif rad1 == T or rad1 == "ث" or rad1 == "ذ" or rad1 == "ط" or rad1 == "ظ" then
radstart = 3
form_viii_assim = rad1 .. SH
elseif rad1 == "ز" then
check(3, "د")
radstart = 4
form_viii_assim = "زْد"
elseif rad1 == "ص" or rad1 == "ض" then
check(3, "ط")
radstart = 4
form_viii_assim = rad1 .. SK .. "ط"
else
check(3, T)
radstart = 4
rad1 = convert(rad1, 1)
form_viii_assim = rad1 .. SK .. "ت"
end
if rad1 == T then
-- Radical is ambiguous, might be ت or و or ي but doesn't affect conjugation. Note that there are no
-- form-VIII verbs with initial radical ي given in Hans Wehr but Lane mentions at least:
-- - (page 2973) اِتَّأَسَ, with assimilation of the ي to ت, from root ي ء س;
-- - (page 2975) اِتَّبَسَ non-past يَتَّبِسُ and alternative اِيتَبَسَ non-past يَاتَبِسُ from the root ي ب س;
-- - (page 2976) اِتَّسَرَ non-past يَتَّسِرُ or alternatively يَأْتَسِرُ with hamza preserved from the root ي س ر.
-- These alternative forms seem very rare and probably not worth worrying about, but if we want to handle
-- them, we can do it when the time comes.
rad1 = {T, W, Y, ambig = true}
-- اِتَّخَذَ irregularly has hamza as the radical but assimilates like و
if ch[3] == "خ" and ch[4] == "ذ" then
rad1[4] = HAMZA
end
end
elseif vform == "IX" then
check(1, ALIF)
rad1 = ch[2]
radstart = 3
elseif vform == "X" then
check(1, ALIF)
check(2, S)
if is_reduced then
rad1 = ch[3]
radstart = 4
else
check(3, T)
rad1 = ch[4]
radstart = 5
end
elseif vform == "Iq" then
rad1 = ch[1]
rad2 = ch[2]
radstart = 3
elseif vform == "IIq" then
check(1, T)
rad1 = ch[2]
rad2 = ch[3]
radstart = 4
elseif vform == "IIIq" then
check(1, ALIF)
rad1 = ch[2]
rad2 = ch[3]
check(4, N)
radstart = 5
elseif vform == "IVq" then
check(1, ALIF)
rad1 = ch[2]
rad2 = ch[3]
radstart = 4
elseif vform == "XI" then
check_len(5, 5)
check(1, ALIF)
rad1 = ch[2]
rad2 = ch[3]
check(4, ALIF)
rad3 = ch[5]
weakness = "sound"
elseif vform == "XII" then
check(1, ALIF)
rad1 = ch[2]
if ch[3] ~= ch[5] then
infer_err("For verb form XII, letters 3 and 5 should be the same", "novform")
end
check(4, W)
radstart = 5
elseif vform == "XIII" then
check_len(5, 5)
check(1, ALIF)
rad1 = ch[2]
rad2 = ch[3]
check(4, W)
rad3 = ch[5]
if rad3 == AMAQ then
weakness = "final-weak"
else
weakness = "sound"
end
elseif vform == "XIV" then
check_len(6, 6)
check(1, ALIF)
rad1 = ch[2]
rad2 = ch[3]
check(4, N)
rad3 = ch[5]
if ch[6] == AMAQ then
check_waw_ya(rad3)
weakness = "final-weak"
else
if ch[5] ~= ch[6] then
infer_err("For verb form XIV, letters 5 and 6 should be the same", "novform")
end
weakness = "sound"
end
elseif vform == "XV" then
check_len(6, 6)
check(1, ALIF)
rad1 = ch[2]
rad2 = ch[3]
check(4, N)
rad3 = ch[5]
if rad3 == Y then
check(6, ALIF)
else
check(6, AMAQ)
end
weakness = "sound"
else
error("Internal error: Unrecognized verb form " .. vform)
end
-- Process the last two radicals. RADSTART is the index of the first of the two. If it's nil then all radicals have
-- already been processed above, and we don't do anything.
if radstart then
-- There must (normally) be one or two letters left.
if len == radstart then
if vform == "I" and ch[len] == Y then
-- short form حَيَّ
weakness = "final-weak"
rad2 = Y
rad3 = Y
variant = "short"
elseif vform == "IV" and rad1 == "ر" and ch[len] == AMAQ then
-- irregular verb أَرَى
weakness = "final-weak"
rad2 = HAMZA
rad3 = Y
elseif vform == "X" and rad1 == "ح" and ch[len] == AMAQ then
-- irregular verb اِسْتَحَى
weakness = "final-weak"
rad2 = Y
rad3 = Y
variant = "short"
else
-- If one letter left, then it's a geminate verb. If the letter is alif or alif maqṣūra, it will trigger
-- an error down the line.
if vform_supports_geminate(vform) then
weakness = "geminate"
rad2 = ch[len]
rad3 = ch[len]
if vform == "III" or vform == "VI" then
variant = "short"
end
else
infer_err("Apparent geminate verb, but geminate verbs not allowed for this verb form")
end
end
elseif quadlit then
-- Process last two radicals of a quadriliteral verb form.
rad3 = ch[radstart]
rad4 = ch[radstart + 1]
expected_length = radstart + 1
check_len(expected_length)
if rad4 == AMAQ or rad4 == ALIF and rad3 == Y or rad4 == Y then
-- rad4 can be Y in passive-only verbs.
if vform_supports_final_weak(vform) then
weakness = "final-weak"
-- Ambiguous radical; randomly pick wāw as radical (but avoid two wāws in a row); it could be wāw or
-- yāʾ, but doesn't affect the conjugation.
rad4 = rad3 == W and {Y, W, ambig = true} or {W, Y, ambig = true}
else
infer_err("Last radical is " .. rad4 .. " but verb form " .. vform ..
" doesn't support final-weak verbs", "novform")
end
else
weakness = "sound"
end
else
-- Process last two radicals of a triliteral verb form.
rad2 = ch[radstart]
rad3 = ch[radstart + 1]
expected_length = radstart + 1
check_len(expected_length)
if vform == "I" and (is_waw_ya(rad3) or rad3 == ALIF or rad3 == AMAQ) then
local inferred_past_vowel, inferred_nonpast_vowel
-- Check for final-weak form I verb. It can end in tall alif (rad3 = wāw) or alif maqṣūra (rad3 = yāʾ)
-- or a wāw or yāʾ (with a past vowel of i or u, e.g. nasiya/yansā "forget" or with a passive-only
-- verb).
if rad1 == W and not form_I_w_non_assimilated() then
weakness = "assimilated+final-weak"
else
weakness = "final-weak"
end
if rad3 == ALIF then
rad3 = W
inferred_past_vowel = A
inferred_nonpast_vowel = U
if is_passive_only(passive) then
infer_err("Final-weak form-I passive verbs should end in yāʔ (ي), not tall alif (ا)", "novform")
end
elseif rad3 == AMAQ then
rad3 = Y
inferred_past_vowel = A
inferred_nonpast_vowel = I
if is_passive_only(passive) then
infer_err("Final-weak form-I passive verbs should end in yāʔ (ي), not alif maqṣūra (ى)",
"novform")
end
elseif rad1 == "ح" and rad2 == Y and rad3 == Y then
-- Long variant حَيِيَ.
inferred_past_vowel = I
inferred_nonpast_vowel = A
variant = "long"
else
if not is_passive_only(passive) then
-- does a non-passive final-weak verb in -uwa ever happen? (YES: e.g. [[رجو]] "to be slack")
inferred_past_vowel = rad3 == Y and I or U
inferred_nonpast_vowel = A
end
-- Ambiguous radical; randomly pick wāw as radical (but avoid two wāws); it could be wāw or yāʾ, but
-- doesn't affect the conjugation.
rad3 = (rad1 == W or rad2 == W) and {Y, W, ambig = true} or {W, Y, ambig = true} -- ambiguous
end
if inferred_past_vowel then
local raw_past_vowel = rget(past_vowel)
local raw_nonpast_vowel = rget(nonpast_vowel)
if raw_past_vowel ~= "-" then
if raw_past_vowel ~= inferred_past_vowel then
infer_err(("Final-weak form-I verb inferred past vowel %s, which disagrees with " ..
"explicitly specified %s"):format(undia[inferred_past_vowel], undia[raw_past_vowel]), "novform")
else
-- in case of footnote in past_vowel
inferred_past_vowel = past_vowel
end
end
if raw_nonpast_vowel ~= "-" and raw_nonpast_vowel ~= A and inferred_nonpast_vowel == U then
-- if inferred as I or A, the reality can be the reverse; form-I final-weak verbs with a~a and
-- i~i exist, e.g. سَعَى/يَسْعَى, وَلِيَ/يَلِي. Weird verb [[صها]] (also written [[صهى]]) has non-past
-- يصهى so we can't throw an error in this situation.
if raw_nonpast_vowel ~= inferred_nonpast_vowel then
infer_err(("Final-weak form-I verb inferred non-past vowel %s, which disagrees with " ..
"explicitly specified %s"):format(undia[inferred_nonpast_vowel], undia[raw_nonpast_vowel]), "novform")
else
-- in case of footnote in nonpast_vowel
inferred_nonpast_vowel = nonpast_vowel
end
end
end
if not is_passive_only(passive) then
if rget(past_vowel) == "-" then
past_vowel = inferred_past_vowel
end
if rget(nonpast_vowel) == "-" then
nonpast_vowel = inferred_nonpast_vowel
end
end
elseif vform == "IX" and is_waw_ya(rad3) and len == radstart + 2 and ch[len] == AMAQ then
-- Final-weak form IX verbs like اِرْعَوَى "to desist, to repent, to see the light".
weakness = "final-weak"
expected_length = radstart + 2
elseif vform == "X" and rad1 == "ح" and rad2 == Y and rad3 == ALIF then
-- Long variant اِسْتَحْيَا.
weakness = "final-weak"
rad3 = Y
variant = "long"
elseif rad3 == AMAQ or rad2 == Y and rad3 == ALIF or rad3 == Y then
-- rad3 == Y happens in passive-only verbs.
if vform_supports_final_weak(vform) then
weakness = "final-weak"
else
infer_err("Last radical is " .. rad3 .. " but verb form doesn't support final-weak verbs")
end
-- Ambiguous radical; randomly pick wāw as radical (but avoid two wāws); it could be wāw or yāʾ, but
-- doesn't affect the conjugation.
rad3 = (rad1 == W or rad2 == W) and {Y, W, ambig = true} or {W, Y, ambig = true}
elseif rad2 == ALIF then
if vform_supports_hollow(vform) then
weakness = "hollow"
local function set_past_to_a()
if req(past_vowel, A) then
-- already set
elseif req(past_vowel, "-") or req(past_vowel, rget(nonpast_vowel)) then
past_vowel = A
else
infer_err(("Form I hollow verb with nonpast vowel set to '%s' must have past vowel set to 'a' or the same value, not %s"):
format(undia[rget(nonpast_vowel)], undia[rget(past_vowel)]), "novform")
end
end
if vform == "I" and req(nonpast_vowel, U) then
rad2 = W
set_past_to_a()
elseif vform == "I" and req(nonpast_vowel, I) then
rad2 = Y
set_past_to_a()
else
if req(nonpast_vowel, A) and not req(past_vowel, I) then
infer_err(("Form I hollow verb with nonpast vowel set to 'a' must have past vowel set to 'i', not %s"):
format(undia[rget(past_vowel)]), "novform")
end
-- Ambiguous radical; could be wāw or yāʾ; if verb form I, it's critical to get this right, and
-- the caller checks for this situation and throws an error if non-past vowel is "a" and second
-- radical isn't explicitly given.
rad2 = {W, Y, ambig = true, need_radical = true}
end
else
infer_err("Second radical is alif but verb form doesn't support hollow verbs")
end
elseif vform == "I" and rad1 == W and not form_I_w_non_assimilated() then
weakness = "assimilated"
elseif rad2 == rad3 and (vform == "III" or vform == "VI") then
weakness = "geminate"
variant = "long"
else
weakness = "sound"
end
end
if expected_length then
check_len(expected_length, expected_length)
end
end
rad1 = convert(rad1, 1)
rad2 = convert(rad2, 2)
rad3 = convert(rad3, 3)
rad4 = convert(rad4, 4)
if not weakness then
error("Internal error: Returned weakness from infer_radicals() is nil")
end
return {
weakness = weakness,
rad1 = rad1,
rad2 = rad2,
rad3 = rad3,
rad4 = rad4,
past_vowel = past_vowel,
nonpast_vowel = nonpast_vowel,
form_viii_assim = form_viii_assim,
variant = variant,
}
end
-- bot interface to infer_radicals()
function export.infer_radicals_json(frame)
local iparams = {
headword = {},
vform = {},
passive = {},
past_vowel = {},
nonpast_vowel = {},
is_reduced = {type = "boolean"},
}
local iargs = require("Module:parameters").process(frame.args, iparams)
return require("Module:JSON").toJSON(export.infer_radicals(iargs))
end
-- Infer vocalization from participle headword (active or passive), verb form (I, II, etc.) and whether the headword is
-- active or passive. Throw an error if headword is malformed. Returned radicals may contain Latin letters "t", "w" or "y"
-- indicating ambiguous radicals guessed to be tāʾ, wāw or yāʾ respectively.
function export.infer_participle_vocalization(headword, vform, weakness, is_active)
local chars = {}
local orig_headword = headword
-- Sub out alif-madda for easier processing.
headword = rsub(headword, AMAD, HAMZA .. ALIF)
local len = ulen(headword)
-- Extract the headword letters into an array.
for i = 1, len do
table.insert(chars, usub(headword, i, i))
end
local function form_intro_error_msg()
return ("For verb form %s %s%s participle %s, "):format(vform, orig_headword ~= headword and "normalized " or
"", is_active and "active" or "passive", headword)
end
local function err(msg)
error(form_intro_error_msg() .. msg, 1)
end
-- Check that length of headword is within [min, max].
local function check_len(min, max)
if min and len < min then
err(("expected at least %s letters but saw %s"):format(min, len))
elseif max and len > max then
err(("expected at most %s letters but saw %s"):format(max, len))
end
end
-- Get the character at `ind`, making sure it exists.
local function c(ind)
check_len(ind)
return chars[ind]
end
-- Check that the letter at the given index is the given string, or is one of the members of the given array
local function check(index, must)
local letter = chars[index]
local function make_possible_values()
if type(must) == "string" then
return must
else
return list_to_text(must, nil, " or ")
end
end
if not letter then
err(("expected a letter (specifically %s) at position %s, but participle is too short"):format(
make_possible_values(), index))
end
local matches
if type(must) == "string" then
matches = letter == must
else
matches = m_table.contains(must, letter)
end
if not matches then
err(("letter %s at index %s must be %s"):format(letter, index, make_possible_values()))
end
end
local function check_weakness(values, allow_missing, invert_condition)
local function make_possible_weaknesses()
for i, val in ipairs(values) do
values[i] = "'" .. val .. "'"
end
return list_to_text(values, nil, " or ")
end
if allow_missing and invert_condition then
error("Internal error: Can't specify both allow_missing and invert_condition")
end
if not weakness then
if allow_missing or invert_condition then
return
else
err(("weakness is unspecified but must be %s"):format(make_possible_weaknesses()))
end
else
local matches = m_table.contains(values, weakness)
if invert_condition and matches then
err(("weakness '%s' must not be %s"):format(weakness, make_possible_weaknesses()))
elseif not invert_condition and not matches then
err(("weakness '%s' must be %s"):format(weakness, make_possible_weaknesses()))
end
end
end
local vocalized
local function handle_possibly_final_weak(sound_prefix, expected_length)
check_len(expected_length, expected_length)
if c(expected_length) == AMAQ then
-- passive final-weak
if is_active then
err("participle in -ِى only allowed for passive participles")
end
check_weakness({"final-weak", "assimilated+final-weak"}, "allow missing")
vocalized = sound_prefix .. AN .. AMAQ
else
-- all others behave as if sound
check_weakness({"final-weak", "assimilated+final-weak"}, nil, "invert condition")
vocalized = sound_prefix .. (is_active and I or A) .. c(expected_length)
end
end
if not (vform == "I" and is_active) then
-- all participles except verb form I active begin in م-.
check(1, M)
end
if vform == "I" then
if is_active then
check(2, ALIF)
local sound_prefix = c(1) .. AA .. c(3)
if len == 3 then
if c(3) == HAMZA then
-- Either hollow with hamzated third radical, e.g. [[شاء]] active participle 'شَاءٍ', or final-weak
-- with hamzated second radical, e.g. [[رأى]] active participle 'رَاءٍ'. Theoretically (?), also
-- geminate with hamzated second/third radical, but I don't know if any such verbs exist.
if weakness == "geminate" then
vocalized = sound_prefix .. SH
else
check_weakness({"hollow", "final-weak"}, "allow missing")
vocalized = sound_prefix .. IN
end
else
check_weakness({"final-weak", "geminate"})
if weakness == "geminate" then
vocalized = sound_prefix .. SH
else
vocalized = sound_prefix .. IN
end
end
else
check_len(4, 4)
-- we will convert back to alif maqṣūra below as needed
vocalized = sound_prefix .. I .. c(4)
end
else
-- assimilated verbs: regular, e.g. مَوْزُون "weighed"
-- geminate verbs: regular, e.g. مَبْلُول "moistened"
-- third-hamzated verbs: مَبْرُوء
-- hollow verbs: مَقُود "led, driven"; مَزِيد "added, increased"
-- hollow first-hamzated verbs: مَئِيض "returned, reverted"; مَأْيُوس "despaired" (NOTE: formation is sound);
-- مَأُود or مَؤُود "bent; depleted"
-- hollow third-hamzated verbs: مَشِيء "willed, intended", مَضُوء "glittered?"
-- final-weak: مَلْقِيّ "found, encountered"; مَصْغُوّ "inclined"
-- hollow + final-weak: مَشْوِيّ "fried, grilled", مَهْوِيّ "loved"
-- first-hamzated + hollow + final-weak: مَأْوِيّ "received hospitably"
local sound_prefix = MA .. c(2) .. SK .. c(3)
if len == 5 then
-- sound, assimilated or geminate
check(4, W)
vocalized = sound_prefix .. UU .. c(5)
else
check_len(4, 4)
if c(4) == W then
-- final-weak third-wāw
vocalized = sound_prefix .. U .. W .. SH
elseif c(4) == Y then
-- final-weak third-yāʾ
vocalized = sound_prefix .. I .. Y .. SH
else
-- hollow
check(3, {W, Y})
if c(3) == W then
vocalized = MA .. c(2) .. UU .. c(4)
else
vocalized = MA .. c(2) .. II .. c(4)
end
end
end
end
elseif vform == "II" or vform == "V" or vform == "XII" or vform == "XIII" or vform == "Iq" or vform == "IIq" or
vform == "IIIq" then
local sound_prefix, expected_length
if vform == "II" then
sound_prefix = MU .. c(2) .. A .. c(3) .. SH
expected_length = 4
elseif vform == "V" then
check(2, T)
sound_prefix = MU .. T .. A .. c(3) .. A .. c(4) .. SH
expected_length = 5
elseif vform == "XII" then
-- e.g. [[احدودب]] "to be or become convex or humpbacked", مُحْدَوْدِب (active);
-- [[اثنونى]] "to be bent; to be doubled up", مُثْنَوْنٍ (active)
check(4, W)
if c(3) ~= c(5) then
err(("third letter %s should be the same as the fifth letter %s"):format(c(3), c(5)))
end
sound_prefix = MU .. c(2) .. SK .. c(3) .. A .. W .. SK .. c(5)
expected_length = 6
elseif vform == "XIII" then
-- e.g. [[اخروط]] "to get entangled; to extend", مُخْرَوِّط (active), مُخْرَوَّط (passive)
check(4, W)
sound_prefix = MU .. c(2) .. SK .. c(3) .. A .. W .. SH
expected_length = 5
elseif vform == "Iq" then
sound_prefix = MU .. c(2) .. A .. c(3) .. SK .. c(4)
expected_length = 5
elseif vform == "IIq" then
check(2, T)
sound_prefix = MU .. T .. A .. c(3) .. A .. c(4) .. SK .. c(5)
expected_length = 6
elseif vform == "IIIq" then
-- e.g. [[اخرنطم]] "to be proud and angry"
check(4, T)
sound_prefix = MU .. c(2) .. SK .. c(3) .. A .. N .. SK .. c(5)
expected_length = 6
else
error("Internal error: Unhandled verb form " .. vform)
end
if len == expected_length - 1 then
-- active final-weak
if not is_active then
err(("length-%s participle only allowed for active participles"):format(len))
end
check_weakness({"final-weak", "assimilated+final-weak"}, "allow missing")
vocalized = sound_prefix .. IN
else
handle_possibly_final_weak(sound_prefix, expected_length)
end
elseif vform == "III" or vform == "VI" then
local sound_prefix, expected_length
if vform == "VI" then
check(2, T)
check(4, ALIF)
sound_prefix = MU .. T .. A .. c(3) .. AA .. c(5)
expected_length = 6
else
sound_prefix = MU .. c(2) .. AA .. c(4)
expected_length = 5
end
if len == expected_length - 1 then
-- active final-weak or active or passive geminate
if is_active then
check_weakness({"geminate", "final-weak", "assimilated+final-weak"})
if weakness == "geminate" then
vocalized = sound_prefix .. SH
else
vocalized = sound_prefix .. IN
end
else
check_weakness({"geminate"}, "allow missing")
vocalized = sound_prefix .. SH
end
else
handle_possibly_final_weak(sound_prefix, expected_length)
end
elseif vform == "IV" or vform == "X" then
-- form IV:
-- sound: مُرْسِخ (active, "entrenching"), مُرْسَخ (passive, "entrenched")
-- first-hamzated (like sound): مُؤْيِس (active, "causing to despair"), مُؤْيَس (passive, "caused to despair")
-- final-weak: مُكْرٍ (active, "renting out"), مُكْرًى (passive, "rented out")
-- assimilated: مُورِد (active, "transferring"), مُورَد (passive, "transferred"); same when first-Y, e.g.
-- أَيْقَنَ "to be certain of": مُوقِن (active), مُوقَن (passive)
-- assimilated + final-weak: مُورٍ (active, "setting fire, kindling"), مُورًى (passive, "set fire, kindled")
-- geminate: مُمِدّ (active, "granting, helping"), مُمَدّ (passive, "granted, helped")
-- hollow: مُزِيل (active, "eliminating"), مُزَال (passive, "eliminated")
-- hollow + final-weak: مُعْيٍ (active, "tiring"), مُعْيًى (passive, "tired")
local sound_prefix, expected_length
if vform == "X" then
check(2, S)
check(3, T)
sound_prefix = MU .. S .. SK .. T .. A .. c(4)
expected_length = 6
else
sound_prefix = MU .. c(2)
expected_length = 4
end
if len == expected_length and c(len - 1) == Y and c(len) ~= AMAQ then
-- active hollow
if not is_active then
err("this shape only allowed for active participles")
end
check_weakness({"hollow"}, "allow missing")
vocalized = sound_prefix .. II .. c(len)
elseif len == expected_length and c(len - 1) == ALIF then
-- passive hollow
if is_active then
err("this shape only allowed for passive participles")
end
check_weakness({"hollow"}, "allow missing")
vocalized = sound_prefix .. AA .. c(len)
elseif len == expected_length - 1 then
-- active final-weak or active or passive geminate
if is_active then
check_weakness({"geminate", "final-weak", "assimilated+final-weak"})
if weakness == "geminate" then
vocalized = sound_prefix .. I .. c(len) .. SH
elseif vform == "IV" and c(2) == W then
-- assimilated final-weak
vocalized = sound_prefix .. c(len) .. IN
else
vocalized = sound_prefix .. SK .. c(len) .. IN
end
else
check_weakness({"geminate"}, "allow missing")
vocalized = sound_prefix .. A .. c(len) .. SH
end
else
if vform == "IV" and c(2) == W then
-- assimilated, possibly final-weak
sound_prefix = sound_prefix .. c(expected_length - 1)
else
sound_prefix = sound_prefix .. SK .. c(expected_length - 1)
end
handle_possibly_final_weak(sound_prefix, expected_length)
end
elseif vform == "VII" or vform == "VIII" then
-- form VII (passive participles are fairly rare but do exist):
-- sound: مُنْكَتِب (active "subscribing"), مُنْكَتَب (passive "subscribed")
-- geminate: مُنْضَمّ (both active "joining, containing" and passive "joined, contained")
-- final-weak: مُنْطَلٍ (active "fooling (someone)"), مُنْطَلًى (passive "fooled")
-- final-weak with medial wāw: مُنْطَوٍ (active "involving"), مُنْطَوًى (passive "involved")
-- hollow: مُنْقَاد (both active "complying with" and passive "complied with")
--
-- for form VIII, the same variants exist but things are complicated by assimilations involving the template T.
-- sound third-hamzated no assimilation: مُبْتَدِئ (active "beginning"), مُبْتَدَأ (passive "begun")
-- geminate no assimilation: مُبْتَزّ (both active "robbing" and passive "robbed")
-- final-weak no assimilation: مُبْتَنٍ (active "building"), مُبْتَنًى (passive "built")
-- final-weak with medial wāw no assimilation: مُحْتَوٍ (active "containing"), مُحْتَوًى (passive "contained")
-- hollow no assimilation: مُخْتَار (both active "choosing" and passive "chosen")
--
-- sound with total assimilation: مُتَّبِع (active "following"), مُتَّبَع (passive "followed")
-- sound with total assimilation, assimilating wāw: مُتَّعِد (active "threatening"), مُتَّعَد (passive "threatened")
-- sound with total assimilation, irregularly assimilating hamza: مُتَّخِذ (active "taking"), مُتَّخَذ (passive "taken")
-- sound with total assimilation (to ḏāl, producing dāl): مُدَّخِر (active "reserving"), مُدَّخَر (passive "reserved")
-- sound with total assimilation (to ḏāl): مُذَّكِر (active "remembering"), مُذَّكَر (passive "remembered")
-- sound with total assimilation (to ṭāʔ): مُطَّرِح (active "discarding"), مُطَّرَح (passive "discarded")
-- sound with total assimilation (to ẓāʔ): مُظَّلِم (active "tolerating"), مُظَّلَم (passive "tolerated")
-- final-weak with total assimilation, assimilating wāw: مُتَّقٍ (active "guarding against"), مُتَّقًى (passive "guarded against")
-- final-weak with total assimilation (to ṯāʔ): مُثَّنٍ (active "undulating"), مُثَّنًى (passive "undulated")
-- final-weak with total assimilation (to dāl): مُدَّعٍ (active "claiming"), مُدَّعًى (passive "claimed")
-- sound with partial assimilation (to zayn): مُزْدَهِر (active "thriving"), مُزْدَهَر (passive "thrived")
-- sound with medial wāw with partial assimilation (to zayn): مُزْدَوِج (active "appearing twice")
-- sound with partial assimilation (to ṣād): مُصْطَبِح (active "illuminating"), مُصْطَبَح (passive, "illuminated")
-- sound with partial assimilation (to ḍād): مُضْطَرِب (active "to be disturbed"; no passive)
-- geminate with partial assimilation (to ṣād): مُصْطَبّ (both active "effusing" and passive "effused")
-- geminate with partial assimilation (to ḍād): مُضْطَرّ (both active "forcing" and passive "forced")
-- final-weak with partial assimilation (to ṣād): مُصْطَلٍ (active "warming"), مُصْطَلًى (passive "warmed")
-- hollow with partial assimilation (to zayn): مُزْدَاد (both active "increasing" and passive "increased")
-- hollow with partial assimilation (to ṣad): مُصْطَاد (both active "hunting" and passive "hunted")
local sound_prefix, sufind
if vform == "VII" then
check(2, N)
sound_prefix = MU .. N .. SK .. c(3)
sufind = 4
else
local c2 = c(2)
if c2 == T or c2 == "د" or c2 == "ث" or c2 == "ذ" or c2 == "ط" or c2 == "ظ" then
-- full assimilation
sound_prefix = MU .. c2 .. SH
sufind = 3
else
-- partial or no assimilation
if c2 == "ز" then
check(3, "د")
elseif c2 == "ص" or c2 == "ض" then
check(3, "ط")
else
check(3, T)
end
sound_prefix = MU .. c2 .. SK .. c(3)
sufind = 4
end
end
if c(sufind) == ALIF then
-- hollow, active or passive
check_len(sufind + 1, sufind + 1)
check_weakness({"hollow"}, "allow missing")
vocalized = sound_prefix .. AA .. c(sufind + 1)
elseif len == sufind then
-- active final-weak or active or passive geminate
if is_active then
check_weakness({"geminate", "final-weak", "assimilated+final-weak"})
if weakness == "geminate" then
vocalized = sound_prefix .. A .. c(len) .. SH
else
vocalized = sound_prefix .. A .. c(len) .. IN
end
else
check_weakness({"geminate"}, "allow missing")
vocalized = sound_prefix .. A .. c(len) .. SH
end
else
sound_prefix = sound_prefix .. A .. c(sufind)
handle_possibly_final_weak(sound_prefix, sufind + 1)
end
elseif vform == "IX" then
check_len(4, 4)
vocalized = MU .. c(2) .. SK .. c(3) .. A .. c(4) .. SH
elseif vform == "IVq" then
-- e.g. [[اذلعب]] "to scamper away", مُذْلَعِبّ (active), مُذْلَعَبّ (passive);
-- [[اطمأن]] "to remain quietly; to be certain", مُطْمَئِنّ (active), مُطْمَأَنّ (passive)
check_len(5, 5)
local sound_prefix = MU .. c(2) .. SK .. c(3) .. A .. c(4)
if is_active then
vocalized = sound_prefix .. I .. c(5) .. SH
else
vocalized = sound_prefix .. A .. c(5) .. SH
end
elseif vform == "XI" then
check_len(5, 5)
check(4, ALIF)
vocalized = MU .. c(2) .. SK .. c(3) .. AA .. c(5) .. SH
-- e.g. [[احمار]] "to turn red, to blush", مُحْمَارّ (active)
elseif vform == "XIV" or vform == "XV" then
-- FIXME: Implement. No examples in Wiktionary currently; need to look up in a grammar.
error("Support for verb form " .. vform .. " not implemented yet")
else
error("Don't recognize verb form " .. vform)
end
vocalized = rsub(vocalized, HAMZA .. AA, AMAD)
local reconstructed_headword = lang:makeEntryName(vocalized)
if reconstructed_headword ~= orig_headword then
error(("Internal error: Vocalized participle %s doesn't match original participle %s"):format(
vocalized, orig_headword))
end
-- Apply NFC-style normalization to match MediaWiki's automatic normalization
return apply_nfc_shadda(vocalized)
end
function export.infer_participle_vocalization_json(frame)
local iparams = {
[1] = {required = true},
[2] = {required = true},
["weakness"] = {},
["passive"] = {type = "boolean"}
}
local iargs = require("Module:parameters").process(frame.args, iparams)
return export.infer_participle_vocalization(iargs[1], iargs[2], iargs.weakness, not iargs.passive)
end
return export
j6971sj8i5kpdj56kfk5zkjw54yys2d
1159133
1159118
2026-09-11T08:04:04Z
ForzaGreen
28665
corpus 462 paradigms: p204 رأى و p254 يبس، وتدقيق ملاحظات المرجع
1159133
Scribunto
text/plain
local export = {}
--[=[
This module implements {{ar-conj}} and provides the underlying conjugation functions for {{ar-verb}}
(whose actual formatting is done in [[Module:ar-headword]]).
Author: User:Benwing, from an early version (2013-2014) by User:Atitarev, User:ZxxZxxZ.
]=]
--[=[
TERMINOLOGY:
-- "slot" = A particular combination of tense/mood/person/number/etc.
Example slot names for verbs are "past_1s" (past tense first-person singular), "juss_pass_3fp" (non-past jussive
passive third-person feminine plural) "ap" (active participle). Each slot is filled with zero or more forms.
-- "form" = The conjugated Arabic form representing the value of a given slot.
-- "lemma" = The dictionary form of a given Arabic term. For Arabic, normally the third person masculine singular past,
although other forms may be used if this form is missing (e.g. in passive-only verbs or verbs lacking the past).
]=]
--[=[
FIXME:
1. Finish unimplemented conjugation types. Only IX-final-weak left (extremely rare, possibly only one verb اِعْمَايَ
(according to Haywood and Nahmad p. 244, who are very specific about the irregular occurrence of alif + yā instead
of expected اِعْمَيَّ with doubled yā). Not in Hans Wehr. NOTE: Not true about this, cf. form IX اِرْعَوَى "to desist,
to repent, to see the light". Also note form XII اِخْضَوْضَرَ = form IX اِخْضَرَّ "to be or become green".
[DONE except for اِعْمَايَ]
2. Implement irregular verbs as special cases and recognize them, e.g.
-- laysa "to not be"; only exists in the past tense, no non-past, no imperative, no participles, no passive, no
verbal noun. Irregular alternation las-/lays-. [IMPLEMENTABLE USING OVERRIDES]
-- istaḥā yastaḥī "be ashamed of" -- this is complex according to Hans Wehr because there are two verbs, regular
istaḥyā yastaḥyī "to spare (someone)'s life" and irregular istaḥyā yastaḥyī "to be ashamed to face (someone)",
which is irregular because it has the alternate irregular form istaḥā yastaḥī which only applies to this meaning.
Currently we follow Haywood and Nahmad in saying that both varieties can be spelled istaḥyā/istaḥā/istaḥḥā, but we
should instead use a variant= param similar to حَيَّ to distinguish the two possibilities, and maybe not include
istaḥḥā.
-- ʿayya/ʿayiya yaʿayyu/yaʿyā "to not find the right way, be incapable of, stammer, falter, fall ill". This appears
to be a mixture of a geminate and final-weak verb. Unclear what the whole paradigm looks like. Do the
consonant-ending parts in the past follow the final-weak paradigm? Is it the same in the non-past? Or can you
conjugate the non-past fully as either geminate or final-weak?
-- اِنْمَحَى inmaḥā or يمَّحَى immaḥā "to be effaced, obliterated; to disappear, vanish" has irregular assimilation of inm-
to imm- as an alternative. inmalasa "to become smooth; to glide; to slip away; to escape" also has immalasa as an
alternative. The only other form VII verbs in Hans Wehr beginning with -m- are inmalaḵa "to be pulled out, torn
out, wrenched" and inmāʿa "to be melted, to melt, to dissolve", which are not listed with imm- alternatives, but
might have them; if so, we should handle this generally. [DONE]
-- يَرَعَ yaraʕa yariʕu "to be a coward, to be chickenhearted" as an alternative form of يَرِعَ yariʕa yayraʕu (as given in
Wehr). [IMPLEMENTABLE USING OVERRIDES]
3. Implement individual override parameters for each paradigm part. See Module:fro-verb for an example of how to do this
generally. Note that {{temp|ar-conj-I}} and other of the older templates already had such individual override params.
[DONE]
Irregular verbs already implemented:
-- [ḥayya/ḥayiya yaḥyā "live" -- behaves like a normal final-weak verb
(e.g. past first singular ḥayītu) except in the past-tense parts with
vowel-initial endings (all the third person except for the third feminine
plural). The normal singular and dual endings have -yiya- in them, which
compresses to -yya-, with the normal endings the less preferred ones.
In masculine third plural, expected ḥayū is replaced by ḥayyū by
analogy to the -yy- parts, and the regular form is not given as an
alternant in John Mace. Barron's 201 verbs appears to have the regular
ḥayū as the part, however. Note also that final -yā appears with tall
alif. This appears to be a spelling convention of Arabic, also applying
in ḥayyā (form II, "to keep (someone) alive") and 'aḥyā (form IV,
"to animate, revive, give birth to, give new life to").] -- implemented
-- [ittaxadha yattaxidhu "take"] -- implemented
-- [sa'ala yas'alu "ask" with alternative jussive/imperative yasal/sal] -- implemented
-- [ra'ā yarā "see"] -- implemented
-- ['arā yurī "show"] -- implemented
-- ['akala ya'kulu "eat" with imperative kul] -- implemented
-- ['axadha ya'xudhu "take" with imperative xudh] -- implemented
-- ['amara ya'muru "order" with imperative mur] -- implemented
--]=]
-- if true, always maintain manual translit during processing, and compare against full translit at the end
local debug_translit = false
local lang = require("Module:languages").getByCode("ar")
local m_links = require("Module:links")
local m_string_utilities = require("Module:string utilities")
local m_table = require("Module:table")
local ar_utilities = require("Module:ar-utilities")
local iut = require("Module:inflection utilities")
local put = require("Module:parse utilities")
local list_to_text = mw.text.listToText
local rfind = m_string_utilities.find
local rsubn = m_string_utilities.gsub
local rmatch = m_string_utilities.match
local rsplit = m_string_utilities.split
local usub = m_string_utilities.sub
local ulen = m_string_utilities.len
local u = m_string_utilities.char
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local dump = mw.dumpObject
-- Within this module, conjugations are the functions that do the actual
-- conjugating by creating the parts of a basic verb.
-- They are defined further down.
local conjugations = {}
-- hamza variants
local HAMZA = u(0x0621) -- hamza on the line (stand-alone hamza) = ء
local HAMZA_ON_ALIF = u(0x0623)
local HAMZA_ON_W = u(0x0624)
local HAMZA_UNDER_ALIF = u(0x0625)
local HAMZA_ON_Y = u(0x0626)
local HAMZA_ANY = "[" .. HAMZA .. HAMZA_ON_ALIF .. HAMZA_UNDER_ALIF .. HAMZA_ON_W .. HAMZA_ON_Y .. "]"
local HAMZA_PH = u(0xFFF0) -- hamza placeholder
local BAD = u(0xFFF1)
local BORDER = u(0xFFF2)
local KEEP_W_PH = u(0xFFF3) -- retained-wāw placeholder; see postprocess_term()
local KEEP_HAMZA_PH = u(0xFFF4) -- quiescent-hamza placeholder; see postprocess_term()
local WAW_SEAT_PH = u(0xFFF5) -- pre-seated hamza-on-wāw placeholder; see postprocess_term()
local NO_MADDA_PH = u(0xFFF6) -- hamza held back from the madda rule; see postprocess_term()
-- diacritics
local A = u(0x064E) -- fatḥa
local AN = u(0x064B) -- fatḥatān (fatḥa tanwīn)
local U = u(0x064F) -- ḍamma
local UN = u(0x064C) -- ḍammatān (ḍamma tanwīn)
local I = u(0x0650) -- kasra
local IN = u(0x064D) -- kasratān (kasra tanwīn)
local SK = u(0x0652) -- sukūn = no vowel
local SH = u(0x0651) -- šadda = gemination of consonants
local DAGGER_ALIF = u(0x0670)
local DIACRITIC_ANY_BUT_SH = "[" .. A .. I .. U .. AN .. IN .. UN .. SK .. DAGGER_ALIF .. "]"
-- Pattern matching short vowels
local AIU = "[" .. A .. I .. U .. "]"
-- Pattern matching short vowels or sukūn
local AIUSK = "[" .. A .. I .. U .. SK .. "]"
-- Pattern matching any diacritics that may be on a consonant
local DIACRITIC = SH .. "?" .. DIACRITIC_ANY_BUT_SH
-- translit_patterns
local vowels = "aeiouāēīōū"
local NV = "[^" .. vowels .. "]"
local dia = {a = A, i = I, u = U}
local undia = {[A] = "a", [I] = "i", [U] = "u", ["-"] = "-"}
-- various letters and signs
local ALIF = u(0x0627) -- ʾalif = ا
local AMAQ = u(0x0649) -- ʾalif maqṣūra = ى
local AMAD = u(0x0622) -- ʾalif madda = آ
local TAM = u(0x0629) -- tāʾ marbūṭa = ة
local T = u(0x062A) -- tāʾ = ت
local HYPHEN = u(0x0640)
local N = u(0x0646) -- nūn = ن
local W = u(0x0648) -- wāw = و
local Y = u(0x064A) -- yāʾ = ي
local S = "س"
local M = "م"
local LRM = u(0x200e) -- left-to-right mark
-- common combinations
local AH = A .. TAM
local AT = A .. T
local AA = A .. ALIF
local AAMAQ = A .. AMAQ
local AAH = AA .. TAM
local AAT = AA .. T
local II = I .. Y
local UU = U .. W
local AY = A .. Y
local AW = A .. W
local AYSK = AY .. SK
local AWSK = AW .. SK
local NA = N .. A
local NI = N .. I
local AAN = AA .. N
local AANI = AA .. NI
local AYNI = AYSK .. NI
local AWNA = AWSK .. NA
local AYNA = AYSK .. NA
local AYAAT = AY .. AAT
local UNU = "[" .. UN .. U .. "]"
local MA = M .. A
local MU = M .. U
local TA = T .. A
local TU = T .. U
local _I = ALIF .. I
local _U = ALIF .. U
--W: Morphological pattern (الوزن الصرفي) to verb form mapping
local MORPHOLOGICAL_PATTERN_TO_FORM = {
["فعَل يفعُل"] = "I/a~u",
["فعَل يفعِل"] = "I/a~i",
["فعَل يفعَل"] = "I/a~a",
["فعُل يفعُل"] = "I/u~u",
["فعِل يفعَل"] = "I/i~a",
["فعِل يفعِل"] = "I/i~i",
["فعّل"] = "II",
["فاعل"] = "III",
["أفعل"] = "IV",
["تفعّل"] = "V",
["تفاعل"] = "VI",
["انفعل"] = "VII",
["افتعل"] = "VIII",
["افعلّ"] = "IX",
["استفعل"] = "X",
["افعالّ"] = "XI",
["افعوعل"] = "XII",
["افعوّل"] = "XIII",
["فعلل"] = "Iq",
["تفعلل"] = "IIq",
["افعنلل"] = "IIIq", -- "XIV" should not be used
["افعللّ"] = "IVq",
}
--W: Create reverse mapping from form to morphological pattern
local FORM_TO_MORPHOLOGICAL_PATTERN = {}
for pattern, form in pairs(MORPHOLOGICAL_PATTERN_TO_FORM) do
FORM_TO_MORPHOLOGICAL_PATTERN[form] = pattern
end
--W:
local MORPHOLOGICAL_PATTERN_TO_BASIC_DERIV = {
["فعَل يفعُل"] = "مُجرَّد",
["فعَل يفعِل"] = "مُجرَّد",
["فعَل يفعَل"] = "مُجرَّد",
["فعُل يفعُل"] = "مُجرَّد",
["فعِل يفعَل"] = "مُجرَّد",
["فعِل يفعِل"] = "مُجرَّد",
["فعّل"] = "مزيد بحرف",
["فاعل"] = "مزيد بحرف",
["أفعل"] = "مزيد بحرف",
["تفعّل"] = "مزيد بحرفين",
["تفاعل"] = "مزيد بحرفين",
["انفعل"] = "مزيد بحرفين",
["افتعل"] = "مزيد بحرفين",
["افعلّ"] = "مزيد بحرفين",
["استفعل"] = "مزيد بثلاثة أحرف",
["افعالّ"] = "مزيد بثلاثة أحرف",
["افعوعل"] = "مزيد بثلاثة أحرف",
["افعوّل"] = "مزيد بثلاثة أحرف",
["فعلل"] = "مُجرَّد",
["تفعلل"] = "مزيد بحرف",
["افعنلل"] = "مزيد بحرفين",
["افعللّ"] = "مزيد بحرفين",
}
local translit_cache = {
-- hamza variants
[HAMZA] = "ʔ",
[HAMZA_ON_ALIF] = "ʔ",
[HAMZA_ON_W] = "ʔ",
[HAMZA_UNDER_ALIF] = "ʔ",
[HAMZA_ON_Y] = "ʔ",
[HAMZA_PH] = "ʔ",
-- diacritics
[A] = "a",
[AN] = "an",
[U] = "u",
[UN] = "un",
[I] = "i",
[IN] = "in",
[SK] = "",
[SH] = "*", -- handled specially
[DAGGER_ALIF] = "ā",
-- various letters and signs
[""] = "",
[ALIF] = BAD, -- we should never be transliterating ALIF by itself, as its translit in isolation is ambiguous
[AMAQ] = BAD,
[AMAD] = "ʔā",
[TAM] = "",
[T] = "t",
[N] = "n",
[W] = "w",
[Y] = "y",
[S] = "s",
[M] = "m",
[LRM] = "",
-- common combinations
[AH] = "a",
[AT] = "at",
[AA] = "ā",
[AAMAQ] = "ā",
[AAH] = "āh",
[AAT] = "āt",
[II] = "ī",
[UU] = "ū",
[AY] = "ay",
[AW] = "aw",
[AYSK] = "ay",
[AWSK] = "aw",
[NA] = "na",
[NI] = "ni",
[AAN] = "ān",
[AANI] = "āni",
[AYNI] = "ayni",
[AWNA] = "awna",
[AYNA] = "ayna",
[AYAAT] = "ayāt",
[MA] = "ma",
[MU] = "mu",
[TA] = "ta",
[TU] = "tu",
[_I] = "i",
[_U] = "u",
}
local function transliterate(text)
local cached = translit_cache[text]
if cached then
if cached == BAD then
error(("Internal error: Unable to transliterate %s because explicitly marked as BAD"):format(text))
end
return cached
end
local tr = (lang:transliterate(text))
if not tr then
error(("Internal error: Unable to transliterate: %s"):format(text))
end
translit_cache[text] = tr
return tr
end
local all_person_number_list = {
"1s",
"2ms",
"2fs",
"3ms",
"3fs",
"2d",
"3md",
"3fd",
"1p",
"2mp",
"2fp",
"3mp",
"3fp"
}
local function make_person_number_slot_accel_list(list)
local slot_accel_list = {}
return slot_accel_list
end
local imp_person_number_list = {}
for _, pn in ipairs(all_person_number_list) do
if pn:find("^2") then
table.insert(imp_person_number_list, pn)
end
end
local passive_types = m_table.listToSet {
"pass", -- verb has both active and passive
"ipass", -- verb is active with impersonal passive
"nopass", -- verb is active-only
"onlypass", -- verb is passive-only
"onlypass-impers", -- verb itself is impersonal, meaning passive-only with impersonal passive
}
local indicator_flags = m_table.listToSet {
"nopast", "no_nonpast", "noimp",
"nocat", -- don't categorize or include annotations about this; useful in suppletive parts of verbs
"reduced", -- verb has assimilation/reduction of initial coronals
"altgem", -- form X with alternative past geminate forms with final-weak endings
}
export.potential_lemma_slots = {"past_3ms", "past_pass_3ms", "ind_3ms", "ind_pass_3ms", "imp_2ms"}
export.unsettable_slots = {}
for _, potential_lemma_slot in ipairs(export.potential_lemma_slots) do
table.insert(export.unsettable_slots, potential_lemma_slot .. "_linked")
end
-- We don't set the active participle directly for form I because we don't want stative verbs (with past vowel i or u)
-- to default to فَاعِل. Instead we set the special slot 'ap1' and later copy it to 'ap' for non-stative verbs. The user
-- meanwhile can explicitly request the فَاعِل form for active participles for stative verbs using `ap:+`.
table.insert(export.unsettable_slots, "ap1") -- primary default فَاعِل for form I active participles
table.insert(export.unsettable_slots, "ap2") -- secondary default فَعِيل for form I active participles (stative I)
table.insert(export.unsettable_slots, "ap3") -- secondary default فَعِل for form I active participles (stative II)
table.insert(export.unsettable_slots, "apcd") -- secondary default أَفْعَل for form I active participles (color/defect)
table.insert(export.unsettable_slots, "apan") -- secondary default فَعْلَان for form I active participles (in -ān)
table.insert(export.unsettable_slots, "pp2") -- secondary default فَعِيل for form I passive participles (same as ap2)
table.insert(export.unsettable_slots, "vn2") -- secondary default فِعَال for form III verbal nouns
export.unsettable_slots_set = m_table.listToSet(export.unsettable_slots)
local default_indicator_to_active_participle_slot = {
["+"] = "ap1",
["++"] = "ap2",
["+++"] = "ap3",
["+cd"] = "apcd",
["+an"] = "apan",
}
local slots_that_may_be_uncertain = {
vn = "verbal noun",
ap = "active participle",
}
-- Initialize all the slots for which we generate forms.
local function add_slots(alternant_multiword_spec)
alternant_multiword_spec.verb_slots = {
{"ap", "act|part"},
{"pp", "pass|part"},
{"vn", "vnoun"},
}
for _, unsettable_slot in ipairs(export.unsettable_slots) do
table.insert(alternant_multiword_spec.verb_slots, {unsettable_slot, "-"})
end
-- Add entries for a slot with person/number variants.
-- `slot_prefix` is the prefix of the slot, typically specifying the tense/aspect.
-- `tag_suffix` is a string listing the set of inflection tags to add after the person/number tags.
-- `person_number_list` is a list of the person/number slot suffixes to add to `slot_prefix`.
local function add_personal_slot(slot_prefix, tag_suffix, person_number_list)
for _, persnum in ipairs(person_number_list) do
local slot = slot_prefix .. "_" .. persnum
local accel = persnum:gsub("(.)", "%1|") .. tag_suffix
table.insert(alternant_multiword_spec.verb_slots, {slot, accel})
end
end
local tenses = {
{"past", "past|%s"},
{"ind", "non-past|%s|ind"},
{"sub", "non-past|%s|sub"},
{"juss", "non-past|%s|juss"},
}
for _, slot_accel in ipairs(tenses) do
local slot, accel = unpack(slot_accel)
for _, voice in ipairs {"act", "pass"} do
add_personal_slot(voice == "act" and slot or slot .. "_pass", accel:format(voice),
all_person_number_list)
end
end
add_personal_slot("imp", "imp", imp_person_number_list)
alternant_multiword_spec.verb_slots_map = {}
for _, slot_accel in ipairs(alternant_multiword_spec.verb_slots) do
local slot, accel = unpack(slot_accel)
alternant_multiword_spec.verb_slots_map[slot] = accel
end
end
local overridable_stems = {}
local slot_override_param_mods = {
footnote = {
item_dest = "footnotes",
store = "insert",
},
alt = {},
t = {
-- [[Module:links]] expects the gloss in "gloss".
item_dest = "gloss",
},
gloss = {},
g = {
-- [[Module:links]] expects the genders in "g". `sublist = true` automatically splits on comma (optionally
-- with surrounding whitespace).
item_dest = "genders",
sublist = true,
},
pos = {},
lit = {},
id = {},
--W: The q/qq/l/ll (qualifier and label) modifiers were removed: rendering them
-- needs [[Module:pron qualifier]], which does not exist on ar.wiktionary, so any
-- use of them raised a script error. Accepting them here again requires importing
-- that module first and restoring the block in generate_link() below.
}
local function generate_obj(formval, parse_err, prefix, is_slot_override)
local val, uncertain = formval:match("^(.*)(%?)$")
val = val or formval
uncertain = not not uncertain
local ar, translit = val:match("^(.*)//(.*)$")
if not ar then
ar = val
end
if ar == "" then
if uncertain then
ar = "?"
else
error(("Can't specify blank value for override for %s override '%s'"):format(
is_slot_override and "slot" or "stem", prefix))
end
end
return {form = ar, translit = translit, uncertain = uncertain}
end
local function parse_inline_modifiers(comma_separated_group, parse_err, prefix, is_slot_override)
local function this_generate_obj(formval, parse_err)
return generate_obj(formval, parse_err, prefix, is_slot_override)
end
return put.parse_inline_modifiers_from_segments {
group = comma_separated_group,
props = {
param_mods = slot_override_param_mods,
parse_err = parse_err,
generate_obj = this_generate_obj,
pre_normalize_modifiers = function(data)
local modtext = data.modtext
modtext = modtext:match("^(%[.*%])$")
if modtext then
return ("<footnote:%s>"):format(modtext)
end
return data.modtext
end,
},
}
end
local function allow_multiple_values_for_override(comma_separated_groups, data, is_slot_override)
local retvals = {}
for _, comma_separated_group in ipairs(comma_separated_groups) do
local retval
if is_slot_override then
--W: pass `prefix` and `is_slot_override` through; without them the error
-- raised for a blank override value formatted a nil prefix, which is a
-- crash on Lua 5.1 rather than the intended message. Reachable from e.g.
-- <I/a~u.vn:[[كتابة]]>, where the [[...]] is consumed as a footnote and
-- leaves the value empty.
retval = parse_inline_modifiers(comma_separated_group, data.parse_err, data.prefix,
is_slot_override)
else
retval = generate_obj(comma_separated_group[1], data.parse_err, data.prefix, is_slot_override)
retval.footnotes = data.fetch_footnotes(comma_separated_group)
end
table.insert(retvals, retval)
end
for _, form in ipairs(retvals) do
if form.form == "+" or default_indicator_to_active_participle_slot[form.form] then
if form.form ~= "+" and default_indicator_to_active_participle_slot[form.form] and not is_slot_override then
error(("Stem override '%s' cannot use %s to request a secondary default"):format(
data.prefix, form.form))
end
data.base.slot_override_uses_default[data.prefix] = true
end
end
for _, form in ipairs(retvals) do
if form.form == "-" then
data.base.slot_explicitly_missing[data.prefix] = true
break
end
end
if data.base.slot_explicitly_missing[data.prefix] then
for _, form in ipairs(retvals) do
if form.form ~= "-" then
data.parse_err(("For slot or stem '%s', saw both - and a value other than -, which isn't allowed"):
format(data.prefix))
end
end
return nil
end
return retvals
end
local function simple_choice(choices)
return function(separated_groups, data)
if #separated_groups > 1 then
data.parse_err("For spec '" .. data.prefix .. ":', only one value currently allowed")
end
if #separated_groups[1] > 1 then
data.parse_err("For spec '" .. data.prefix .. ":', no footnotes currently allowed")
end
local choice = separated_groups[1][1]
if not m_table.contains(choices, choice) then
data.parse_err("For spec '" .. data.prefix .. ":', saw value '" .. choice .. "' but expected one of '" ..
table.concat(choices, "،") .. "'")
end
return choice
end
end
for _, overridable_stem in ipairs {
"past",
"past_v",
"past_c",
"past_pass",
"past_pass_v",
"past_pass_c",
"nonpast",
"nonpast_v",
"nonpast_c",
"nonpast_pass",
"nonpast_pass_v",
"nonpast_pass_c",
"imp",
"imp_v",
"imp_c",
} do
overridable_stems[overridable_stem] = allow_multiple_values_for_override
end
overridable_stems.past_final_weak_vowel = simple_choice { "ay", "aw", "ī", "ū" }
overridable_stems.past_pass_final_weak_vowel = simple_choice { "ay", "aw", "ī", "ū" }
overridable_stems.nonpast_final_weak_vowel = simple_choice { "ā", "ī", "ū" }
overridable_stems.nonpast_pass_final_weak_vowel = simple_choice { "ā", "ī", "ū" }
-------------------------------------------------------------------------------
-- Utility functions --
-------------------------------------------------------------------------------
-- version of rsubn() that discards all but the first return value
local function rsub(term, foo, bar)
return (rsubn(term, foo, bar))
end
-- version of rsubn() that returns a 2nd argument boolean indicating whether a substitution was made.
local function rsubb(term, foo, bar)
local retval, nsubs = rsubn(term, foo, bar)
return retval, nsubs > 0
end
-- Concatenate one or more strings or form objects.
local function q(...)
local not_all_strings = debug_translit
local has_manual_translit = debug_translit
for i = 1, select("#", ...) do
local argt = select(i, ...)
if not argt then
error(("Internal error: Saw nil at index %s: %s"):format(i, dump({...})))
end
if type(argt) ~= "string" then
not_all_strings = true
if argt.translit then
has_manual_translit = true
break
end
end
end
if not not_all_strings then
-- just strings, concatenate directly
return table.concat({...})
end
local formvals = {}
local translit = has_manual_translit and {} or nil
local footnotes
for i = 1, select("#", ...) do
local argt = select(i, ...)
if type(argt) == "string" then
formvals[i] = argt
if has_manual_translit then
translit[i] = transliterate(argt)
end
else
formvals[i] = argt.form
if has_manual_translit then
translit[i] = argt.translit or transliterate(argt.form)
end
footnotes = iut.combine_footnotes(footnotes, argt.footnotes)
end
end
-- FIXME: Do we want to support other properties?
return {
form = table.concat(formvals),
translit = has_manual_translit and table.concat(translit) or nil,
footnotes = footnotes,
}
end
-- Return the formval associated with `rad` (a radical or past/non-past vowel, either a string or form object).
local function rget(rad)
if type(rad) == "string" then
return rad
elseif type(rad) == "table" then
return rad.form
else
error(("Internal error: Unexpected type for radical or past/non-past vowel: %s"):format(dump(rad)))
end
end
export.rget = rget -- for use in [[Module:ar-headword]]
-- Return the footnotes associated with `rad` (a radical or past/non-past vowel, either a string or form object).
local function rget_footnotes(rad)
if type(rad) == "string" then
return nil
elseif type(rad) == "table" then
return rad.footnotes
else
error(("Internal error: Unexpected type for radical or past/non-past vowel: %s"):format(dump(rad)))
end
end
-- Return true if the formval associated with `rad` (a radical or past/non-past vowel, either a string or form object)
-- is `val`.
local function req(rad, val)
return rget(rad) == val
end
-- True if a form-I verb whose first radical is wāw elides that wāw in the non-past (يَعِدُ for
-- *يَوْعِدُ) rather than keeping it (يَوْجَلُ). The elision belongs to the kasra non-past -- a~i
-- وَعَدَ يَعِدُ, i~i وَرِثَ يَرِثُ -- and to the fatḥa non-past that is a throat-letter lowering of
-- that same underlying kasra: a~a وَضَعَ يَضَعُ, وَهَبَ يَهَبُ. Everywhere else the wāw stays:
-- i~a وَجِلَ يَوْجَلُ، وَنِيَ يَوْنَى (a fatḥa non-past that is the regular partner of a kasra past,
-- not a lowered kasra)
-- *~u وَجَلَ يَوْجُلُ، وَجُهَ يَوْجُهُ (a ḍamma non-past is never a lowered kasra)
-- The two elided-anyway lexemes with a kasra past (وَسِعَ يَسَعُ, وَطِئَ يَطَأُ) are lexical and are
-- what the explicit `I-assimilated` weakness exists to express -- see the comment on it in
-- detect_indicator_spec().
--
-- The u-non-past half of this is attested directly: أنطوان الدحداح، معجم تصريف الأفعال العربية
-- prints يَوْجُلُ/اُوْجُلْ for وَجَلَ (ص136) and says so in the page's own note -- "لا تُحذَفُ واوُ
-- الفعلِ في المُضارعِ ولا تُقلَبُ في الأمرِ" -- and يَوْنَى/اِوْنَ for وَنِيَ (ص230).
--
-- Returns true when the vowels aren't known, which keeps the historical default for callers
-- that have radicals but no vowel pattern.
--W: Lexical exceptions to the rule below, keyed root..":"..past..nonpast so that a
-- listed verb is listed for the measure its source attests and no other. Both
-- directions occur and the vowels do not predict either:
--
-- وَطِئَ ـَ the i~a pattern normally keeps the wāw (وَجِلَ ـَ / يَوْجَلُ) and this
-- one drops it -- يَطَأُ, طَأْ, printed through both columns of نموذج 155.
-- Upstream's own commentary on this function names the verb: "there are
-- naturally exceptions, e.g. waṭiʔa~yaṭaʔu 'to tread, to trample'".
-- وَبَأَ ـَ the a~a pattern normally drops it (وَضَعَ / يَضَعُ) and this one keeps
-- it -- يَوْبَأُ, يَوْبَآنِ, يَوْبَؤُونَ, إِيبَأْ, printed through نموذج 135.
--
-- Same instrument as GEMINATE_ITBAA_ROOTS and for the same reason: the fact is about
-- the lexeme, so listing it is the only honest way to hold it, and listing keeps every
-- other root of the same shape exactly where it was.
local FORM_I_W_ASSIMILATION = {
["وطء:ia"] = true, -- وَطِئَ ـَ / يَطَأُ / طَأْ: الدحداح، نموذج 155
["وبء:aa"] = false, -- وَبَأَ ـَ / يَوْبَأُ / إِيبَأْ: الدحداح، نموذج 135
}
local function vowel_letter(v)
return req(v, A) and "a" or req(v, I) and "i" or req(v, U) and "u" or "?"
end
local function form_i_w_assimilated(past_vowel, nonpast_vowel, rad1, rad2, rad3)
if not past_vowel or not nonpast_vowel then
return true
end
if rad1 and rad2 and rad3 then
local listed = FORM_I_W_ASSIMILATION[rad1 .. rad2 .. rad3 .. ":" ..
vowel_letter(past_vowel) .. vowel_letter(nonpast_vowel)]
if listed ~= nil then
return listed
end
end
return req(nonpast_vowel, I) or req(nonpast_vowel, A) and req(past_vowel, A)
end
--W: Geminate form-I roots whose degemination vowel follows the مضارع by إتباع.
-- When gemination breaks under a consonant-initial suffix, the vowel that surfaces on the
-- second radical (مَدَدْتَ's second د) is normally the verb's own past vowel, which the وزن
-- fixes at one value per measure: فتح for فعَل يفعُل (مَدَدْتَ، فَرَرْتَ، عَضَضْتَ), كسر for
-- فعِل يفعَل (ظَلِلْتَ). Classical grammar also attests a minority إتباع variant on the
-- فعَل يفعُل measure, where that vowel instead follows the مضارع's own ضمة (هَمُمْتَ). Which
-- of the two a given verb takes is a fact about the lexeme, not about its وزن -- هَمَّ and
-- مَدَّ share the measure and differ here -- so it cannot be derived from جذر + وزن and is
-- listed, the same way SOUND_FORM_I_UU_ROOTS lists هَيُؤَ. Keyed rad1..rad2..rad3 and gated
-- on the a~u pattern, so a listed root still degeminates normally under any other pattern.
local GEMINATE_ITBAA_ROOTS = {
["همم"] = true, -- هَمَّ ـُ: أنطوان الدحداح، معجم تصريف الأفعال العربية، ص192
-- The Template-B page of the same model number, which prints two more of them:
["عشش"] = true, -- عَشَّ ـُ / عَشُشْتُ: الدحداح، نموذج 141
["فكك"] = true, -- فَكَّ ـُ / فَكُكْتُ: الدحداح، نموذج 141
}
-- The vowel that surfaces on the second radical of a geminate form-I verb once gemination
-- breaks. `past_vowel` unless the root is an attested إتباع lexeme; see GEMINATE_ITBAA_ROOTS.
local function geminate_degemination_vowel(rad1, rad2, rad3, past_vowel, nonpast_vowel)
if past_vowel and nonpast_vowel and req(past_vowel, A) and req(nonpast_vowel, U)
and GEMINATE_ITBAA_ROOTS[rad1 .. rad2 .. rad3] then
return nonpast_vowel
end
return past_vowel
end
--W: Form-I final-weak roots that keep rad3 as a consonant in the 2fs non-past and
-- imperative (تَسْهُوِينَ، اُسْهُوِي) instead of contracting it away (تَسْهِينَ، اِسْهِي).
--
-- This was briefly gated on the فعُل يفعُل measure alone, then narrowed to a root table,
-- then widened back to the measure -- and the middle step is why. The argument for the
-- measure was always that the measure is what keeps rad3 consonantal in the first place
-- (its past 3ms is سَهُوَ, not the سَها an a~u root like دَعَا gives), but at the time the
-- corpus held exactly one فعُل يفعُل final-weak page, so there was no second paradigm to
-- check it against and the rule it displaces -- contract before the 2fs -ī, as دَعَا does --
-- was the one the module had applied for years. Generalising an unverified reading over a
-- whole class of live entries is the wrong direction to be wrong in, so it went back to
-- listing سهو alone, keyed and gated exactly like SOUND_FORM_I_UU_ROOTS.
--
-- Checkpoint 4 supplied the second page, and it answers the question. p222 (model 147)
-- prints TWO فعُل يفعُل final-weak paradigms, حَلُوَ and سَرُوَ, and both retain rad3 in both
-- eligible slots: تَحْلُوِينَ / اُحْلُوِي and تَسْرُوِينَ / اُسْرُوِي, the wāw carrying its kasra
-- under it, all four read at 6x off the strip against the same columns' يَحْلُونَ / يَسْرُونَ.
-- Two independent roots, one page, agreeing with سهو on p204 -- and سَرُوَ is precisely the
-- root the narrowing had put back to تَسْرِينَ, so the cautious reading is the one the ink
-- refutes. So the gate is the vowel pattern after all and the table is gone.
local function final_weak_uu_retains_rad3(rad1, rad2, rad3, past_ending_vowel, nonpast_ending_vowel)
return past_ending_vowel == "ū" and nonpast_ending_vowel == "ū"
end
-- Map `vow` (a past/non-past vowel, either a string or form object without translit) by passing the formval through
-- `fn`. Don't call this on radicals because they may have manual translit and it isn't clear how to handle that.
local function map_vowel(vow, fn)
if type(vow) == "string" then
return fn(vow)
elseif type(vow) == "table" then
return {form = fn(vow.form), footnotes = vow.footnotes}
else
error(("Internal error: Unexpected type for past/non-past vowel: %s"):format(dump(vow)))
end
end
local function get_radicals_3(vowel_spec)
return vowel_spec.rad1, vowel_spec.rad2, vowel_spec.rad3, vowel_spec.past, vowel_spec.nonpast
end
local function get_radicals_4(vowel_spec)
return vowel_spec.rad1, vowel_spec.rad2, vowel_spec.rad3, vowel_spec.rad4
end
local function is_final_weak(base, vowel_spec)
return vowel_spec.weakness == "final-weak" or base.form == "XV"
end
--W: Create a simple link
local function link_term_simple(text)
return "[[" .. text .. "]]"
end
local function link_term(text, face, id)
return m_links.full_link({lang = lang, term = text, tr = "-", id = id}, face)
end
local function tag_text(text, tag, class)
return m_links.full_link({lang = lang, alt = text, tr = "-"})
end
local function track(page)
require("Module:debug/track")("ar-verb/" .. page)
return true
end
local function track_if_ar_conj(base, page)
if base.alternant_multiword_spec.source_template == "ar-conj" then
require("Module:debug/track")("ar-verb/" .. page)
end
return true
end
local function reorder_shadda(word)
-- shadda+short-vowel (including tanwīn vowels, i.e. -an -in -un) gets
-- replaced with short-vowel+shadda during NFC normalisation, which
-- MediaWiki does for all Unicode strings; however, it makes various
-- processes inconvenient, so undo it.
word = rsub(word, "(" .. DIACRITIC_ANY_BUT_SH .. ")" .. SH, SH .. "%1")
return word
end
local function apply_nfc_shadda(word)
-- Apply NFC-style normalization: reorder shadda+vowel to vowel+shadda
-- to match MediaWiki's automatic NFC normalization. This reverses the
-- internal shadda+vowel format used during processing.
word = rsub(word, SH .. "(" .. DIACRITIC_ANY_BUT_SH .. ")", "%1" .. SH)
return word
end
-------------------------------------------------------------------------------
-- Basic functions to inflect tenses --
-------------------------------------------------------------------------------
local function skip_slot(base, slot, allow_overrides)
if base.slot_explicitly_missing[slot] then
return true
end
if not allow_overrides and base.slot_overrides[slot] and not base.slot_override_uses_default[slot] then
-- Skip any slots for which there are overrides, except those that request the default value using +, ++, etc.
return true
end
if base.passive == "nopass" and (slot == "pp" or slot:find("_pass")) then
return true
elseif base.passive == "onlypass" and slot ~= "pp" and slot ~= "vn" and not slot:find("_pass") then
return true
elseif base.passive == "ipass" and slot:find("_pass") and not slot:find("3ms") then
return true
elseif base.passive == "onlypass-impers" and slot ~= "pp" and slot ~= "vn" and (not slot:find("_pass") or
slot:find("_pass") and not slot:find("3ms")) then
return true
end
if base.nopast and slot:find("^past_") then
return true
end
if base.noimp and slot:find("^imp_") then
return true
end
if base.no_nonpast and (slot:find("^ind_") or slot:find("^sub_") or slot:find("^juss")) then
return true
end
return false
end
local function basic_combine_stem_ending(stem, ending)
return stem .. ending
end
local function basic_combine_stem_ending_tr(stem, ending)
return stem .. ending
end
-- Concatenate `prefixes`, `stems` and `endings` (any of which may be an abbreviate form list, i.e. strings, form
-- objects or lists of strings or form objects) and store into `slot`. If a user-supplied override exists for the slot,
-- nothing will happen unless `allow_overrides` is provided.
local function add3(base, slot, prefixes, stems, endings, allow_overrides)
if skip_slot(base, slot, allow_overrides) then
return
end
-- Optimization since the prefixes are almost always single strings.
if type(prefixes) == "string" then
local function do_combine_stem_ending(stem, ending)
return prefixes .. stem .. ending
end
local function do_combine_stem_ending_tr(stem, ending)
return transliterate(prefixes) .. stem .. ending
end
iut.add_forms(base.forms, slot, stems, endings, do_combine_stem_ending, transliterate,
do_combine_stem_ending_tr, base.form_footnotes)
else
iut.add_multiple_forms(base.forms, slot, {prefixes, stems, endings}, basic_combine_stem_ending, transliterate,
basic_combine_stem_ending_tr, base.form_footnotes)
end
end
-- Insert one or more forms in `form_or_forms` into `slot`. `form_or_forms` is an abbreviated form list (see comment at
-- top of [[Module:inflection utilities]]). If a user-supplied override exists for the slot, nothing will happen unless
-- `allow_overrides` is provided. BEWARE: One form object should never occur in two different slots, or twice in a given
-- slot; if taking a form object from an existing slot, make sure to shallowCopy() it.
local function insert_form_or_forms(base, slot, form_or_forms, allow_overrides, uncertain)
if not skip_slot(base, slot, allow_overrides) then
-- Some optimizations of the most common case of inserting a single string.
if type(form_or_forms) == "string" and not base.form_footnotes then
form_or_forms = {form = form_or_forms, uncertain = uncertain}
iut.insert_form(base.forms, slot, form_or_forms)
else
local list = iut.convert_to_general_list_form(form_or_forms, base.form_footnotes)
if uncertain then
for _, formobj in ipairs(list) do
formobj.uncertain = true
end
end
iut.insert_forms(base.forms, slot, list)
end
end
end
-- Insert `string_or_form` into both the ap2 and pp2 slots, shallowCopying a form object to make sure no form objects
-- occur in two slots.
local function insert_ap2_pp2(base, string_or_form)
insert_form_or_forms(base, "ap2", string_or_form)
if type(string_or_form) == "table" then
string_or_form = m_table.shallowCopy(string_or_form)
end
insert_form_or_forms(base, "pp2", string_or_form)
end
-- Convert `stemforms` (a string, a form object, or a list of strings and/or form objects) into "general form" (a list
-- of form objects) and map `fn` over the list of objects. `fn` is passed two arguments (form value and translit) and
-- should likewise return the new form value and translit. Footnotes will be preserved. FIXME: Preserve other metadata.
local function map_general(stemforms, fn)
return iut.map_forms(iut.convert_to_general_list_form(stemforms), fn)
end
-- Similar to map_general() except that `fn` should return a single value (one or more strings or form objects), instead
-- of two values (form value and translit), and the resulting value(s) from all calls to `fn` will be flattened to
-- construct the overall return value. Footnotes will be preserved. FIXME: Preserve other metadata.
local function flatmap_general(stemforms, fn)
return iut.flatmap_forms(iut.convert_to_general_list_form(stemforms), fn)
end
-- Given user-supplied stem overrides in `base`, construct any derived stem overrides (e.g. vowel-specific or
-- consonant-specific variants), and truncate initial y-/ي- in any non-past overrides.
local function construct_stems(base)
local stems = base.stem_overrides
stems.past_v = stems.past_v or stems.past
stems.past_c = stems.past_c or stems.past
stems.past_pass_v = stems.past_pass_v or stems.past_pass
stems.past_pass_c = stems.past_pass_c or stems.past_pass
stems.nonpast_v = stems.nonpast_v or stems.nonpast
stems.nonpast_c = stems.nonpast_c or stems.nonpast
stems.nonpast_pass_v = stems.nonpast_pass_v or stems.nonpast_pass
stems.nonpast_pass_c = stems.nonpast_pass_c or stems.nonpast_pass
stems.imp_v = stems.imp_v or stems.imp
stems.imp_c = stems.imp_c or stems.imp
local function truncate_nonpast_initial_cons(stem_type, form, translit)
if form == "+" then
return form, translit
end
if not form:find("^" .. Y) then
error(("Form value %s for stem type '%s' should begin with ي"):format(form, stem_type))
end
form = form:gsub("^" .. Y, "")
if translit then
if not translit:find("^y") then
error(("Translit value %s for stem type '%s' should begin with y"):format(translit, stem_type))
end
translit = translit:gsub("^y", "")
end
return form, translit
end
for _, nonpast_stem_type in ipairs { "nonpast_v", "nonpast_c", "nonpast_pass_v", "nonpast_pass_c" } do
if stems[nonpast_stem_type] then
stems[nonpast_stem_type] = map_general(stems[nonpast_stem_type], function(form, translit)
return truncate_nonpast_initial_cons(nonpast_stem_type, form, translit)
end)
end
end
end
-- Given user-specified overrides for stem `stemname`, return overrides with occurrences of + replaced by
-- `default_stem`. If no overrides, return `default_stem`, or {} if no default.
local function override_stem_if_needed(base, stemname, default_stem)
local overrides = base.stem_overrides[stemname]
if not overrides then
return default_stem or {}
end
return map_general(overrides, function(form, translit)
if form ~= "+" and default_indicator_to_active_participle_slot[form] then
error(("Stem overrides cannot use secondary default indicators but saw %s in stem override '%s'"):format(
form, stemname))
end
if form == "+" then
if translit then
error(("Cannot supply manual translit along with + for stem override '%s'"):format(stemname))
end
if not default_stem then
error(("Cannot use + for stem override '%s' because no default is available"):format(stemname))
end
if type(default_stem) ~= "string" then
error(("Internal error: Default stem for '%s' is not a string: %s"):format(stemname, dump(default_stem)))
end
return default_stem
end
return form, translit
end)
end
-------------------------------------------------------------------------------
-- Properties of different verbal forms --
-------------------------------------------------------------------------------
local allowed_vforms = {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX",
"X", "XI", "XII", "XIII", "XIV", "XV", "Iq", "IIq", "IIIq", "IVq"}
local allowed_vforms_set = m_table.listToSet(allowed_vforms)
local allowed_vforms_with_weakness = m_table.shallowCopy(allowed_vforms)
-- The user needs to be able to explicitly specify that a form-I verb (specifically one whose initial radical is و) is
-- sound. Cf. wajiʕa yawjaʕu (not #yajaʕu) "to ache, to hurt". In general, i~a and u~u verbs whose initial radical is و
-- seem to not assimilate the first radical; cf. وقح "to be shameless", variously waqaḥa~yaqiḥu, waquḥa~yawquḥu and
-- waqiḥa~yawqaḥu, whereas a~i verbs (wafaḍa~yafiḍu "to rush"), i~i verbs (wafiqa~yafiqu "to be proper, to be suitable")
-- and a~a verbs (waḍaʕa~yaḍaʕu "to set down, to place") do assimilate. But there are naturally exceptions, e.g.
-- waṭiʔa~yaṭaʔu "to tread, to trample"; wasiʕa~yasaʕu "to be spacious; to be well-off"; waṯiʔa~yaṯaʔu "to get bruised,
-- to be sprained". Also beware of waniya~yawnā "to be faint; to languish", which is sound in the first radical and
-- final-weak in the last radical. Nonetheless, the regularity of the patterns mentioned above suggest we should provide
-- them as defaults.
-- Note that there are other cases of unexpectedly sound verbs, e.g. izdawaja~yazdawiju "to be in pairs", layisa~yalyasu
-- "to be valiant, to be brave", ʔaḥwaja~yuḥwiju "to need", istahwana~yastahwinu "to consider easy", sawisa~yaswasu "to
-- be or become moth-eaten or worm-eaten" (vs. sāsa~yasūsu "to govern, to rule" from the same radicals), ʕawira~yaʕwaru
-- "to be one-eyed", istajwaba~yastajwibu "to interrogate", etc. But in these cases there is no need for explicit user
-- specification as the lemma itself specifies the unexpected soundness.
for _, form_with_weakness in ipairs { "I-sound", "I-assimilated", "none-sound", "none-hollow", "none-geminate",
"none-final-weak" } do
table.insert(allowed_vforms_with_weakness, form_with_weakness)
end
local allowed_vforms_with_weakness_set = m_table.listToSet(allowed_vforms_with_weakness)
local function vform_supports_final_weak(vform)
return vform ~= "XI" and vform ~= "XV" and vform ~= "IVq"
end
local function vform_supports_geminate(vform)
return vform == "I" or vform == "III" or vform == "IV" or vform == "VI" or vform == "VII" or vform == "VIII" or
vform == "X"
end
local function vform_supports_hollow(vform)
return vform == "I" or vform == "IV" or vform == "VII" or vform == "VIII" or vform == "X"
end
local function vform_probably_impersonal_passive(vform, weakness, past_vowel, nonpast_vowel)
return vform == "I" and req(past_vowel, I) or vform == "V" or vform == "VI" or vform == "X" or vform == "IIq"
end
local function vform_probably_full_passive(vform)
return vform == "II" or vform == "III" or vform == "IV" or vform == "Iq"
end
local function vform_probably_no_passive(vform, weakness, past_vowel, nonpast_vowel)
return vform == "I" and req(past_vowel, U) or vform == "VII" or vform == "IX" or
vform == "XI" or vform == "XII" or vform == "XIII" or vform == "XIV" or vform == "XV" or
vform == "IIIq" or vform == "IVq"
end
-- Active vforms II, III, IV, Iq use non-past prefixes in -u- instead of -a-.
local function prefix_vowel_from_vform(vform)
if vform == "II" or vform == "III" or vform == "IV" or vform == "Iq" then
return "u"
else
return "a"
end
end
-- True if the active non-past takes a-vocalization rather than i-vocalization in its last syllable.
local function vform_nonpast_a_vowel(vform)
return vform == "V" or vform == "VI" or vform == "XV" or vform == "IIq"
end
-- True if the `passive` spec indicates a passive-only verb.
local function is_passive_only(passive)
return passive == "onlypass" or passive == "onlypass-impers"
end
export.is_passive_only = is_passive_only -- for use in [[Module:ar-headword]]
-------------------------------------------------------------------------------
-- Properties of specific sounds --
-------------------------------------------------------------------------------
-- Is radical wāw (و) or yāʾ (ي)?
local function is_waw_ya(rad)
return req(rad, W) or req(rad, Y)
end
-- Check that radical is wāw (و) or yāʾ (ي), error if not
local function check_waw_ya(rad)
if not is_waw_ya(rad) then
error("Expecting weak radical: '" .. rget(rad) .. "' should be " .. W .. " or " .. Y)
end
end
-- Form-I verb حيّ or حيي and form-X verb استحيا or استحى
local function hayy_radicals(rad1, rad2, rad3)
return req(rad1, "ح") and req(rad2, Y) and is_waw_ya(rad3)
end
-- FUCK ME HARD. "Lua error at line 1514: main function has more than 200 local variables".
local function create_conjugations()
-------------------------------------------------------------------------------
-- Radicals associated with various irregular verbs --
-------------------------------------------------------------------------------
-- Form-I verb أخذ or form-VIII verb اتخذ
local function axadh_radicals(rad1, rad2, rad3)
return req(rad1, HAMZA) and req(rad2, "خ") and req(rad3, "ذ")
end
-- Form-I verb whose imperative has a reduced form: أكل and أخذ and أمر. Return "shortonly" if only
-- short-form imperatives exist (أكل and أخذ) or "shortlong" if long-form imperatives also exist (أمر);
-- they are used after a clitic like فَ and وَ.
local function reduced_imperative_verb(rad1, rad2, rad3)
return axadh_radicals(rad1, rad2, rad3) and "shortonly" or
req(rad1, HAMZA) and req(rad2, "ك") and req(rad3, "ل") and "shortonly" or
req(rad1, HAMZA) and req(rad2, "م") and req(rad3, "ر") and "shortlong"
end
-- Form-I verb رأى and form-IV verb أرى
local function raa_radicals(rad1, rad2, rad3)
return req(rad1, "ر") and req(rad2, HAMZA) and is_waw_ya(rad3)
end
-- Form-I verb سأل
local function saal_radicals(rad1, rad2, rad3)
return req(rad1, "س") and req(rad2, HAMZA) and req(rad3, "ل")
end
-- Form-I verb كان
local function kaan_radicals(rad1, rad2, rad3)
return req(rad1, "ك") and req(rad2, W) and req(rad3, N)
end
-- Form-I hollow verb سالَ يَسالُ, the hamza-less variant of سَأَلَ. Distinct from
-- saal_radicals() above, which is the hamzated root itself.
local function saal_hollow_radicals(rad1, rad2, rad3)
return req(rad1, "س") and req(rad2, W) and req(rad3, "ل")
end
-------------------------------------------------------------------------------
-- Sets of past endings --
-------------------------------------------------------------------------------
-- The 13 endings of the sound/hollow/geminate past tense.
local past_endings = {
-- singular
SK .. TU, SK .. TA, SK .. "تِ", A, A .. "تْ",
--dual
SK .. "تُمَا", AA, A .. "تَا",
-- plural
SK .. "نَا", SK .. "تُمْ",
-- shadda + vowel diacritic ends up in the wrong order due to Unicode
-- bug, so keep them separate to avoid this
SK .. "تُن" .. SH .. A, UU .. ALIF, SK .. "نَ"
}
-- Make endings for final-weak past in -aytu or -awtu. AYAW is AY or AW as appropriate. Note that AA and AW are
-- global variables.
local function make_past_endings_ay_aw(ayaw, third_sg_masc)
return {
-- singular
ayaw .. SK .. TU, ayaw .. SK .. TA, ayaw .. SK .. "تِ",
third_sg_masc, A .. "تْ",
--dual
ayaw .. SK .. "تُمَا", ayaw .. AA, A .. "تَا",
-- plural
ayaw .. SK .. "نَا", ayaw .. SK .. "تُمْ",
-- shadda + vowel diacritic ends up in the wrong order due to Unicode
-- bug, so keep them separate to avoid this
ayaw .. SK .. "تُن" .. SH .. A, AW .. SK .. ALIF, ayaw .. SK .. "نَ"
}
end
-- past final-weak -aytu endings
local past_endings_ay = make_past_endings_ay_aw(AY, AAMAQ)
-- past final-weak -awtu endings
local past_endings_aw = make_past_endings_ay_aw(AW, AA)
-- used for alternative endings for form-X geminate verbs like اِسْتَمَرَّ
local past_endings_ay_12_person_only = {
-- singular
AY .. SK .. TU, AY .. SK .. TA, AY .. SK .. "تِ",
{}, {},
--dual
AY .. SK .. "تُمَا", {}, {},
-- plural
AY .. SK .. "نَا", AY .. SK .. "تُمْ",
-- shadda + vowel diacritic ends up in the wrong order due to Unicode
-- bug, so keep them separate to avoid this
AY .. SK .. "تُن" .. SH .. A, {}, {},
}
-- Make endings for final-weak past in -ītu or -ūtu. IIUU is ī or ū as appropriate. Note that AA and UU are global
-- variables.
local function make_past_endings_ii_uu(iiuu)
return {
-- singular
iiuu .. TU, iiuu .. TA, iiuu .. "تِ", iiuu .. A, iiuu .. A .. "تْ",
--dual
iiuu .. "تُمَا", iiuu .. AA, iiuu .. A .. "تَا",
-- plural
iiuu .. "نَا", iiuu .. "تُمْ",
-- shadda + vowel diacritic ends up in the wrong order due to Unicode
-- bug, so keep them separate to avoid this
iiuu .. "تُن" .. SH .. A, UU .. ALIF, iiuu .. "نَ"
}
end
-- past final-weak -ītu endings
local past_endings_ii = make_past_endings_ii_uu(II)
-- past final-weak -ūtu endings
local past_endings_uu = make_past_endings_ii_uu(UU)
-------------------------------------------------------------------------------
-- Sets of non-past prefixes and endings --
-------------------------------------------------------------------------------
local nonpast_prefix_consonants = {
-- singular
HAMZA, T, T, Y, T,
-- dual
T, Y, T,
-- plural
N, T, T, Y, Y
}
-- There are only five distinct endings in all non-past verbs. Make any set of non-past endings given these five
-- distinct endings.
local function make_nonpast_endings(null, fem, dual, pl, fempl)
return {
-- singular
null, null, fem, null, null,
-- dual
dual, dual, dual,
-- plural
null, pl, fempl, pl, fempl
}
end
-- endings for non-past indicative
local ind_endings = make_nonpast_endings(
U,
II .. NA,
AANI,
UU .. NA,
SK .. NA
)
-- Make the endings for non-past subjunctive/jussive, given the vowel diacritic used in "null" endings
-- (1s/2ms/3ms/3fs/1p).
local function make_sub_juss_endings(dia_null)
return make_nonpast_endings(
dia_null,
II,
AA,
UU .. ALIF,
SK .. NA
)
end
-- endings for non-past subjunctive
local sub_endings = make_sub_juss_endings(A)
-- endings for non-past jussive
local juss_endings = make_sub_juss_endings(SK)
-- endings for alternative geminate non-past jussive in -a; same as subjunctive
local juss_endings_alt_a = sub_endings
-- endings for alternative geminate non-past jussive in -i
local juss_endings_alt_i = make_sub_juss_endings(I)
-- Endings for final-weak non-past indicative in -ā. Note that AY, AW and AAMAQ are global variables.
local ind_endings_aa = make_nonpast_endings(
AAMAQ,
AYSK .. NA,
AY .. AANI,
AWSK .. NA,
AYSK .. NA
)
-- Make endings for final-weak non-past indicative in -ī or -ū; IIUU is ī or ū as appropriate. Note that II and UU
-- are global variables.
local function make_ind_endings_ii_uu(iiuu)
return make_nonpast_endings(
iiuu,
II .. NA,
iiuu .. AANI,
UU .. NA,
iiuu .. NA
)
end
-- endings for final-weak non-past indicative in -ī
local ind_endings_ii = make_ind_endings_ii_uu(II)
-- endings for final-weak non-past indicative in -ū
local ind_endings_uu = make_ind_endings_ii_uu(UU)
-- Endings for final-weak non-past subjunctive in -ā. Note that AY, AW, ALIF, AAMAQ are global variables.
local sub_endings_aa = make_nonpast_endings(
AAMAQ,
AYSK,
AY .. AA,
AWSK .. ALIF,
AYSK .. NA
)
-- Make endings for final-weak non-past subjunctive in -ī or -ū. IIUU is ī or ū as appropriate. Note that AA, II,
-- UU, ALIF are global variables.
local function make_sub_endings_ii_uu(iiuu)
return make_nonpast_endings(
iiuu .. A,
II,
iiuu .. AA,
UU .. ALIF,
iiuu .. NA
)
end
-- endings for final-weak non-past subjunctive in -ī
local sub_endings_ii = make_sub_endings_ii_uu(II)
-- endings for final-weak non-past subjunctive in -ū
local sub_endings_uu = make_sub_endings_ii_uu(UU)
-- endings for final-weak non-past jussive in -ā
local juss_endings_aa = make_nonpast_endings(
A,
AYSK,
AY .. AA,
AWSK .. ALIF,
AYSK .. NA
)
-- Make endings for final-weak non-past jussive in -ī or -ū. IU is short i or u, IIUU is long ī or ū as appropriate.
-- Note that AA, II, UU, ALIF are global variables.
local function make_juss_endings_ii_uu(iu, iiuu)
return make_nonpast_endings(
iu,
II,
iiuu .. AA,
UU .. ALIF,
iiuu .. NA
)
end
-- endings for final-weak non-past jussive in -ī
local juss_endings_ii = make_juss_endings_ii_uu(I, II)
-- endings for final-weak non-past jussive in -ū
local juss_endings_uu = make_juss_endings_ii_uu(U, UU)
-------------------------------------------------------------------------------
-- Sets of imperative endings --
-------------------------------------------------------------------------------
-- Extract the second person jussive endings to get corresponding imperative endings.
local function imperative_endings_from_jussive(endings)
return {endings[2], endings[3], endings[6], endings[10], endings[11]}
end
-- normal imperative endings
local imp_endings = imperative_endings_from_jussive(juss_endings)
-- alternative geminate imperative endings in -a
local imp_endings_alt_a = imperative_endings_from_jussive(juss_endings_alt_a)
-- alternative geminate imperative endings in -i
local imp_endings_alt_i = imperative_endings_from_jussive(juss_endings_alt_i)
-- final-weak imperative endings in -ā
local imp_endings_aa = imperative_endings_from_jussive(juss_endings_aa)
-- final-weak imperative endings in -ī
local imp_endings_ii = imperative_endings_from_jussive(juss_endings_ii)
-- final-weak imperative endings in -ū
local imp_endings_uu = imperative_endings_from_jussive(juss_endings_uu)
-------------------------------------------------------------------------------
-- Basic functions to inflect tenses --
-------------------------------------------------------------------------------
-- Add to `base` the inflections for the tense indicated by `tense` (the prefix in the slot names, e.g. 'past'
-- or 'juss_pass'), formed by combining the `prefixes`, `stems` and `endings`. Each of `prefixes`, `stems` and
-- `endings` is either a sequence of 5 (for the imperative) or 13 (for other tenses) abbreviated form lists (each of
-- which is either a string, a form object, or a list of strings and/or form objects; see
-- [[Module:inflection utilities]] for more info). Alternatively, any of `prefixes`, `stems` or `endings` can be a
-- single-element list containing an abbreviated form list, with an additional key `all_same` set to true, or (as a
-- special case) a single string; in the latter cases, the same value is used for all 5 or 13 slots. If existing
-- inflections already exist, they will be added to, not overridden. `pnums` is the list of person/number slot name
-- suffixes, which must match up with the elements in `prefixes`, `stems` and `endings` (i.e. 5 for imperative, 13
-- otherwise).
local function inflect_tense_1(base, tense, prefixes, stems, endings, pnums)
if not prefixes or not stems or not endings then
return
end
local function verify_affixes(affixname, affixes)
local function interr(msg)
error(("Internal error: For tense '%s', '%s' %s: %s"):format(tense, affixname, msg, dump(affixes)))
end
if type(affixes) == "string" then
-- do nothing
elseif type(affixes) ~= "table" then
interr("is not a table or string")
elseif affixes.all_same then
if #affixes ~= 1 then
interr(("with all_same = true should have length 1 but has length %s"):format(#affixes))
end
else
if #affixes ~= #pnums then
interr(("should have length %s but has length %s"):format(#pnums, #affixes))
end
end
end
verify_affixes("prefixes", prefixes)
verify_affixes("stems", stems)
verify_affixes("endings", endings)
local function get_affix(affixes, i)
if type(affixes) == "string" then
return affixes
elseif affixes.all_same then
return affixes[1]
else
return affixes[i]
end
end
for i, pnum in ipairs(pnums) do
local prefix = get_affix(prefixes, i)
local stem = get_affix(stems, i)
local ending = get_affix(endings, i)
local slot = tense .. "_" .. pnum
add3(base, slot, prefix, stem, ending)
end
end
-- Add to `base` the inflections for the tense indicated by `tense` (the prefix in the slot names, e.g. 'past'
-- or 'juss_pass'), formed by combining the `prefixes`, `stems` and `endings`. This is a simple wrapper around
-- inflect_tense_1() that applies to all tenses other than the imperative; see inflect_tense_1() for more
-- information about the parameters.
local function inflect_tense(base, tense, prefixes, stems, endings)
inflect_tense_1(base, tense, prefixes, stems, endings, all_person_number_list)
end
-- Like inflect_tense() but for the imperative, which has only five parts instead of 13 and no prefixes.
local function inflect_tense_imp(base, stems, endings)
inflect_tense_1(base, "imp", "", stems, endings, imp_person_number_list)
end
-------------------------------------------------------------------------------
-- Functions to inflect the past tense --
-------------------------------------------------------------------------------
-- Generate past verbs using specified vowel and consonant stems; works for sound, assimilated, hollow, and geminate
-- verbs, active and passive.
local function past_2stem_conj(base, tense, v_stem, c_stem, footnote_12)
local passive = tense:find("_pass") and "_pass" or ""
-- Override stems with user-specified stems if available.
v_stem = override_stem_if_needed(base, "past" .. passive .. "_v", v_stem)
local c_stem_12 = c_stem
if footnote_12 then
c_stem_12 = iut.combine_form_and_footnotes(c_stem_12, footnote_12)
end
c_stem_12 = override_stem_if_needed(base, "past" .. passive .. "_c", c_stem_12)
local c_stem_3 = override_stem_if_needed(base, "past" .. passive .. "_c", c_stem)
inflect_tense(base, tense, "", {
-- singular
c_stem_12, c_stem_12, c_stem_12, v_stem, v_stem,
--dual
c_stem_12, v_stem, v_stem,
-- plural
c_stem_12, c_stem_12, c_stem_12, v_stem, c_stem_3
}, past_endings)
end
-- Generate past verbs using single specified stem; works for sound and assimilated verbs, active and passive.
local function past_1stem_conj(base, tense, stem)
past_2stem_conj(base, tense, stem, stem)
end
-------------------------------------------------------------------------------
-- Functions to inflect non-past tenses --
-------------------------------------------------------------------------------
-- Generate non-past conjugation, with two stems, for vowel-initial and consonant-initial endings, respectively.
-- Useful for active and passive; for all forms; for all weaknesses (sound, assimilated, hollow, final-weak and
-- geminate) and for all types of non-past (indicative, subjunctive, jussive) except for the imperative. (There is a
-- separate wrapper function below for geminate jussives because they have three alternants.) Both stems may be the
-- same, e.g. for sound verbs.
-- `prefix_vowel` will be either "a" or "u". `endings` should be an array of 13 items. If `endings` is nil or
-- omitted, infer the endings from the tense. If `jussive` is true, or `endings` is nil and `tense` indicatives
-- jussive, use the jussive pattern of vowel/consonant stems (different from the normal ones).
local function nonpast_2stem_conj(base, tense, prefix_vowel, v_stem, c_stem, endings, jussive)
local passive = tense:find("_pass") and "_pass" or ""
-- Override stems with user-specified stems if available.
v_stem = override_stem_if_needed(base, "nonpast" .. passive .. "_v",
v_stem and q(dia[prefix_vowel], v_stem) or nil)
c_stem = override_stem_if_needed(base, "nonpast" .. passive .. "_c",
c_stem and q(dia[prefix_vowel], c_stem) or nil)
if not endings then
if tense:find("^ind") then
endings = ind_endings
elseif tense:find("^sub") then
endings = sub_endings
elseif tense:find("^juss") then
jussive = true
endings = juss_endings
else
error("Internal error: Unrecognized tense '" .. tense .."'")
end
end
if not jussive then
inflect_tense(base, tense, nonpast_prefix_consonants, {
-- singular
v_stem, v_stem, v_stem, v_stem, v_stem,
--dual
v_stem, v_stem, v_stem,
-- plural
v_stem, v_stem, c_stem, v_stem, c_stem
}, endings)
else
inflect_tense(base, tense, nonpast_prefix_consonants, {
-- singular
-- 'adlul, tadlul, tadullī, yadlul, tadlul
c_stem, c_stem, v_stem, c_stem, c_stem,
--dual
-- tadullā, yadullā, tadullā
v_stem, v_stem, v_stem,
-- plural
-- nadlul, tadullū, tadlulna, yadullū, yadlulna
c_stem, v_stem, c_stem, v_stem, c_stem
}, endings)
end
end
-- Generate non-past conjugation with one stem (no distinct stems for vowel-initial and consonant-initial endings).
-- See nonpast_2stem_conj().
local function nonpast_1stem_conj(base, tense, prefix_vowel, stem, endings, jussive)
nonpast_2stem_conj(base, tense, prefix_vowel, stem, stem, endings, jussive)
end
-- Generate active/passive jussive geminative. There are three alternants, two with terminations -a and -i and one
-- in a null termination with a distinct pattern of vowel/consonant stem usage. See nonpast_2stem_conj() for a
-- description of the arguments.
local function jussive_gem_conj(base, tense, prefix_vowel, v_stem, c_stem)
-- alternative in -a
nonpast_2stem_conj(base, tense, prefix_vowel, v_stem, c_stem, juss_endings_alt_a)
-- alternative in -i
nonpast_2stem_conj(base, tense, prefix_vowel, v_stem, c_stem, juss_endings_alt_i)
-- alternative in -null; requires different combination of v_stem and
-- c_stem since the null endings require the c_stem (e.g. "tadlul" here)
-- whereas the corresponding endings above in -a or -i require the v_stem
-- (e.g. "tadulla, tadulli" above)
nonpast_2stem_conj(base, tense, prefix_vowel, v_stem, c_stem, juss_endings, "jussive")
end
-------------------------------------------------------------------------------
-- Functions to inflect the imperative --
-------------------------------------------------------------------------------
-- Generate imperative conjugation, with two stems, for vowel-initial and consonant-initial endings, respectively.
-- Useful for all forms, and for all weaknesses other than final-weak. Note that the two stems may be the same
-- (specifically for sound and assimilated verbs). If `endings` is nil or omitted, use `imp_endings`. If `alt_gem`
-- is specified, use the pattern of vowel and consonant stems appropriate for the alternative geminate imperatives
-- that use a null ending of -a or -i instead of an empty ending.
local function make_2stem_imperative(base, v_stem, c_stem, endings, alt_gem)
endings = endings or imp_endings
-- Override stems with user-specified stems if available.
v_stem = override_stem_if_needed(base, "imp_v", v_stem)
c_stem = override_stem_if_needed(base, "imp_c", c_stem)
if alt_gem then
inflect_tense_imp(base, {v_stem, v_stem, v_stem, v_stem, c_stem}, endings)
else
inflect_tense_imp(base, {c_stem, v_stem, v_stem, v_stem, c_stem}, endings)
end
end
-- Generate imperative parts for sound or assimilated verbs.
local function make_1stem_imperative(base, stem)
make_2stem_imperative(base, stem, stem)
end
-- Generate imperative parts for geminate verbs form I (also IV, VII, VIII, X).
local function make_gem_imperative(base, v_stem, c_stem)
make_2stem_imperative(base, v_stem, c_stem, imp_endings_alt_a, "alt gem")
make_2stem_imperative(base, v_stem, c_stem, imp_endings_alt_i, "alt gem")
make_2stem_imperative(base, v_stem, c_stem)
end
-------------------------------------------------------------------------------
-- Functions to inflect entire verbs --
-------------------------------------------------------------------------------
-- Generate finite parts of a sound verb (also works for assimilated verbs) from five stems (past and non-past,
-- active and passive, plus imperative) plus the prefix vowel in the active non-past ("a" or "u").
local function make_sound_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem, imp_stem,
prefix_vowel)
past_1stem_conj(base, "past", past_stem)
past_1stem_conj(base, "past_pass", past_pass_stem)
nonpast_1stem_conj(base, "ind", prefix_vowel, nonpast_stem)
nonpast_1stem_conj(base, "sub", prefix_vowel, nonpast_stem)
nonpast_1stem_conj(base, "juss", prefix_vowel, nonpast_stem)
nonpast_1stem_conj(base, "ind_pass", "u", nonpast_pass_stem)
nonpast_1stem_conj(base, "sub_pass", "u", nonpast_pass_stem)
nonpast_1stem_conj(base, "juss_pass", "u", nonpast_pass_stem)
make_1stem_imperative(base, imp_stem)
end
local function past_final_weak_endings_from_vowel(vowel)
if vowel == "ay" then
return past_endings_ay
elseif vowel == "aw" then
return past_endings_aw
elseif vowel == "ī" then
return past_endings_ii
elseif vowel == "ū" then
return past_endings_uu
elseif not vowel then
return nil
else
error(("Internal error: Unrecognized past final-weak vowel spec '%s'"):format(vowel))
end
end
local function nonpast_final_weak_endings_from_vowel(vowel)
if vowel == "ā" then
return ind_endings_aa, sub_endings_aa, juss_endings_aa, imp_endings_aa
elseif vowel == "ī" then
return ind_endings_ii, sub_endings_ii, juss_endings_ii, imp_endings_ii
elseif vowel == "ū" then
return ind_endings_uu, sub_endings_uu, juss_endings_uu, imp_endings_uu
elseif not vowel then
return nil
else
error(("Internal error: Unrecognized non-past final-weak vowel spec '%s'"):format(vowel))
end
end
-- Generate finite parts of a final-weak verb from five stems (past and non-past, active and passive, plus
-- imperative), the past active ending vowel (ay, aw, ī or ū), the non-past active ending vowel (ā, ī or ū) and the
-- prefix vowel in the active non-past (a or u). All five imperative persons share `imp_stem`, so the
-- hamzat wasl carries the verb's own vowel class throughout -- اُدْعُ and اُدْعِي alike. The 2fs used to
-- take a kasra one of its own (finding #5, now #11): its ending is -ī regardless of vowel class, so the
-- stem vowel surfaces as a kasra there, and #5 read that as pulling the hamza with it. The book prints
-- the ḍamma -- اُدْعِي (p.141), اُعْلِي and اُغْزِي (p159) -- so the surfacing kasra is عارض and leaves the
-- hamza alone, exactly as the ḍamma of اِمْشُوا leaves it alone in the mirror case.
--
-- `retain_rad3_2fs`, if true, keeps rad3 as a consonant before that -ī instead of letting it
-- contract away: تَسْهُوِينَ / اُسْهُوِي rather than تَسْهِينَ / اِسْهِي. See README "Findings" #8
-- and final_weak_uu_retains_rad3().
local function make_final_weak_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem, imp_stem,
past_ending_vowel, nonpast_ending_vowel, prefix_vowel, retain_rad3_2fs)
past_stem = override_stem_if_needed(base, "past", past_stem)
past_pass_stem = override_stem_if_needed(base, "past_pass", past_pass_stem)
-- Don't call override_stem_if_needed() here for non-past stems; it's called in nonpast_2stem_conj().
imp_stem = override_stem_if_needed(base, "imp", imp_stem)
-- + not supported for ending vowel overrides
past_ending_vowel = base.stem_overrides.past_final_weak_vowel or past_ending_vowel
local past_pass_ending_vowel = base.stem_overrides.past_pass_final_weak_vowel or "ī"
nonpast_ending_vowel = base.stem_overrides.nonpast_final_weak_vowel or nonpast_ending_vowel
local nonpast_pass_ending_vowel = base.stem_overrides.nonpast_pass_final_weak_vowel or "ā"
local past_endings = past_final_weak_endings_from_vowel(past_ending_vowel)
local past_pass_endings = past_final_weak_endings_from_vowel(past_pass_ending_vowel)
local ind_endings, sub_endings, juss_endings, imp_endings =
nonpast_final_weak_endings_from_vowel(nonpast_ending_vowel)
local ind_pass_endings, sub_pass_endings, juss_pass_endings =
nonpast_final_weak_endings_from_vowel(nonpast_pass_ending_vowel)
if retain_rad3_2fs then
-- rad3 surfaces as a consonant carrying the class's own ḍamma, then the regular -ī:
-- سْهـ + ُوِينَ, not سْهـ + ِينَ. The 2fs sits at index 3 of a make_nonpast_endings()
-- table (`fem`) and at index 2 of the five imperative endings that
-- imperative_endings_from_jussive() extracts from it. Copied rather than mutated --
-- these ending tables are module-level constants shared by every final-weak verb.
-- Written out inline, not via a helper: create_conjugations() is at Lua's 60-upvalue
-- ceiling, and one more captured local stops the module loading at all.
local function set_2fs(endings, index, ending)
local out = {}
for i, v in ipairs(endings) do out[i] = v end
out[index] = ending
return out
end
ind_endings = set_2fs(ind_endings, 3, UU .. II .. NA)
sub_endings = set_2fs(sub_endings, 3, UU .. II)
juss_endings = set_2fs(juss_endings, 3, UU .. II)
imp_endings = set_2fs(imp_endings, 2, UU .. II)
end
inflect_tense(base, "past", "", {past_stem, all_same = 1}, past_endings)
inflect_tense(base, "past_pass", "", {past_pass_stem, all_same = 1}, past_pass_endings)
nonpast_1stem_conj(base, "ind", prefix_vowel, nonpast_stem, ind_endings)
nonpast_1stem_conj(base, "sub", prefix_vowel, nonpast_stem, sub_endings)
nonpast_1stem_conj(base, "juss", prefix_vowel, nonpast_stem, juss_endings)
nonpast_1stem_conj(base, "ind_pass", "u", nonpast_pass_stem, ind_pass_endings)
nonpast_1stem_conj(base, "sub_pass", "u", nonpast_pass_stem, sub_pass_endings)
nonpast_1stem_conj(base, "juss_pass", "u", nonpast_pass_stem, juss_pass_endings)
inflect_tense_imp(base, {imp_stem, all_same = 1}, imp_endings)
end
-- Generate finite parts of an augmented (form II+) final-weak verb from five stems (past and non-past, active and
-- passive, plus imperative) plus the prefix vowel in the active non-past ("a" or "u") and a flag indicating if it
-- behaves like a form V/VI verb in taking non-past endings in -ā instead of -ī.
local function make_augmented_final_weak_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem,
imp_stem, prefix_vowel, form56)
make_final_weak_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem, imp_stem, "ay",
form56 and "ā" or "ī", prefix_vowel)
end
-- Generate finite parts of an augmented (form II+) sound or final-weak verb, given:
-- * `base` (conjugation data structure);
-- * `vowel_spec` (radicals, weakness);
-- * `past_stem_base` (active past stem minus last syllable (= -al or -ā));
-- * `nonpast_stem_base` (non-past stem minus last syllable (= -al/-il or -ā/-ī);
-- * `past_pass_stem_base` (passive past stem minus last syllable (= -il or -ī));
-- * `vn` (verbal noun).
local function make_augmented_sound_final_weak_verb(base, vowel_spec, past_stem_base, nonpast_stem_base,
past_pass_stem_base, vn)
insert_form_or_forms(base, "vn", vn)
local lastrad = base.quadlit and vowel_spec.rad4 or vowel_spec.rad3
local final_weak = is_final_weak(base, vowel_spec)
local prefix_vowel = prefix_vowel_from_vform(base.verb_form)
local form56 = vform_nonpast_a_vowel(base.verb_form)
local a_base_suffix = final_weak and "" or q(A, lastrad)
local i_base_suffix = final_weak and "" or q(I, lastrad)
-- past and non-past stems, active and passive
local past_stem = q(past_stem_base, a_base_suffix)
-- In forms 5 and 6, non-past has /a/ as last stem vowel in the non-past
-- in both active and passive, but /i/ in the active participle and /a/
-- in the passive participle. Elsewhere, consistent /i/ in active non-past
-- and participle, consistent /a/ in passive non-past and participle.
-- Hence, forms 5 and 6 differ only in the non-past active (but not
-- active participle), so we have to split the finite non-past stem and
-- active participle stem.
local nonpast_stem = q(nonpast_stem_base, form56 and a_base_suffix or i_base_suffix)
local ap_stem = q(nonpast_stem_base, i_base_suffix)
local past_pass_stem = q(past_pass_stem_base, i_base_suffix)
local nonpast_pass_stem = q(nonpast_stem_base, a_base_suffix)
-- imperative stem
local imp_stem = q(past_stem_base, form56 and a_base_suffix or i_base_suffix)
-- make parts
if final_weak then
make_augmented_final_weak_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem, imp_stem,
prefix_vowel, form56)
else
make_sound_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem, imp_stem, prefix_vowel)
end
-- active and passive participle
if final_weak then
insert_form_or_forms(base, "ap", q(MU, ap_stem, IN))
insert_form_or_forms(base, "pp", q(MU, nonpast_pass_stem, AN, AMAQ))
else
insert_form_or_forms(base, "ap", q(MU, ap_stem))
insert_form_or_forms(base, "pp", q(MU, nonpast_pass_stem))
end
end
-- Generate finite parts of a hollow or geminate verb from ten stems (vowel and consonant stems for each of past and
-- non-past, active and passive, plus imperative) plus the prefix vowel in the active non-past ("a" or "u"), plus a
-- flag indicating if we are a geminate verb.
local function make_hollow_geminate_verb(base, geminate, past_v_stem, past_c_stem, past_pass_v_stem,
past_pass_c_stem, nonpast_v_stem, nonpast_c_stem, nonpast_pass_v_stem, nonpast_pass_c_stem, imp_v_stem,
imp_c_stem, prefix_vowel, altgem_note)
past_2stem_conj(base, "past", past_v_stem, past_c_stem, altgem_note)
past_2stem_conj(base, "past_pass", past_pass_v_stem, past_pass_c_stem)
nonpast_2stem_conj(base, "ind", prefix_vowel, nonpast_v_stem, nonpast_c_stem)
nonpast_2stem_conj(base, "sub", prefix_vowel, nonpast_v_stem, nonpast_c_stem)
nonpast_2stem_conj(base, "ind_pass", "u", nonpast_pass_v_stem, nonpast_pass_c_stem)
nonpast_2stem_conj(base, "sub_pass", "u", nonpast_pass_v_stem, nonpast_pass_c_stem)
if geminate then
jussive_gem_conj(base, "juss", prefix_vowel, nonpast_v_stem, nonpast_c_stem)
jussive_gem_conj(base, "juss_pass", "u", nonpast_pass_v_stem, nonpast_pass_c_stem)
make_gem_imperative(base, imp_v_stem, imp_c_stem)
else
nonpast_2stem_conj(base, "juss", prefix_vowel, nonpast_v_stem, nonpast_c_stem)
nonpast_2stem_conj(base, "juss_pass", "u", nonpast_pass_v_stem, nonpast_pass_c_stem)
make_2stem_imperative(base, imp_v_stem, imp_c_stem)
end
end
-- Generate finite parts of an augmented (form II+) hollow verb, given:
-- * `base` (conjugation data structure);
-- * `vowel_spec` (radicals, weakness);
-- * `past_stem_base` (invariable part of active past stem);
-- * `nonpast_stem_base` (invariable part of nonpast stem);
-- * `past_pass_stem_base` (invariable part of passive past stem);
-- * `vn` (verbal noun).
local function make_augmented_hollow_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base,
vn)
insert_form_or_forms(base, "vn", vn)
local lastrad = base.quadlit and vowel_spec.rad4 or vowel_spec.rad3
local form410 = base.verb_form == "IV" or base.verb_form == "X"
local prefix_vowel = prefix_vowel_from_vform(base.verb_form)
local a_base_suffix_v, a_base_suffix_c
local i_base_suffix_v, i_base_suffix_c
a_base_suffix_v = q(AA, lastrad) -- 'af-āl-a, inf-āl-a
a_base_suffix_c = q(A, lastrad) -- 'af-al-tu, inf-al-tu
i_base_suffix_v = q(II, lastrad) -- 'uf-īl-a, unf-īl-a
i_base_suffix_c = q(I, lastrad) -- 'uf-il-tu, unf-il-tu
-- past and non-past stems, active and passive, for vowel-initial and
-- consonant-initial endings
local past_v_stem = q(past_stem_base, a_base_suffix_v)
local past_c_stem = q(past_stem_base, a_base_suffix_c)
-- yu-f-īl-u, ya-staf-īl-u but yanf-āl-u, yaft-āl-u
local nonpast_v_stem = q(nonpast_stem_base, form410 and i_base_suffix_v or a_base_suffix_v)
local nonpast_c_stem = q(nonpast_stem_base, form410 and i_base_suffix_c or a_base_suffix_c)
local past_pass_v_stem = q(past_pass_stem_base, i_base_suffix_v)
local past_pass_c_stem = q(past_pass_stem_base, i_base_suffix_c)
local nonpast_pass_v_stem = q(nonpast_stem_base, a_base_suffix_v)
local nonpast_pass_c_stem = q(nonpast_stem_base, a_base_suffix_c)
-- imperative stem
local imp_v_stem = q(past_stem_base, form410 and i_base_suffix_v or a_base_suffix_v)
local imp_c_stem = q(past_stem_base, form410 and i_base_suffix_c or a_base_suffix_c)
-- make parts
make_hollow_geminate_verb(base, false, past_v_stem, past_c_stem, past_pass_v_stem,
past_pass_c_stem, nonpast_v_stem, nonpast_c_stem, nonpast_pass_v_stem,
nonpast_pass_c_stem, imp_v_stem, imp_c_stem, prefix_vowel)
-- active participle
insert_form_or_forms(base, "ap", q(MU, nonpast_v_stem))
-- passive participle
insert_form_or_forms(base, "pp", q(MU, nonpast_pass_v_stem))
end
-- Generate finite parts of an augmented (form II+) geminate verb, given:
-- * `base` (conjugation data structure);
-- * `vowel_spec` (radicals, weakness);
-- * `past_stem_base` (invariable part of active past stem; this and the stem bases below will end with a consonant
-- for forms IV, X, IVq, and a short vowel for the others);
-- * `nonpast_stem_base` (invariable part of nonpast stem);
-- * `past_pass_stem_base` (invariable part of passive past stem);
-- * `vn` (verbal noun);
-- * `altgem_note` (footnote to add to active past 1/2-person forms, when alternative forms are supplied [form X]).
local function make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base,
past_pass_stem_base, vn, altgem_note)
insert_form_or_forms(base, "vn", vn)
local vform = base.verb_form
local lastrad = base.quadlit and vowel_spec.rad4 or vowel_spec.rad3
local prefix_vowel = prefix_vowel_from_vform(vform)
local a_base_suffix_v, a_base_suffix_c
local i_base_suffix_v, i_base_suffix_c
if vform == "IV" or vform == "X" or vform == "IVq" then
a_base_suffix_v = q(A, lastrad, SH) -- 'af-all
a_base_suffix_c = q(SK, lastrad, A, lastrad) -- 'af-lal
i_base_suffix_v = q(I, lastrad, SH) -- yuf-ill
i_base_suffix_c = q(SK, lastrad, I, lastrad) -- yuf-lil
else
a_base_suffix_v = q(lastrad, SH) -- fā-ll, infa-ll
a_base_suffix_c = q(lastrad, A, lastrad) -- fā-lal, infa-lal
i_base_suffix_v = q(lastrad, SH) -- yufā-ll, yanfa-ll
i_base_suffix_c = q(lastrad, I, lastrad) -- yufā-lil, yanfa-lil
end
-- past and non-past stems, active and passive, for vowel-initial and
-- consonant-initial endings
local past_v_stem = q(past_stem_base, a_base_suffix_v)
local past_c_stem = q(past_stem_base, a_base_suffix_c)
local nonpast_v_stem = q(nonpast_stem_base, vform_nonpast_a_vowel(vform) and a_base_suffix_v or i_base_suffix_v)
local nonpast_c_stem = q(nonpast_stem_base, vform_nonpast_a_vowel(vform) and a_base_suffix_c or i_base_suffix_c)
-- NOTE: Formerly had a comment that "vform III and VI passive past do not have contracted parts, only
-- uncontracted parts, which are added separately by those functions". This is based on Mace
-- "Arabic Verbs and Essential Grammar" (1999) entry 63 (continued), which shows passive ḥūjija but no ḥūjja;
-- but that is apparently a mistake, as (1) verb tables in other books do show contracted passive parts for
-- these forms; (2) there is no mention of such an exception on p. 99, which explains how geminate ("doubled")
-- verbs work (on the contrary, it says "The contracted and uncontracted pairs (see above) are found all
-- over Forms III and VI of the doubled verbs").
local past_pass_v_stem = q(past_pass_stem_base, i_base_suffix_v)
local past_pass_c_stem = q(past_pass_stem_base, i_base_suffix_c)
local nonpast_pass_v_stem = q(nonpast_stem_base, a_base_suffix_v)
local nonpast_pass_c_stem = q(nonpast_stem_base, a_base_suffix_c)
-- imperative stem
local imp_v_stem = q(past_stem_base, vform_nonpast_a_vowel(vform) and a_base_suffix_v or i_base_suffix_v)
local imp_c_stem = q(past_stem_base, vform_nonpast_a_vowel(vform) and a_base_suffix_c or i_base_suffix_c)
-- make parts
make_hollow_geminate_verb(base, "geminate", past_v_stem, past_c_stem, past_pass_v_stem,
past_pass_c_stem, nonpast_v_stem, nonpast_c_stem, nonpast_pass_v_stem,
nonpast_pass_c_stem, imp_v_stem, imp_c_stem, prefix_vowel, altgem_note)
-- active participle
insert_form_or_forms(base, "ap", q(MU, nonpast_v_stem))
-- passive participle
insert_form_or_forms(base, "pp", q(MU, nonpast_pass_v_stem))
end
-------------------------------------------------------------------------------
-- Conjugation functions for specific conjugation types --
-------------------------------------------------------------------------------
local function form_i_imp_stem_through_rad1(base, nonpast_vowel, rad1)
local imp_vowel = map_vowel(nonpast_vowel, function(vow)
if vow == A or vow == I then
return I
elseif vow == U then
return U
elseif not skip_slot(base, "imp_2ms") then
error(("Internal error: Non-past vowel %s isn't a, i, or u, should have been caught earlier"):format(
dump(nonpast_vowel)))
else
-- Passive-only; imperative won't ever be displayed so it doesn't matter.
return I
end
end)
-- Mace ("Arabic Verbs and Essentials of Grammar" p. 63: [https://archive.org/details/arabicverbsessen00john/page/62/mode/2up])
-- claims that initial hamza is assimilated/elided into a long vowel in the form-I imperative, but apparently
-- this isn't corrrect.
local vowel_on_alif = map_vowel(imp_vowel, function(vow)
return ALIF .. vow
end)
return q(vowel_on_alif, rad1, SK)
end
-- Implement form-I sound or assimilated verb. ASSIMILATED is true for assimilated verbs.
local function make_form_i_sound_assimilated_verb(base, vowel_spec, assimilated)
local rad1, rad2, rad3, past_vowel, nonpast_vowel = get_radicals_3(vowel_spec)
-- Verbal nouns (maṣādir) for form I are unpredictable and have to be supplied
-- past and non-past stems, active and passive
local past_stem = q(rad1, A, rad2, past_vowel, rad3)
local nonpast_stem = assimilated and q(rad2, nonpast_vowel, rad3) or
q(rad1, SK, rad2, nonpast_vowel, rad3)
local past_pass_stem = q(rad1, U, rad2, I, rad3)
local nonpast_pass_stem = q(rad1, SK, rad2, A, rad3)
-- imperative stem
-- check for irregular verb with reduced imperative (أَخَذَ or أَكَلَ or أَمَرَ)
local reducedimp = reduced_imperative_verb(rad1, rad2, rad3)
if reducedimp then
base.irregular = true
end
local imp_stem_suffix = q(rad2, nonpast_vowel, rad3)
local long_imp_stem_base = form_i_imp_stem_through_rad1(base, nonpast_vowel, rad1)
local short_imp_stem_base = ""
local imp_stem = q((assimilated or reducedimp) and "" or long_imp_stem_base, imp_stem_suffix)
-- A form-I mithal that keeps its wāw spells its imperative on a hamzat wasl,
-- اِوْجَلْ / اِوْنَ. Tell postprocess_term() not to reduce that اِوْ to اِي -- see #10
-- there for why the substitution list can't decide this for itself.
if not assimilated and req(rad1, W) then
base.orth.keep_initial_w = true
end
-- make parts
make_sound_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem, imp_stem, "a")
if reducedimp == "shortlong" then
make_1stem_imperative(base, iut.combine_form_and_footnotes(q(long_imp_stem_base, imp_stem_suffix),
mw.getCurrentFrame():preprocess("[used especially with a clitic such as {{m|ar|فَ}} or {{m|ar|وَ}}]")))
end
-- Check for irregular verb سَأَلَ with alternative jussive and imperative. Calling this after make_sound_verb()
-- adds additional entries to the paradigm parts.
if saal_radicals(rad1, rad2, rad3) then
base.irregular = true
nonpast_1stem_conj(base, "juss", "a", "سَل")
nonpast_1stem_conj(base, "juss_pass", "u", "سَل")
make_1stem_imperative(base, "سَل")
end
-- Active participle.
insert_form_or_forms(base, "ap1", q(rad1, AA, rad2, I, rad3))
-- Insert alternative active participle (stative type I) فَعِيل. Since not all verbs have this, we require that
-- verbs that do have it specify it explicitly; a shortcut ++ is provided to make this easier (e.g. <ap:++> to
-- indicate that the alternative form should be used for the active participle, <ap:+,++> to indicate that both
-- forms can be used, and <ap:-> to indicate that there is no active participle). The same form is used for
-- secondary default passive participle.
insert_ap2_pp2(base, q(rad1, A, rad2, II, rad3))
-- Active participle, stative type II فَعِل (+++).
insert_form_or_forms(base, "ap3", q(rad1, A, rad2, I, rad3))
-- Active participle, color/defect أَفْعَل (+cd).
insert_form_or_forms(base, "apcd", q(HAMZA, A, rad1, SK, rad2, A, rad3))
-- Active participle, -ān فَعْلَان (+an).
insert_form_or_forms(base, "apan", q(rad1, A, rad2, SK, rad3, AAN))
-- Passive participle.
insert_form_or_forms(base, "pp", q(MA, rad1, SK, rad2, UU, rad3))
end
conjugations["I-sound"] = function(base, vowel_spec)
make_form_i_sound_assimilated_verb(base, vowel_spec, false)
end
conjugations["none-sound"] = function(base, vowel_spec)
-- All default stems are nil.
make_sound_verb(base)
end
conjugations["none-hollow"] = function(base, vowel_spec)
-- All default stems are nil.
make_hollow_geminate_verb(base, false)
end
conjugations["none-geminate"] = function(base, vowel_spec)
-- All default stems are nil.
make_hollow_geminate_verb(base, "geminate")
end
conjugations["none-final-weak"] = function(base, vowel_spec)
-- All default stems are nil.
make_final_weak_verb(base)
end
conjugations["I-assimilated"] = function(base, vowel_spec)
make_form_i_sound_assimilated_verb(base, vowel_spec, "assimilated")
end
local function make_form_i_hayy_verb(base, vowel_spec)
-- Verbal nouns (maṣādir) for form I are unpredictable and have to be supplied
base.irregular = true
-- past and non-past stems, active and passive, and imperative stem
local past_c_stem = "حَيِي"
local past_v_stem_long = past_c_stem
local past_v_stem_short = "حَيّ"
-- 3mp of the long variant (حَيِيَ) is حَيُوا, not the geminated حَيُّوا of the short
-- variant (حَيَّ) -- rad2 (ي) here is a plain radical, not doubled; see README
-- "Open findings" #4. Needs its own stem, distinct from both the long and short ones.
local past_v_stem_3mp = "حَي"
local past_pass_c_stem = "حُيِي"
local past_pass_v_stem_long = past_pass_c_stem
local past_pass_v_stem_short = "حُيّ"
local past_pass_v_stem_3mp = "حُي"
local nonpast_stem = "حْي"
local nonpast_pass_stem = nonpast_stem
local imp_stem = _I .. nonpast_stem
-- make parts
past_2stem_conj(base, "past", {}, past_c_stem)
past_2stem_conj(base, "past_pass", {}, past_pass_c_stem)
local variant = vowel_spec.variant or "both"
if variant == "short" or variant == "both" then
past_2stem_conj(base, "past", past_v_stem_short, {})
past_2stem_conj(base, "past_pass", past_pass_v_stem_short, {})
end
function inflect_long_variant(tense, long_stem, mp_stem)
inflect_tense_1(base, tense, "",
{long_stem, long_stem, long_stem, long_stem, mp_stem},
{past_endings[4], past_endings[5], past_endings[7], past_endings[8],
past_endings[12]},
{"3ms", "3fs", "3md", "3fd", "3mp"})
end
if variant == "long" or variant == "both" then
inflect_long_variant("past", past_v_stem_long, past_v_stem_3mp)
inflect_long_variant("past_pass", past_pass_v_stem_long, past_pass_v_stem_3mp)
end
nonpast_1stem_conj(base, "ind", "a", nonpast_stem, ind_endings_aa)
nonpast_1stem_conj(base, "sub", "a", nonpast_stem, sub_endings_aa)
nonpast_1stem_conj(base, "juss", "a", nonpast_stem, juss_endings_aa)
nonpast_1stem_conj(base, "ind_pass", "u", nonpast_pass_stem, ind_endings_aa)
nonpast_1stem_conj(base, "sub_pass", "u", nonpast_pass_stem, sub_endings_aa)
nonpast_1stem_conj(base, "juss_pass", "u", nonpast_pass_stem, juss_endings_aa)
inflect_tense_imp(base, {imp_stem, all_same = 1}, imp_endings_aa)
-- active and passive participles apparently do not exist for this verb
end
-- Implement form-I final-weak assimilated+final-weak verb. ASSIMILATED is true for assimilated verbs.
local function make_form_i_final_weak_verb(base, vowel_spec, assimilated)
local rad1, rad2, rad3, past_vowel, nonpast_vowel = get_radicals_3(vowel_spec)
-- حَيَّ or حَيِيَ is weird enough that we handle it as a separate function.
if hayy_radicals(rad1, rad2, rad3) then
make_form_i_hayy_verb(base, vowel_spec)
return
end
-- Verbal nouns (maṣādir) for form I are unpredictable and have to be supplied.
-- Past and non-past stems, active and passive, and imperative stem.
local past_stem = q(rad1, A, rad2)
local past_pass_stem = q(rad1, U, rad2)
local nonpast_stem, nonpast_pass_stem, imp_stem
if raa_radicals(rad1, rad2, rad3) then
base.irregular = true
nonpast_stem = rad1
nonpast_pass_stem = rad1
imp_stem = rad1
else
nonpast_pass_stem = q(rad1, SK, rad2)
if assimilated then
nonpast_stem = rad2
imp_stem = rad2
else
nonpast_stem = nonpast_pass_stem
imp_stem = q(form_i_imp_stem_through_rad1(base, nonpast_vowel, rad1), rad2)
end
end
-- A form-I mithal that keeps its wāw spells its imperative on a hamzat wasl,
-- اِوْجَلْ / اِوْنَ. Tell postprocess_term() not to reduce that اِوْ to اِي -- see #10
-- there for why the substitution list can't decide this for itself.
if not assimilated and req(rad1, W) then
base.orth.keep_initial_w = true
end
-- Make parts.
local past_ending_vowel =
req(rad3, Y) and req(past_vowel, A) and "ay" or
req(rad3, W) and req(past_vowel, A) and "aw" or
req(past_vowel, I) and "ī" or "ū"
-- Try to preserve footnotes attached to the third radical and/or past and/or non-past vowels.
local past_footnotes = iut.combine_footnotes(rget_footnotes(rad3), rget_footnotes(past_vowel))
local nonpast_ending_vowel = req(nonpast_vowel, A) and "ā" or req(nonpast_vowel, I) and "ī" or "ū"
local nonpast_footnotes = iut.combine_footnotes(rget_footnotes(rad3), rget_footnotes(nonpast_vowel))
make_final_weak_verb(base,
iut.combine_form_and_footnotes(past_stem, past_footnotes),
iut.combine_form_and_footnotes(past_pass_stem, past_footnotes),
iut.combine_form_and_footnotes(nonpast_stem, nonpast_footnotes),
iut.combine_form_and_footnotes(nonpast_pass_stem, nonpast_footnotes),
iut.combine_form_and_footnotes(imp_stem, nonpast_footnotes),
past_ending_vowel, nonpast_ending_vowel, "a",
final_weak_uu_retains_rad3(rad1, rad2, rad3, past_ending_vowel, nonpast_ending_vowel))
-- Active participle.
insert_form_or_forms(base, "ap1", q(rad1, AA, rad2, IN))
-- Active participle, stative type I فَعِيّ (++). FIXME: Is this correct when rad3 is W?
insert_ap2_pp2(base, q(rad1, A, rad2, II, SH))
-- Active participle, stative type II فَعٍ (+++). FIXME: Any examples of this to verify it's correct?
insert_form_or_forms(base, "ap3", q(rad1, A, rad2, IN))
-- Active participle, color/defect أَفْعَى (+cd).
insert_form_or_forms(base, "apcd", q(HAMZA, A, rad1, SK, rad2, AAMAQ))
-- Active participle, -ān فَعْيَان or فَعْوَان (+an).
-- FIXME: Any examples of this for both rad3 = W and y to verify it's correct?
insert_form_or_forms(base, "apan", q(rad1, A, rad2, SK, rad3, AAN))
-- Passive participle.
insert_form_or_forms(base, "pp", q(MA, rad1, SK, rad2, req(rad3, Y) and II or UU, SH))
end
conjugations["I-final-weak"] = function(base, vowel_spec)
make_form_i_final_weak_verb(base, vowel_spec, false)
end
conjugations["I-assimilated+final-weak"] = function(base, vowel_spec)
make_form_i_final_weak_verb(base, vowel_spec, "assimilated")
end
conjugations["I-hollow"] = function(base, vowel_spec)
local rad1, rad2, rad3, past_vowel, nonpast_vowel = get_radicals_3(vowel_spec)
-- In some sense, hollow vowels i~i and u~u are more "correct" than a~i and a~u, but the latter follow the
-- pattern of other form-I verbs, so we map i~i to a~i and u~u to a~u in infer_radicals(). Now however we have
-- to undo this to get the actual past vowel based on the non-past vowel.
if req(past_vowel, A) then
past_vowel = map_vowel(past_vowel, function(vow)
return req(nonpast_vowel, A) and I or rget(nonpast_vowel)
end)
end
local lengthened_nonpast = map_vowel(nonpast_vowel, function(vow)
return vow == U and UU or vow == I and II or AA
end)
-- Verbal nouns (maṣādir) for form I are unpredictable and have to be supplied.
-- active past stems - vowel (v) and consonant (c)
local past_v_stem = q(rad1, AA, rad3)
local past_c_stem = q(rad1, past_vowel, rad3)
-- active non-past stems - vowel (v) and consonant (c)
local nonpast_v_stem = q(rad1, lengthened_nonpast, rad3)
local nonpast_c_stem = q(rad1, nonpast_vowel, rad3)
-- passive past stems - vowel (v) and consonant (c)
-- 'ufīla always; the contracted stem takes whichever of i/u the active past_c_stem
-- *isn't* -- xāfa/xiftu (i) -> passive xufta (u), qāla/qultu (u) -> passive qilta (i).
-- Contraction drops rad2, so this vowel is the only thing distinguishing active from
-- passive in these forms, hence the two roots' behaviour is opposite, not independent.
-- Confirmed on two printed pages (خافَ p.224 "خُفْتَ", قالَ p.138 "قِلْتَ"); previously
-- hardcoded to u from خافَ alone, which is only half the pattern -- see README.
local past_pass_v_stem = q(rad1, II, rad3)
local past_pass_c_stem = q(rad1, map_vowel(past_vowel, function(vow)
return vow == I and U or I
end), rad3)
-- passive non-past stems - vowel (v) and consonant (c)
-- yufāla/yufalna
-- stem is built differently but conjugation is identical to sound verbs
local nonpast_pass_v_stem = q(rad1, AA, rad3)
local nonpast_pass_c_stem = q(rad1, A, rad3)
-- imperative stem
local imp_v_stem = nonpast_v_stem
local imp_c_stem = nonpast_c_stem
-- make parts
make_hollow_geminate_verb(base, false, past_v_stem, past_c_stem, past_pass_v_stem,
past_pass_c_stem, nonpast_v_stem, nonpast_c_stem, nonpast_pass_v_stem,
nonpast_pass_c_stem, imp_v_stem, imp_c_stem, "a")
if kaan_radicals(rad1, rad2, rad3) then
local endings = make_nonpast_endings(U, {}, {}, {}, {})
inflect_tense(base, "juss", nonpast_prefix_consonants, q(A, rad1), endings)
base.irregular = true
end
-- سالَ يَسالُ keeps سَأَلْتُ's fatha in its contracted past -- سَلْتَ, not the سِلْتَ
-- the a~a pair would give -- and the book says why in as many words, under p202's
-- own table: "سالَ يَسالُ، لغة في سَأَلَ المهموز ... ويُقالُ في الماضي سَلْتُ بفتحِ
-- أوّلهِ مثلَ سَأَلْتُ فحُذِفَتِ الهمزةُ كما حُذِفَتْ مِنْ رَأَيْتُ فقيلَ فيه رَيْتُ".
-- So this is not a hollow-vowel exception and no rule about the a~a pair should be
-- touched for it: it is سَأَلْتُ with the hamza dropped, the way رَأَيْتُ gives رَيْتُ.
-- Added as an extra variant rather than a replacement, for the same reason
-- saal_radicals() adds سَلْ beside اِسْأَلْ instead of replacing it -- the book prints
-- both, in different places (p202 sets سَلْتَ, p176 sets سَأَلْتَ). Gated on the a~a
-- pair, because a سول verb with a u non-past is a different verb. README finding #19.
if saal_hollow_radicals(rad1, rad2, rad3) and req(nonpast_vowel, A) then
base.irregular = true
past_2stem_conj(base, "past", past_v_stem, q(rad1, A, rad3))
end
-- Active participle.
insert_form_or_forms(base, "ap1", req(rad3, HAMZA) and q(rad1, AA, HAMZA, IN) or
q(rad1, AA, HAMZA, I, rad3))
-- Active participle, stative type I فَيِّد (++). FIXME: Any examples of this to verify it's correct?
insert_ap2_pp2(base, q(rad1, A, Y, SH, I, rad3))
-- Active participle, stative type II فَيِد (+++). FIXME: Any examples of this to verify it's correct?
insert_form_or_forms(base, "ap3", q(rad1, A, Y, I, rad3))
-- Active participle, color/defect أَفّيَد or أَفّوَد (+cd). FIXME: Any examples of this to verify it's correct?
insert_form_or_forms(base, "apcd", q(HAMZA, A, rad1, SK, rad2, A, rad3))
-- Active participle, -ān فَيْدَان or فَوْدَان (+an). Example: جَاعَ "to be hungry", act part جَوْعَان
insert_form_or_forms(base, "apan", q(rad1, A, rad2, SK, rad3, AAN))
-- Passive participle.
insert_form_or_forms(base, "pp", q(MA, rad1, req(rad2, Y) and II or UU, rad3))
end
conjugations["I-geminate"] = function(base, vowel_spec)
local rad1, rad2, rad3, past_vowel, nonpast_vowel = get_radicals_3(vowel_spec)
-- Verbal nouns (maṣādir) for form I are unpredictable and have to be supplied.
-- active past stems - vowel (v) and consonant (c)
-- The contracted stem's vowel is the past vowel for most roots (مَدَدْتَ) but follows the
-- مضارع for the إتباع lexemes (هَمُمْتَ); see geminate_degemination_vowel().
local past_v_stem = q(rad1, A, rad2, SH)
local past_c_stem = q(rad1, A, rad2,
geminate_degemination_vowel(rad1, rad2, rad3, past_vowel, nonpast_vowel), rad2)
-- active non-past stems - vowel (v) and consonant (c)
local nonpast_v_stem = q(rad1, nonpast_vowel, rad2, SH)
local nonpast_c_stem = q(rad1, SK, rad2, nonpast_vowel, rad2)
-- passive past stems - vowel (v) and consonant (c)
-- dulla/dulilta
local past_pass_v_stem = q(rad1, U, rad2, SH)
local past_pass_c_stem = q(rad1, U, rad2, I, rad2)
-- passive non-past stems - vowel (v) and consonant (c)
--yudallu/yudlalna
-- stem is built differently but conjugation is identical to sound verbs
local nonpast_pass_v_stem = q(rad1, A, rad2, SH)
local nonpast_pass_c_stem = q(rad1, SK, rad2, A, rad2)
-- imperative stem
local imp_v_stem = q(rad1, nonpast_vowel, rad2, SH)
local imp_c_stem = q(form_i_imp_stem_through_rad1(base, nonpast_vowel, rad1), rad2, nonpast_vowel, rad2)
-- make parts
make_hollow_geminate_verb(base, "geminate", past_v_stem, past_c_stem, past_pass_v_stem,
past_pass_c_stem, nonpast_v_stem, nonpast_c_stem, nonpast_pass_v_stem,
nonpast_pass_c_stem, imp_v_stem, imp_c_stem, "a")
-- Active participle.
insert_form_or_forms(base, "ap1", q(rad1, AA, rad2, SH))
-- Active participle, stative type I فَعِيع (++). FIXME: Any examples of this to verify it's correct?
insert_ap2_pp2(base, q(rad1, A, rad2, II, rad2))
-- Active participle, stative type II فَعّ (+++). Example: بَرَّ "to be pious", active participle بَرّ
insert_form_or_forms(base, "ap3", q(rad1, A, rad2, SH))
-- Active participle, color/defect أَفَعّ (+cd).
-- Example: لَصَّ "to be thievish, to steal repeatedly", active participle أَلَصّ.
insert_form_or_forms(base, "apcd", q(HAMZA, A, rad1, A, rad2, SH))
-- Active participle, -ān فَعَّان (+an). FIXME: Any examples of this to verify it's correct?
insert_form_or_forms(base, "apan", q(rad1, A, rad2, SH, AAN))
-- Passive participle.
insert_form_or_forms(base, "pp", q(MA, rad1, SK, rad2, UU, rad2))
end
-- Return the ta- (active, past and non-past) and tu- (passive past) prefixes for a form II/III/V/VI verb.
-- Form V and VI verbs normally use ta- and tu-, but reduced (base.reduced) verbs use different prefixes. Form II
-- and III verbs have no prefix.
local function form_ii_iii_v_vi_ta_tu_prefix(base, rad1)
local vform = base.verb_form
if vform == "V" or vform == "VI" then
if base.reduced then
-- To simplify the code, we generate two rad1's with a sukūn between them, which is cleaned up in
-- postprocessing.
return q(_I, rad1, SK), q(rad1, SK), q(_U, rad1, SK)
else
return TA, TA, TU
end
else
return "", "", ""
end
end
-- Make form II or V sound or final-weak verb.
local function make_form_ii_v_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local final_weak = is_final_weak(base, vowel_spec)
local vform = base.verb_form
local ta_past_prefix, ta_nonpast_prefix, tu_past_prefix = form_ii_iii_v_vi_ta_tu_prefix(base, rad1)
local vn = vform == "V" and
q(ta_past_prefix, rad1, A, rad2, SH, final_weak and IN or q(U, rad3)) or
q(TA, rad1, SK, rad2, II, final_weak and AH or rad3)
-- various stem bases
local past_stem_base = q(ta_past_prefix, rad1, A, rad2, SH)
local nonpast_stem_base = q(ta_nonpast_prefix, rad1, A, rad2, SH)
local past_pass_stem_base = q(tu_past_prefix, rad1, U, rad2, SH)
-- make parts
make_augmented_sound_final_weak_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base,
vn)
end
conjugations["II-sound"] = function(base, vowel_spec)
make_form_ii_v_sound_final_weak_verb(base, vowel_spec)
end
conjugations["II-final-weak"] = function(base, vowel_spec)
make_form_ii_v_sound_final_weak_verb(base, vowel_spec)
end
local function make_form_iii_alt_vn(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local final_weak = is_final_weak(base, vowel_spec)
-- Insert alternative verbal noun فِعَال. Since not all verbs have this, we require that verbs that do have it
-- specify it explicitly; a shortcut ++ is provided to make this easier (e.g. <vn:+,++> to indicate that
-- both the normal verbal noun مُفَاعَلَة and secondary verbal noun فِعَال are available).
insert_form_or_forms(base, "vn2", q(rad1, I, rad2, AA, final_weak and HAMZA or rad3))
end
-- Make form III or VI sound or final-weak verb.
local function make_form_iii_vi_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local final_weak = is_final_weak(base, vowel_spec)
local vform = base.verb_form
local ta_past_prefix, ta_nonpast_prefix, tu_past_prefix = form_ii_iii_v_vi_ta_tu_prefix(base, rad1)
local vn = vform == "VI" and
q(ta_past_prefix, rad1, AA, rad2, final_weak and IN or q(U, rad3)) or
q(MU, rad1, AA, rad2, final_weak and AAH or q(A, rad3, AH))
-- various stem bases
local past_stem_base = q(ta_past_prefix, rad1, AA, rad2)
local nonpast_stem_base = q(ta_nonpast_prefix, rad1, AA, rad2)
local past_pass_stem_base = q(tu_past_prefix, rad1, UU, rad2)
-- make parts
make_augmented_sound_final_weak_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base,
vn)
if vform == "III" then
make_form_iii_alt_vn(base, vowel_spec)
end
end
conjugations["III-sound"] = function(base, vowel_spec)
make_form_iii_vi_sound_final_weak_verb(base, vowel_spec)
end
conjugations["III-final-weak"] = function(base, vowel_spec)
make_form_iii_vi_sound_final_weak_verb(base, vowel_spec)
end
-- Make form III or VI geminate verb.
local function make_form_iii_vi_geminate_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vform = base.verb_form
local ta_past_prefix, ta_nonpast_prefix, tu_past_prefix = form_ii_iii_v_vi_ta_tu_prefix(base, rad1)
-- Alternative verbal noun فِعَال will be inserted when we add sound parts below.
local vn = vform == "VI" and q(ta_past_prefix, rad1, AA, rad2, SH) or q(MU, rad1, AA, rad2, SH, AH)
-- Various stem bases.
local past_stem_base = q(ta_past_prefix, rad1, AA)
local nonpast_stem_base = q(ta_nonpast_prefix, rad1, AA)
local past_pass_stem_base = q(tu_past_prefix, rad1, UU)
-- Make parts.
local variant = vowel_spec.variant or "short"
if variant == "short" or variant == "both" then
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
-- Also add alternative sound (non-compressed) parts. This will lead to some duplicate entries, but they are
-- removed during addition.
if variant == "long" or variant == "both" then
make_form_iii_vi_sound_final_weak_verb(base, vowel_spec)
elseif vform == "III" then
-- Still need to add the alternative form-III verbal noun.
make_form_iii_alt_vn(base, vowel_spec)
end
end
conjugations["III-geminate"] = function(base, vowel_spec)
make_form_iii_vi_geminate_verb(base, vowel_spec)
end
-- Make form IV sound or final-weak verb.
local function make_form_iv_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local final_weak = is_final_weak(base, vowel_spec)
-- core of stem base, minus stem prefixes
local stem_core
-- check for irregular verb أَرَى
local is_raa = raa_radicals(rad1, rad2, rad3)
if is_raa then
base.irregular = true
stem_core = rad1
else
stem_core = q(rad1, SK, rad2)
end
-- verbal noun
local vn = is_raa and
q(HAMZA, I, stem_core, AA, HAMZA, AH) or
q(HAMZA, I, stem_core, AA, final_weak and HAMZA or rad3)
-- various stem bases
local past_stem_base = q(HAMZA, A, stem_core)
local nonpast_stem_base = stem_core
local past_pass_stem_base = q(HAMZA, U, stem_core)
-- make parts
make_augmented_sound_final_weak_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base,
vn)
end
conjugations["IV-sound"] = function(base, vowel_spec)
make_form_iv_sound_final_weak_verb(base, vowel_spec)
end
conjugations["IV-final-weak"] = function(base, vowel_spec)
make_form_iv_sound_final_weak_verb(base, vowel_spec)
end
conjugations["IV-hollow"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
-- verbal noun
local vn = q(HAMZA, I, rad1, AA, rad3, AH)
-- various stem bases
local past_stem_base = q(HAMZA, A, rad1)
local nonpast_stem_base = rad1
local past_pass_stem_base = q(HAMZA, U, rad1)
-- make parts
make_augmented_hollow_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["IV-geminate"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = q(HAMZA, I, rad1, SK, rad2, AA, rad2)
-- various stem bases
local past_stem_base = q(HAMZA, A, rad1)
local nonpast_stem_base = rad1
local past_pass_stem_base = q(HAMZA, U, rad1)
-- make parts
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["V-sound"] = function(base, vowel_spec)
make_form_ii_v_sound_final_weak_verb(base, vowel_spec)
end
conjugations["V-final-weak"] = function(base, vowel_spec)
make_form_ii_v_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VI-sound"] = function(base, vowel_spec)
make_form_iii_vi_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VI-final-weak"] = function(base, vowel_spec)
make_form_iii_vi_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VI-geminate"] = function(base, vowel_spec)
make_form_iii_vi_geminate_verb(base, vowel_spec)
end
-- Make a verbal noun of the general form that applies to forms VII and above. RAD12 is the first consonant cluster
-- (after initial اِ) and RAD34 is the second consonant cluster. RAD5 is the final consonant.
local function high_form_verbal_noun(rad12, rad34, rad5)
return q(_I, rad12, I, rad34, AA, rad5)
end
-- Populate a sound or final-weak verb for any of the various high-numbered augmented forms (form VII and up) that
-- have up to 5 consonants in two clusters in the stem and the same pattern of vowels between. Some of these
-- consonants in certain verb parts are w's, which leads to apparent anomalies in certain stems of these parts, but
-- these anomalies are handled automatically in postprocessing, where we resolve sequences of iwC -> īC, uwC -> ūC,
-- w + sukūn + w -> w + shadda.
-- RAD12 is the first consonant cluster (after initial اِ) and RAD34 is the second consonant cluster. RAD5 is the
-- final consonant.
local function make_high_form_sound_final_weak_verb(base, vowel_spec, rad12, rad34, rad5)
local final_weak = is_final_weak(base, vowel_spec)
local vn = high_form_verbal_noun(rad12, rad34, final_weak and HAMZA or rad5)
-- various stem bases
local nonpast_stem_base = q(rad12, A, rad34)
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, rad12, U, rad34)
-- make parts
make_augmented_sound_final_weak_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base,
vn)
end
local function form_vii_nrad1(base, rad1)
if base.reduced then
if not req(rad1, M) then
error(("Internal error: Form VII first radical %s is not م but .reduced specified; should have been caught earlier"):
format(rget(rad1)))
end
return M .. SH
else
return q("نْ", rad1)
end
end
-- Make form VII sound or final-weak verb.
local function make_form_vii_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
make_high_form_sound_final_weak_verb(base, vowel_spec, form_vii_nrad1(base, rad1), rad2, rad3)
end
conjugations["VII-sound"] = function(base, vowel_spec)
make_form_vii_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VII-final-weak"] = function(base, vowel_spec)
make_form_vii_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VII-hollow"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local nrad1 = form_vii_nrad1(base, rad1)
local vn = high_form_verbal_noun(nrad1, Y, rad3)
-- various stem bases
local nonpast_stem_base = nrad1
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, nrad1)
-- make parts
make_augmented_hollow_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["VII-geminate"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local nrad1 = form_vii_nrad1(base, rad1)
local vn = high_form_verbal_noun(nrad1, rad2, rad2)
-- various stem bases
local nonpast_stem_base = q(nrad1, A)
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, nrad1, U)
-- make parts
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
-- Return Form VIII verbal noun.
local function form_viii_verbal_noun(base, vowel_spec, rad1, rad2, rad3)
local final_weak = is_final_weak(base, vowel_spec)
rad3 = final_weak and HAMZA or rad3
return {high_form_verbal_noun(vowel_spec.form_viii_assim, rad2, rad3)}
end
-- Make form VIII sound or final-weak verb.
local function make_form_viii_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
-- check for irregular verb اِتَّخَذَ
if axadh_radicals(rad1, rad2, rad3) then
base.irregular = true
rad1 = T
end
make_high_form_sound_final_weak_verb(base, vowel_spec, vowel_spec.form_viii_assim, rad2, rad3)
end
conjugations["VIII-sound"] = function(base, vowel_spec)
make_form_viii_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VIII-final-weak"] = function(base, vowel_spec)
make_form_viii_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VIII-hollow"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = form_viii_verbal_noun(base, vowel_spec, rad1, Y, rad3)
-- various stem bases
local nonpast_stem_base = vowel_spec.form_viii_assim
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, nonpast_stem_base)
-- make parts
make_augmented_hollow_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["VIII-geminate"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = form_viii_verbal_noun(base, vowel_spec, rad1, rad2, rad2)
-- various stem bases
local nonpast_stem_base = q(vowel_spec.form_viii_assim, A)
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, vowel_spec.form_viii_assim, U)
-- make parts
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["IX-sound"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = q(_I, rad1, SK, rad2, I, rad3, AA, rad3)
-- various stem bases
local nonpast_stem_base = q(rad1, SK, rad2, A)
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, rad1, SK, rad2, U)
-- make parts
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["IX-final-weak"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
make_high_form_sound_final_weak_verb(base, vowel_spec, q(rad1, SK, rad2), rad3, rad3)
end
-- Populate a sound or final-weak verb for any of the various high-numbered
-- augmented forms that have 5 consonants in the stem and the same pattern of
-- vowels. Some of these consonants in certain verb parts are w's, which leads to
-- apparent anomalies in certain stems of these parts, but these anomalies
-- are handled automatically in postprocessing, where we resolve sequences of
-- iwC -> īC, uwC -> ūC, w + sukūn + w -> w + shadda.
local function make_high5_form_sound_final_weak_verb(base, vowel_spec, rad1, rad2, rad3, rad4, rad5)
make_high_form_sound_final_weak_verb(base, vowel_spec, q(rad1, SK, rad2), q(rad3, SK, rad4), rad5)
end
-- Make form X sound or final-weak verb.
local function make_form_x_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
-- check for irregular verb اِسْتَحْيَا (also اِسْتَحَى)
local is_hayy = hayy_radicals(rad1, rad2, rad3)
local variant = vowel_spec.variant or "both"
if not is_hayy or variant == "long" or variant == "both" then
make_high5_form_sound_final_weak_verb(base, vowel_spec, S, T, rad1, rad2, rad3)
end
if is_hayy and (variant == "short" or variant == "both") then
base.irregular = true
-- Add alternative entries to the verbal paradigms. Any duplicates are removed during addition.
make_high_form_sound_final_weak_verb(base, vowel_spec, S .. SK .. T, rad1, rad3)
end
end
conjugations["X-sound"] = function(base, vowel_spec)
make_form_x_sound_final_weak_verb(base, vowel_spec)
end
conjugations["X-final-weak"] = function(base, vowel_spec)
make_form_x_sound_final_weak_verb(base, vowel_spec)
end
conjugations["X-hollow"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = q(base.reduced and "اِسْ" or "اِسْتِ", rad1, AA, rad3, AH)
-- various stem bases
local past_stem_base = q(base.reduced and "اِسْ" or "اِسْتَ", rad1)
local nonpast_stem_base = q(base.reduced and "سْ" or "سْتَ", rad1)
local past_pass_stem_base = q(base.reduced and "اُسْ" or "اُسْتُ", rad1)
-- make parts
make_augmented_hollow_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["X-geminate"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = q("اِسْتِ", rad1, SK, rad2, AA, rad2)
-- various stem bases
local past_stem_base = q("اِسْتَ", rad1)
local nonpast_stem_base = q("سْتَ", rad1)
local past_pass_stem_base = q("اُسْتُ", rad1)
-- make parts
if base.altgem then
inflect_tense(base, "past", "", {q(past_stem_base, A, rad2, SH), all_same = 1},
past_endings_ay_12_person_only)
end
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn,
base.altgem and "[uncommon]" or nil)
end
conjugations["XI-sound"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = q(_I, rad1, SK, rad2, II, rad3, AA, rad3)
-- various stem bases
local nonpast_stem_base = q(rad1, SK, rad2, AA)
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, rad1, SK, rad2, UU)
-- make parts
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
-- Probably no form XI final-weak, since already geminate in form; would behave as XI-sound.
-- Make form XII sound or final-weak verb.
local function make_form_xii_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
make_high5_form_sound_final_weak_verb(base, vowel_spec, rad1, rad2, W, rad2, rad3)
end
conjugations["XII-sound"] = function(base, vowel_spec)
make_form_xii_sound_final_weak_verb(base, vowel_spec)
end
conjugations["XII-final-weak"] = function(base, vowel_spec)
make_form_xii_sound_final_weak_verb(base, vowel_spec)
end
-- Make form XIII sound or final-weak verb.
local function make_form_xiii_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
make_high5_form_sound_final_weak_verb(base, vowel_spec, rad1, rad2, W, W, rad3)
end
conjugations["XIII-sound"] = function(base, vowel_spec)
make_form_xiii_sound_final_weak_verb(base, vowel_spec)
end
conjugations["XIII-final-weak"] = function(base, vowel_spec)
make_form_xiii_sound_final_weak_verb(base, vowel_spec)
end
-- Make a form XIV or XV sound or final-weak verb. Last radical appears twice (if`anlala / yaf`anlilu) so if it were
-- w or y you'd get if`anwā / yaf`anwī or if`anyā / yaf`anyī, i.e. unlike for most augmented verbs, the identity of
-- the radical matters.
local function make_form_xiv_xv_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local lastrad = base.verb_form == "XV" and Y or rad3
make_high5_form_sound_final_weak_verb(base, vowel_spec, rad1, rad2, N, rad3, lastrad)
end
conjugations["XIV-sound"] = function(base, vowel_spec)
make_form_xiv_xv_sound_final_weak_verb(base, vowel_spec)
end
conjugations["XIV-final-weak"] = function(base, vowel_spec)
make_form_xiv_xv_sound_final_weak_verb(base, vowel_spec)
end
conjugations["XV-sound"] = function(base, vowel_spec)
make_form_xiv_xv_sound_final_weak_verb(base, vowel_spec)
end
-- Probably no form XV final-weak, since already final-weak in form; would behave as XV-sound.
-- Make form Iq or IIq sound or final-weak verb.
local function make_form_iq_iiq_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3, rad4 = get_radicals_4(vowel_spec)
local final_weak = is_final_weak(base, vowel_spec)
local vform = base.verb_form
local vn = vform == "IIq" and
q(TA, rad1, A, rad2, SK, rad3, (final_weak and IN or q(U, rad4))) or
q(rad1, A, rad2, SK, rad3, (final_weak and AAH or q(A, rad4, AH)))
local ta_pref = vform == "IIq" and TA or ""
local tu_pref = vform == "IIq" and TU or ""
-- various stem bases
local past_stem_base = q(ta_pref, rad1, A, rad2, SK, rad3)
local nonpast_stem_base = past_stem_base
local past_pass_stem_base = q(tu_pref, rad1, U, rad2, SK, rad3)
-- make parts
make_augmented_sound_final_weak_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base,
vn)
end
conjugations["Iq-sound"] = function(base, vowel_spec)
make_form_iq_iiq_sound_final_weak_verb(base, vowel_spec)
end
conjugations["Iq-final-weak"] = function(base, vowel_spec)
make_form_iq_iiq_sound_final_weak_verb(base, vowel_spec)
end
conjugations["IIq-sound"] = function(base, vowel_spec)
make_form_iq_iiq_sound_final_weak_verb(base, vowel_spec)
end
conjugations["IIq-final-weak"] = function(base, vowel_spec)
make_form_iq_iiq_sound_final_weak_verb(base, vowel_spec)
end
-- The نون of اِفْعَنْلَلَ, or the إدغام that replaces it. Where ل1 is weak the reference
-- prints the نون assimilated into it: model 427 (p.415) sets اِهْبَنْيَخَ as اِهْبَيَّخَ,
-- and its own footnote gives the root as أصْلُهُ هَبْيَخَ, so the ي is ل1 and the نون is
-- the wazn's. Emitting ل1 twice with a sukūn between them is how reduced forms V/VI
-- write their تاء التفعّل too -- postprocess_subs' "same letter separated by sukūn"
-- rule turns the pair into the šadda, and the مضارع and أمر come out اِهْبَيِّخْ /
-- يَهْبَيِّخُ, which is what the page prints.
--
-- Requested with |مدغم=, never inferred from the radical -- the same call forms V/VI,
-- VII and X already make. p.415 is the only افعنلل paradigm in the corpus with a weak
-- ل1 (the other five, اِفْعَنْلَلَ اِحْوَنْصَلَ اِحْرَنْجَمَ اِفْرَنْقَعَ اِسْلَنْطَأَ
-- اِطْلَنْفَأَ, are all sound there), and one attestation is not enough to make every
-- root of the shape assimilate for every caller on ar.wiktionary.
local function form_iiiq_n_augment(base, rad3)
if not base.reduced then
return N
end
if not (req(rad3, W) or req(rad3, Y)) then
error(("Form IIIq .reduced assimilates the نون into ل1, which must be و or ي, but saw %s"):
format(rget(rad3)))
end
return rad3
end
-- Make form IIIq sound or final-weak verb.
local function make_form_iiiq_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3, rad4 = get_radicals_4(vowel_spec)
make_high5_form_sound_final_weak_verb(base, vowel_spec, rad1, rad2,
form_iiiq_n_augment(base, rad3), rad3, rad4)
end
conjugations["IIIq-sound"] = function(base, vowel_spec)
make_form_iiiq_sound_final_weak_verb(base, vowel_spec)
end
conjugations["IIIq-final-weak"] = function(base, vowel_spec)
make_form_iiiq_sound_final_weak_verb(base, vowel_spec)
end
conjugations["IVq-sound"] = function(base, vowel_spec)
local rad1, rad2, rad3, rad4 = get_radicals_4(vowel_spec)
local vn = q(_I, rad1, SK, rad2, I, rad3, SK, rad4, AA, rad4)
-- various stem bases
local past_stem_base = q(_I, rad1, SK, rad2, A, rad3)
local nonpast_stem_base = q(rad1, SK, rad2, A, rad3)
local past_pass_stem_base = q(_U, rad1, SK, rad2, U, rad3)
-- make parts
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
-- Probably no form IVq final-weak, since already geminate in form; would behave as IVq-sound.
end
create_conjugations()
-------------------------------------------------------------------------------
-- Guts of main conjugation function --
-------------------------------------------------------------------------------
--W: Lexical exceptions — roots the sources conjugate SOUND in a form whose general
-- rule would not. Two rules are overridden here, and both are regular enough that the
-- exceptions have to be listed rather than derived:
--
-- * إعلال — a wāw or yāʾ second radical contracting to a long vowel (أَفَالَ,
-- اِسْتَجَابَ). The listed roots keep the consonant: أَفْيَلَ, اِسْتَجْوَبَ.
-- * إدغام — a geminate root assimilating rad2 into rad3 (عَالَّ, تَعَاثَّ). The listed
-- roots print the فكّ instead: عالَلَ, تَعاثَثَ.
--
-- Keyed by verb form .. ":" .. rad1..rad2..rad3, with the radicals as normalize_root()
-- leaves them (every hamza seat folded to bare ء). The form belongs in the key because
-- soundness is a fact about the lexeme *in that form*, not about the root: جوب is sound
-- in form X (اِسْتَجْوَبَ) and hollow in form I (جَابَ), and the source prints both.
--
-- Upstream's own commentary names several such verbs — izdawaja, istaḥwana, istajwaba,
-- ʕawira — and observes that a caller supplying a *lemma* needs no table, because the
-- lemma spells the soundness out. This repo's callers supply a root and a وزن, which do
-- not, so this is what carries it.
local SOUND_ROOTS = {
-- Form IV keeping a yāʾ middle radical (أَفْيَلَ). Attested verbs, not the صفة مشبهة
-- like أَخْيَف/خَيْفاء; each is sourced. Forms VII/VIII/X of these roots stay hollow.
["IV:خيل"] = true, -- أَخْيَلَ: أخيلت السماءُ تهيأت للمطر — المعجم الوسيط ج1 ص266 (وبه أَخالت أيضًا)
["IV:غيل"] = true, -- أَغْيَلَ: أغيلته فهي مُغْيِل، سقته الغَيْل — لسان العرب ج11 ص111 (وبه أغالت أيضًا)
["IV:حيج"] = true, -- أَحْيَجَ: أحيجت الأرضُ، على خلاف القياس — تاج العروس ج5 ص500
["IV:حين"] = true, -- أَحْيَنَ: أحين القومُ آن لهم أن يبلغوا ما أملوه — المعجم الوسيط ج1 ص212
["IV:خيف"] = true, -- أَخْيَفَ: أخيف الحاجُّ نزلوا خيف منى — كتاب الأفعال لابن القوطية ص35
["IV:ريف"] = true, -- أَرْيَفَ: أريفت الأرضُ إريافًا (خصبت) — المحيط في اللغة ج10 ص256
["IV:زين"] = true, -- أَزْيَنَ: أزينت الأرضُ، حسّنها عشبها — مقاييس اللغة ج3 ص41
-- أنطوان الدحداح، معجم تصريف الأفعال العربية. Each of these is a printed paradigm in
-- its own right under the model number given — the number on the page's own disk — and
-- is in fixtures/ as a whole page rather than as a single cited form.
["IV:ثوب"] = true, -- أَثْوَبَ / يُثْوِبُ، نموذج 226 (beside أَثَابَ from the same root)
["IV:نيء"] = true, -- أَنْيَأَ / يُنْيِئُ، نموذج 226 (أنيأ اللحمَ، من النِّيء)
["VII:سيء"] = true, -- اِنْسَيَأَ / يَنْسَيِئُ، نموذج 256
["VIII:عول"] = true, -- اِعْتَوَلَ / يَعْتَوِلُ، نموذج 266
["X:جوب"] = true, -- اِسْتَجْوَبَ / يَسْتَجْوِبُ، نموذج 286
["III:علل"] = true, -- عالَلَ / يُعالِلُ، نموذج 211
["III:فرر"] = true, -- فارَرَ / يُفارِرُ، نموذج 211
["VI:عثث"] = true, -- تَعاثَثَ / يَتَعاثَثُ، نموذج 241
["VI:غضض"] = true, -- تَغاضَضَ / يَتَغاضَضُ، نموذج 241
}
-- Given form, weakness and radicals, check to make sure the radicals present are allowable for the weakness. Hamzas on
-- alif/wāw/yāʾ seats are never allowed (should always appear as hamza-on-the-line), and various weaknesses have various
-- strictures on allowable consonants.
local function check_radicals(form, weakness, rad1, rad2, rad3, rad4)
local function hamza_check(index, rad)
if rad == HAMZA_ON_ALIF or rad == HAMZA_UNDER_ALIF or
rad == HAMZA_ON_W or rad == HAMZA_ON_Y then
error("Radical " .. index .. " is " .. rad .. " but should be ء (hamza on the line)")
end
end
local function check_waw_ya(index, rad)
if not is_waw_ya(rad) then
error("Radical " .. index .. " is " .. rad .. " but should be و or ي")
end
end
local function check_not_waw_ya(index, rad)
if is_waw_ya(rad) then
error("In a sound verb, radical " .. index .. " should not be و or ي")
end
end
hamza_check(rad1)
hamza_check(rad2)
hamza_check(rad3)
hamza_check(rad4)
if weakness == "assimilated" or weakness == "assimilated+final-weak" then
if rad1 ~= W then
error("Radical 1 is " .. rad1 .. " but should be و")
end
-- don't check that non-assimilated form I verbs don't have wāw as their
-- first radical because some form-I verbs exist where a first-radical wāw
-- behaves as sound, e.g. wajuha yawjuhu "to be distinguished".
end
if weakness == "final-weak" or weakness == "assimilated+final-weak" then
if rad4 then
check_waw_ya(4, rad4)
else
check_waw_ya(3, rad3)
end
elseif vform_supports_final_weak(form) then
-- non-final-weak verbs cannot have weak final radical if there's a corresponding
-- final-weak verb category. I think this is safe. We may have problems with
-- ḥayya/ḥayiya yaḥyā if we treat it as a geminate verb.
if rad4 then
check_not_waw_ya(4, rad4)
else
check_not_waw_ya(3, rad3)
end
end
if weakness == "hollow" then
check_waw_ya(2, rad2)
-- don't check that non-hollow verbs in forms that support hollow verbs
-- don't have wāw or yāʾ as their second radical because some verbs exist
-- where a middle-radical wāw/yāʾ behaves as sound, e.g. form-VIII izdawaja
-- "to be in pairs".
end
if weakness == "geminate" then
if rad4 then
error("Internal error: No geminate quadrilaterals, should not be seen")
end
if rad2 ~= rad3 then
error("Weakness is geminate; radical 3 is " .. rad3 .. " but should be same as radical 2 " .. rad2)
end
elseif vform_supports_geminate(form) then
-- non-geminate verbs cannot have second and third radical same if there's
-- a corresponding geminate verb category. I think this is safe. We
-- don't fuss over double wāw or double yāʾ because this could legitimately
-- be a final-weak verb with middle wāw/yāʾ, treated as sound.
if rad4 then
error("Internal error: No quadrilaterals should support geminate verbs")
end
if rad2 == rad3 and not is_waw_ya(rad2) and not SOUND_ROOTS[form .. ":" .. rad1 .. rad2 .. rad3] then
error("Weakness is '" .. weakness .. "'; radical 2 and 3 are same at " .. rad2 .. " but should not be; consider making weakness 'geminate'")
end
end
end
-- array of substitutions; each element is a 2-entry array FROM, TO; do it
-- this way so the concatenations only get evaluated once
local postprocess_subs = {
-- reorder short-vowel + shadda -> shadda + short-vowel for easier processing
{"(" .. AIU .. ")" .. SH, SH .. "%1"},
----------same letter separated by sukūn should instead use shadda---------
------------happens e.g. in kun-nā "we were".-----------------
{"(.)" .. SK .. "%1", "%1" .. SH},
---------------------------- assimilated verbs ----------------------------
-- iw, iy -> ī (assimilated verbs)
{I .. W .. SK, II},
{I .. Y .. SK, II},
-- uw, uy -> ū (assimilated verbs)
{U .. W .. SK, UU},
{U .. Y .. SK, UU},
-------------- final -yā uses tall alif not alif maqṣūra ------------------
{"(" .. Y .. SH .. "?" .. A .. ")" .. AMAQ, "%1" .. ALIF},
----------------------- handle hamza assimilation -------------------------
-- initial hamza + short-vowel + hamza + sukūn -> hamza + long vowel
{HAMZA .. A .. HAMZA .. SK, HAMZA .. A .. ALIF},
{HAMZA .. I .. HAMZA .. SK, HAMZA .. I .. Y},
{HAMZA .. U .. HAMZA .. SK, HAMZA .. U .. W}
}
local postprocess_tr_subs = {
{"ī([" .. vowels .. "y*])", "iy%1"},
{"ū([" .. vowels .. "w*])", "uw%1"},
{"(.)%*", "%1%1"}, -- implement shadda
---------------------------- assimilated verbs ----------------------------
-- iw, iy -> ī (assimilated verbs)
{"iw([^" .. vowels .. "w])", "ī%1"},
{"iy([^" .. vowels .. "y])", "ī%1"},
-- uw, uy -> ū (assimilated verbs)
{"uw([^" .. vowels .. "w])", "ū%1"},
{"uy([^" .. vowels .. "y])", "ū%1"},
----------------------- handle hamza assimilation -------------------------
-- initial hamza + short-vowel + hamza + sukūn -> hamza + long vowel
{"ʔaʔ(" .. NV .. ")", "ʔā%1"},
{"ʔiʔ(" .. NV .. ")", "ʔī%1"},
{"ʔuʔ(" .. NV .. ")", "ʔū%1"},
}
-- Post-process verb parts to eliminate phonological anomalies. Many of the changes, particularly the tricky ones,
-- involve converting hamza to have the proper seat. The rules for this are complicated and are documented on the
-- [[w:Hamza]] Wikipedia page. In some cases there are alternatives allowed, and we handle them below by returning
-- multiple possibilities.
--
-- ORTHOGRAPHIC EXEMPTIONS (`orth`, set on `base` by the code that knows the fact)
--
-- postprocess_subs above and ar_utilities.process_hamza apply general Arabic orthography
-- to a finished word. A handful of the reference's verb spellings are decisions neither
-- pass can make, because what settles them is not in the string: that a hamza is a
-- *radical*, that a short vowel is the stem's rather than iʿrāb, that a verb is form VIII
-- rather than form I. Each of the three has both halves in the corpus. Form I أَتَى and
-- form VIII اِئْتَمَنَ reach this function's 1s مضارع as the same ءَ + ءْ + ت, and the book
-- prints آتِي for the one and أَأْتَمِنُ for the other (#14). شَأَى's imperative اُشْؤُ and
-- جَرُؤَ's past both end in hamza + a short vowel, and only the first of the two vowels
-- belongs to the stem (#12).
--
-- module/ar-utilities.lua is byte-identical to module/vendor/ar-utilities.lua, and its
-- other callers are on-wiki nominal templates that cannot be regression-tested from this
-- repo, so none of this is fixed by editing it. Each case is instead handled on the
-- caller's side of the shared passes, in one of three ways:
--
-- * park the sequence on a placeholder so a shared rule cannot see it, and restore it
-- afterwards -- #10's original mechanism, now also #14's;
-- * add a spelling beside whatever the shared code returns, because the reference
-- attests both and this module already carries alternatives elsewhere -- #16, #17; or
-- * rewrite the sequence, either before the shared pass so its rule never matches
-- (#12's past clause writes the ā as an ألف مقصورة, which the madda rule does not
-- look for) or after it, where the shared code has made a decision the caller's fact
-- overrides (#12's seating clause, #18's).
--
-- Adding one is three things: a key in `base.orth` set by the builder that knows the
-- fact, a clause here naming the finding, and the XFAIL entries in tests/run.lua deleted
-- in the same commit.
--
-- Three of the clauses below are unconditional, and deliberately so: they repair a
-- spelling the shared code produces that Arabic does not use (#18), restore one it
-- discards (#17), or extend one of its rules to a seat it never reaches (#15). None of
-- the three needs a fact from the caller -- only a place to live that is not the shared
-- file.
local function postprocess_term(term, orth)
if term == "?" then
return "?"
end
orth = orth or {}
-- Phase 1: the reductions in postprocess_subs, with the parked exemptions held out
-- across them. `park_w` is a parameter rather than read from `orth` because #16 runs
-- this phase both ways -- see below.
local function reduce(t, park_w)
-- Add BORDER at text boundaries.
t = BORDER .. t .. BORDER
-- #10: a word-initial hamzat wasl + wāw + sukūn is how a form-I mithal that keeps
-- its wāw spells its imperative (اِوْنَ، اِوْجَلْ). The iw -> ī reduction is right
-- everywhere else and cannot simply be dropped -- it is what turns the form VIII
-- mithal past اِوْتَعَدَ into اِيتَعَدَ, in the same word-initial position, so position
-- alone doesn't separate the two cases.
if park_w then
t = rsub(t, BORDER .. ALIF .. I .. W .. SK, BORDER .. ALIF .. I .. KEEP_W_PH .. SK)
end
-- #14: the reference spells the 1s مضارع of a hamza-initial form VIII analytically,
-- أَأْتَمِنُ -- the prefix hamza, then the quiescent radical hamza on its own seat --
-- where the أَ + أْ -> آ contraction below and the alif-madda rule in process_hamza
-- between them return آتَمِنُ. Form I of a hamza-initial root arrives here with the
-- identical sequence and *is* printed contracted (آكُلُ، آخُذُ، آتِي), so the string
-- cannot decide this and the flag does.
if orth.analytic_hamza then
t = rsub(t, BORDER .. HAMZA .. A .. HAMZA .. SK,
BORDER .. HAMZA .. A .. KEEP_HAMZA_PH .. SK)
end
-- Do the main post-processing, based on the pattern substitutions in postprocess_subs.
for _, sub in ipairs(postprocess_subs) do
t = rsub(t, sub[1], sub[2])
end
-- #12, the past half: a form-I final-weak verb on a wāw rad3 builds its past 3ms ā
-- as a real alif (دَعَا), and after a hamza rad2 that puts hamza-on-alif + fatḥa +
-- alif in front of process_hamza's madda rule (أَا -> آ), which swallows the seat:
-- شَأَى comes out شَآ. The rule itself is right -- it is what gives قَرَأَ its dual قَرَآ --
-- and it keys on ALIF, not on AMAQ, which is why the module already gets رَأَى and
-- نَأَى right: a yāʾ rad3 never produces the second alif. So the ā is written as an
-- ألف مقصورة here instead, which sidesteps the madda rule rather than suppressing
-- it. Only the past 3ms of an -aw verb reaches this sequence; every derived form
-- already ends its past 3ms in AMAQ.
if orth.hamza_rad2_final_weak then
t = rsub(t, HAMZA .. A .. ALIF .. BORDER, HAMZA .. A .. AMAQ .. BORDER)
end
t = t:gsub(KEEP_W_PH, W)
-- Restored as a plain hamza, not a seat: the seating pass below still has to place it,
-- and gets it right (a quiescent medial hamza after a fatḥa takes the alif).
t = t:gsub(KEEP_HAMZA_PH, HAMZA)
return (t:gsub(BORDER, ""))
end
-- Phase 2: hamza seats. Returns the list of spellings for one reduced term.
local function seat(t)
if not rfind(t, HAMZA) then
return { t }
end
-- #17: after a long ū, process_hamza treats و + ؤُ + و as having no acceptable
-- original spelling and returns only its two alternatives (ئُو، ءُو) -- while the
-- same function keeps the original beside the alternative after a long ā, which is
-- what gives سَاؤُوا. The reference prints the wāw seat after a long ū throughout
-- (يَسُوؤُونَ، تَسُوؤُونَ، سُوؤُوا, against its own تَسُوئِينَ / سُوئِي for the kasra: the
-- seat follows the hamza's own vowel). So the discarded spelling is added back
-- here, after theirs rather than instead of them -- the same order the long-ā
-- branch of that function already uses.
local waw_seat
if rfind(t, W .. HAMZA .. U .. W) then
local parked = t:gsub(W .. HAMZA .. U .. W, W .. WAW_SEAT_PH .. U .. W)
waw_seat = ar_utilities.process_hamza(parked:gsub(HAMZA, HAMZA_PH))[1]
waw_seat = waw_seat:gsub(WAW_SEAT_PH, HAMZA_ON_W)
end
local out = ar_utilities.process_hamza(t:gsub(HAMZA, HAMZA_PH))
if waw_seat then
out[#out + 1] = waw_seat
end
-- #12, the imperative/jussive half: apocopation strands the radical hamza at the
-- end of the word, where process_hamza takes its seat from the *preceding* letter's
-- vowel and, finding a sukūn, drops it on the line -- اُشْءُ, أَفْءِ. That rule is right
-- for a hamza whose own vowel is iʿrāb (جُزْء), and cannot be made position-sensitive
-- inside the shared file: the fatḥa of جَرُؤَ is the ماضٍ ending and the ḍamma before
-- it rightly wins the seat. Here the short vowel left after rad3 goes is the stem's
-- own, which is the fact this flag carries. The reference seats it: اُشْؤُ (p160, شأو,
-- form I) and أَفْإِ (p300, فأو, form IV) -- two roots, two measures, two pages, and
-- the two vowels between them.
--
-- The seat is the wāw for a ḍamma and the alif otherwise; #18's substitution below
-- then writes the alif's hamza underneath when the vowel is a kasra, which is how
-- the alif branch comes out as إ. That is not a third rule invented here: the same
-- إ is what p368's اِرْتَإِ and p182's imperative إ already print, and what the module
-- already produces for both, having reached the alif seat by its own route (a
-- preceding fatḥa, and word-initial position). Only p300 needed the seat itself.
--
-- Gated on a preceding sukūn, which is the whole of what the two pages attest. The
-- hamza after a *long* vowel is left alone (وأي's passive jussive تُوءَ), where the
-- shared code also leaves it on the line and no page here prints the slot; and the
-- pattern wants the vowel directly after the hamza, so a šadda'd seat (p271's رَأِّ)
-- is not matched, the same gate #18 gets for free.
if orth.hamza_rad2_final_weak then
for i, v in ipairs(out) do
v = rsub(BORDER .. v .. BORDER, SK .. HAMZA .. "(" .. AIU .. ")" .. BORDER,
function(vowel)
return SK .. (vowel == U and HAMZA_ON_W or HAMZA_ON_ALIF) .. vowel .. BORDER
end)
out[i] = (v:gsub(BORDER, ""))
end
end
-- #15: a hamza left on the line, carrying a fatḥa, with an alif after it, is
-- printed as a madda -- but not when that would end the word directly after an
-- alif. The reference sets يَداآنِ / تَداآنِ (p201, دوء), يَهاآنِ / تَهاآنِ (p242,
-- هوء) and يَسُوآنِ / تَسُوآنِ (p157, سوء) for the مضارع duals, and سُوآ for p157's
-- imperative dual, while the same three verbs print their *word-final* duals
-- داءا / هاءا / سَاءَا with the hamza on the line -- so the exception is carried by
-- the preceding alif, not by the position alone: سُوآ is word-final too and does
-- contract, after a long ū. Ten cells, three roots, three pages, and the blocked
-- case attested on all three. process_hamza applies this rule only to a hamza it
-- has seated on an alif (which is what gives تَدَرْبَآ); after a long vowel it
-- leaves the seat on the line and the rule never fires, so the extension is here.
--
-- Confined to a hamza after a *long vowel*, which is the whole of what those three
-- pages attest. Written without that gate it also contracts the فَعْلان participle
-- سَوْءَان to سَوْآن -- a hamza after the sukūn of a diphthong, not after a long vowel,
-- in a slot no fixture covers and no page here prints. The mater carries no sukūn
-- in a long vowel as this module builds one, so requiring the two to be adjacent
-- is the gate.
for i, v in ipairs(out) do
v = BORDER .. v .. BORDER
v = rsub(v, ALIF .. HAMZA .. A .. ALIF .. BORDER, ALIF .. NO_MADDA_PH .. A .. ALIF .. BORDER)
v = rsub(v, "([" .. AMAD .. ALIF .. W .. Y .. "])" .. HAMZA .. A .. ALIF, "%1" .. AMAD)
v = v:gsub(NO_MADDA_PH, HAMZA)
out[i] = (v:gsub(BORDER, ""))
end
-- #18: a hamza seated on an alif and carrying a bare kasra is written *below* the
-- alif. The seat is chosen from the preceding letter's vowel, which is right when
-- the hamza's own vowel is iʿrāb (مَلْجَأٍ) and is why the rule lives in the shared
-- code; in a verb there is no iʿrāb, and the kasra that follows an apocopated
-- radical hamza is the stem's own -- so اِرْتَأَى's jussive is اِرْتَإِ.
--
-- Not when the alif also carries a šadda, and the corpus is what says so: رَأَّى
-- (p271, form II of the *same* root رأو as p368's اِرْتَأَى) prints its apocopated
-- imperative رَأِّ, hamza above, where the doubled radical puts a šadda on the seat.
-- Written unconditionally first, this rule broke that cell and nothing else in 379
-- paradigms, which is both the counter-example and its own control: one root, two
-- forms, two pages, and the presence of the šadda the only difference between them.
-- No test for the šadda is needed: postprocess_subs has already reordered it in
-- front of the vowel, so أ + šadda + kasra simply isn't the sequence below.
for i, v in ipairs(out) do
out[i] = v:gsub(HAMZA_ON_ALIF .. I, HAMZA_UNDER_ALIF .. I)
end
return out
end
local out = seat(reduce(term, orth.keep_initial_w))
-- #16: a retained-wāw مثال reduces اِوْ to اِيْ in the imperative on p240 (اِيْجَعْ, all
-- five cells) and does not on p247 (اِوْنَ) -- the book carries both spellings and
-- grammar allows both, so the module carries both too, the way it already carries
-- سَائُوا | سَاؤُوا. #10's park is still right; what was missing is the second form
-- beside the first. Widening loose() instead would retire the suite's only check on
-- the mithal-wāwī / mithal-yāʾī imperative distinction, which is why this is here.
if orth.keep_initial_w then
for _, reduced in ipairs(seat(reduce(term, false))) do
local seen = false
for _, v in ipairs(out) do
if v == reduced then
seen = true
break
end
end
if not seen then
out[#out + 1] = reduced
end
end
end
if #out == 1 then
return out[1]
end
return out
end
local function postprocess_translit(translit)
if translit == "?" then
return "?"
end
-- Add BORDER at text boundaries.
translit = BORDER .. translit .. BORDER
-- Do the main post-processing, based on the pattern substitutions in postprocess_tr_subs.
for _, sub in ipairs(postprocess_tr_subs) do
translit = rsub(translit, sub[1], sub[2])
end
translit = translit:gsub(BORDER, "")
return translit
end
-- #13: نقل الحركة + إدغام in a لفيف مقرون verb outside form I. Where the paradigm brings
-- two vowelled yāʾs together on a *quiescent* radical, the reference moves the first
-- yāʾ's vowel back onto that radical and geminates the pair: أَحْيَيَا -> أَحَيَّا,
-- يُحْيِيَانِ / تُحْيِيَانِ -> يُحِيَّانِ / تُحِيَّانِ, أَحْيِيَا -> أَحِيَّا (p302, form IV on حيي),
-- and the same five slots of اِسْتَحْيَا (p389, form X on the same root).
--
-- Only the نقل is done here. The إدغام is postprocess_subs' own "same letter separated
-- by a sukūn -> šadda" rule, which already puts the šadda in front of the vowel the way
-- the rest of the module writes it -- so this has to run *before* postprocess_forms(),
-- and does, from conjugate_verb().
--
-- The gate is that sukūn, and the reference's pages calibrate it from both sides:
-- * a *long* vowel in front of the first yāʾ can host nothing, and عايا (p287, form
-- III on عيي) prints يُعايِيانِ، تُعايِيانِ and عايِيا with both yāʾs. The pattern below
-- does not match them because there is no consonant + sukūn there to match;
-- * the second yāʾ has to carry a short vowel of its own. The control is in the same
-- columns of the pages that do contract: يُحْيِي (3ms), يُحْيِينَ (3fp) and تُحْيِينَ
-- (2fs), where it is the mater of a long ī, are printed uncontracted, and the
-- pattern does not match those either.
-- Between them the two conditions pick out exactly the five slots of p302 and p389 that
-- contract, against the twenty-odd cells of the same two paradigms that do not.
--
-- Form I is excluded, and by attestation rather than by phonology: حَيِيَ (p229, 017_159)
-- and عَيِيَ (p250, 238_159) put the identical consonant + sukūn + yāʾ sequence in their
-- مضارع and imperative duals and both print them uncontracted -- يَحْيَيانِ، اِحْيَيا،
-- يَعْيَيانِ، اِعْيَيا. Form I has its own version of this alternation, حَيَّ beside حَيِيَ,
-- and it is a different mechanism: the vowel is dropped rather than moved, which is why
-- make_form_i_hayy_verb() spells it out as a stem pair instead.
--
-- Added beside the uncontracted form and never instead of it: both spellings are
-- current, and form X already carries the two the module builds from its own stems
-- (اِسْتَحْيَيَا | اِسْتَحَيَا), so this is a third entry in a slot that already had a choice.
local NAQL_FROM = "(.)" .. SK .. Y .. "(" .. AIU .. ")" .. Y .. "(" .. AIU .. ")"
local NAQL_TO = "%1%2" .. Y .. SK .. Y .. "%3"
local function add_naql_idgham_forms(base)
-- "none" is a user-supplied paradigm with no verb form to reason from; form I is
-- excluded on the evidence above.
if base.verb_form == "I" or base.verb_form == "none" then
return
end
-- Collected first and inserted afterwards: inserting into base.forms while iterating
-- over it would let a contracted form be re-read as a source in the same pass.
local additions
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
local naql, changed = rsubb(form.form, NAQL_FROM, NAQL_TO)
if changed then
additions = additions or {}
additions[#additions + 1] = {slot, {form = naql, footnotes = form.footnotes}}
end
end
end
if additions then
for _, addition in ipairs(additions) do
iut.insert_form(base.forms, addition[1], addition[2])
end
end
end
local function postprocess_forms(base)
local converted_values = {}
for slot, forms in pairs(base.forms) do
local need_dedup = false
for i, form in ipairs(forms) do
local term = postprocess_term(form.form, base.orth)
local translit = form.translit and postprocess_translit(form.translit) or nil
if term ~= form.form or translit ~= form.translit then
need_dedup = true
end
converted_values[i] = {term, translit}
end
if need_dedup then
local temp_dedup = {}
for i = 1, #forms do
local new_term, new_translit = unpack(converted_values[i])
if type(new_term) == "table" then
for _, nt in ipairs(new_term) do
local new_formobj = {
form = nt,
translit = new_translit,
footnotes = forms[i].footnotes,
}
iut.insert_form(temp_dedup, "temp", new_formobj)
end
else
local new_formobj = {
form = new_term,
translit = new_translit,
footnotes = forms[i].footnotes,
}
iut.insert_form(temp_dedup, "temp", new_formobj)
end
end
base.forms[slot] = temp_dedup.temp
end
end
end
local function process_slot_overrides(base)
for slot, forms in pairs(base.slot_overrides) do
local existing_values = base.forms[slot]
base.forms[slot] = nil
for _, form in ipairs(forms) do
-- + in active participle for form I requests slot ap1
if form.form == "+" and (base.verb_form ~= "I" or slot ~= "ap") then
if not existing_values then
error(("Slot '%s' requested the default value but no such value available"):format(slot))
end
-- We maintain an invariant that no two slots share a form object (although they may share the footnote
-- lists inside the form objects). However, there is no need to copy the form objects here because there
-- is a one-to-one correspondence between slots and slot overrides, i.e. you can't have a default value
-- go into two slots.
insert_form_or_forms(base, slot, existing_values, "allow overrides", form.uncertain)
elseif default_indicator_to_active_participle_slot[form.form] then
if form.form == "++" then
if slot ~= "vn" and slot ~= "ap" and slot ~= "pp" then
error(("Secondary default value request '++' only applicable to verbal nouns and pariciples, but found in slot '%s'"):
format(slot))
end
else
if slot ~= "ap" then
error(("Secondary default value request '%s' only applicable to active pariciples, but found in slot '%s'"):
format(form.form, slot))
end
end
local secondary_default_slot =
slot == "vn" and "vn2" or slot == "pp" and "pp2" or
default_indicator_to_active_participle_slot[form.form]
local existing_values = base.forms[secondary_default_slot]
if not existing_values then
error(("Slot '%s' requested a secondary default value using '%s' but no such value available"):
format(slot, form.form))
end
-- See comment above about the lack of need to copy the form objects.
insert_form_or_forms(base, slot, existing_values, "allow overrides", form.uncertain)
-- To make sure there aren't shared form objects.
base.forms[secondary_default_slot] = nil
else
insert_form_or_forms(base, slot, form, "allow overrides", form.uncertain)
end
end
end
-- Now, for non-stative form-I verbs, fill the active participle slot from ap1 unless it should be missing (e.g.
-- passive-only or user specified 'ap:-').
if base.verb_form == "I" and not base.forms.ap and base.forms.ap1 and not skip_slot(base, "ap") then
local saw_non_stative = false
for _, vowel_spec in ipairs(base.conj_vowels) do
if req(vowel_spec.past, A) then
saw_non_stative = true
break
end
end
if saw_non_stative then
base.forms.ap = base.forms.ap1
-- To make sure there aren't shared form objects.
base.forms.ap1 = nil
end
end
end
local function handle_lemma_linked(base)
-- Compute linked versions of potential lemma slots, for use in {{ar-verb}}. We substitute the original lemma
-- (before removing links) for forms that are the same as the lemma, if the original lemma has links.
for _, slot in ipairs(export.potential_lemma_slots) do
if base.forms[slot] then
insert_form_or_forms(base, slot .. "_linked", iut.map_forms(base.forms[slot], function(form)
if form == base.lemma and rfind(base.linked_lemma, "%[%[") then
return base.linked_lemma
else
return form
end
end))
end
end
end
-- Process specs given by the user using 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'.
local function process_addnote_specs(base)
for _, spec in ipairs(base.addnote_specs) do
for _, slot_spec in ipairs(spec.slot_specs) do
slot_spec = "^" .. slot_spec .. "$"
for slot, forms in pairs(base.forms) do
if rfind(slot, slot_spec) then
-- To save on memory, side-effect the existing forms.
for _, form in ipairs(forms) do
form.footnotes = iut.combine_footnotes(form.footnotes, spec.footnotes)
end
end
end
end
end
end
local function add_missing_links_to_forms(base)
-- Any forms without links should get them now. Redundant ones will be stripped later.
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
form.form = "[[" .. form.form .. "]]"
end
end
end
end
local function conjugate_verb(base)
construct_stems(base)
-- Orthographic exemptions the shared hamza/reduction passes can't decide for
-- themselves; see the block comment on postprocess_term(). Most are set by the
-- stem builder that knows the fact, so this table has to exist before dispatch.
base.orth = base.orth or {}
for _, vowel_spec in ipairs(base.conj_vowels) do
-- Reconstruct conjugation type from verb form and (possibly inferred) weakness.
conj_type = base.verb_form .. "-" .. vowel_spec.weakness
-- #14: a hamza-initial form VIII spells its 1s مضارع analytically (أَأْتَمِنُ), where
-- form I of a hamza-initial root contracts to a madda (آتِي) from the identical
-- sequence. Declared here rather than in the four VIII builders because it holds
-- for all of them and depends on nothing else they compute.
if base.verb_form == "VIII" and vowel_spec.rad1 and rfind(rget(vowel_spec.rad1) or "", HAMZA_ANY) then
base.orth.analytic_hamza = true
end
-- #12: a final-weak verb whose rad2 is a hamza. Two of the shared passes read that
-- radical as an ordinary word-final hamza and get it wrong in the two slots where
-- rad3 stops being a consonant -- see the two clauses in postprocess_term(). Like
-- #14 this is declared here rather than in a builder: it holds for every form the
-- root can take (شأو, فأو, رأو, وأي in the corpus, forms I, II, IV and VIII) and
-- depends on nothing else the builders compute.
if rfind(vowel_spec.weakness or "", "final%-weak") and vowel_spec.rad2 and
rfind(rget(vowel_spec.rad2) or "", HAMZA_ANY) then
base.orth.hamza_rad2_final_weak = true
end
-- Check that the conjugation type is recognized.
if not conjugations[conj_type] then
error("Unknown conjugation type '" .. conj_type .. "'")
end
-- The way the conjugation functions work is they always add entries to the appropriate parts of the paradigm
-- (each of which is an array), rather than setting the values. This makes it possible to call more than one
-- conjugation function and essentially get a paradigm of the "either A or B" kind. Doing this may insert
-- duplicate entries into a particular paradigm part, but this is not a problem because we check for duplicate
-- entries when adding them, and don't insert in that case.
conjugations[conj_type](base, vowel_spec)
end
-- #13: before postprocess_forms(), which supplies the إدغام half of the alternation.
add_naql_idgham_forms(base)
postprocess_forms(base)
process_slot_overrides(base)
-- This should happen before add_missing_links_to_forms() so that the comparison `form == base.lemma` in
-- handle_lemma_linked() works correctly and compares unlinked forms to unlinked forms.
handle_lemma_linked(base)
process_addnote_specs(base)
if not base.alternant_multiword_spec.args.noautolinkverb then
add_missing_links_to_forms(base)
end
end
local function parse_indicator_spec(angle_bracket_spec)
-- Store the original angle bracket spec so we can reconstruct the overall conj spec with the lemma(s) in them.
local base = {
angle_bracket_spec = angle_bracket_spec,
conj_vowels = {},
root_consonants = {},
user_stem_overrides = {},
user_slot_overrides = {},
slot_explicitly_missing = {},
slot_uncertain = {},
slot_override_uses_default = {},
addnote_specs = {},
}
local function parse_err(msg)
error(msg .. ": " .. angle_bracket_spec)
end
local function fetch_footnotes(separated_group)
local footnotes
for j = 2, #separated_group - 1, 2 do
if separated_group[j + 1] ~= "" then
parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'")
end
if not footnotes then
footnotes = {}
end
table.insert(footnotes, separated_group[j])
end
return footnotes
end
local inside = angle_bracket_spec:match("^<(.*)>$")
assert(inside)
local segments = put.parse_multi_delimiter_balanced_segment_run(inside, {{"[", "]"}, {"<", ">"}})
local dot_separated_groups = put.split_alternating_runs_and_strip_spaces(segments, "%.")
-- The first dot-separated element must specify the verb form, e.g. IV or IIq. If the form is I, it needs to include
-- the the past and non-past vowels, e.g. I/a~u for kataba ~ yaktubu. More than one vowel can be given,
-- comma-separated, and more than one past~non-past pair can be given, slash-separated, e.g. I/a,u~u/i~a for form I
-- كمل, which can be conjugated as kamala/kamula ~ yakmulu or kamila ~ yakmalu. An individual vowel spec must be one
-- of a, i or u and in general (a) at least one past~non-past pair most be given, and (b) both past and non-past
-- vowels must be given even though sometimes the vowel can be determined from the unvocalized form. An exception is
-- passive-only verbs, where the vowels can't in general be determined (except indirectly in some cases by looking
-- at an associated non-passive verb); in that case, the vowel~vowel spec can left out.
local slash_separated_groups = put.split_alternating_runs_and_strip_spaces(dot_separated_groups[1], "/")
local form_spec = slash_separated_groups[1]
base.form_footnotes = fetch_footnotes(form_spec)
if form_spec[1] == "" then
parse_err("Missing verb form")
end
if not allowed_vforms_with_weakness_set[form_spec[1]] then
parse_err(("Unrecognized verb form '%s', should be one of %s"):format(
form_spec[1], list_to_text(allowed_vforms, nil, " or ")))
end
if form_spec[1]:find("%-") then
base.verb_form, base.explicit_weakness = form_spec[1]:match("^(.-)%-(.*)$")
else
base.verb_form = form_spec[1]
end
if #slash_separated_groups > 1 then
if base.verb_form ~= "I" then
parse_err(("Past~non-past vowels can only be specified when verb form is I, but saw form '%s'"):format(
base.verb_form))
end
for i = 2, #slash_separated_groups do
local slash_separated_group = slash_separated_groups[i]
local tilde_separated_groups = put.split_alternating_runs_and_strip_spaces(slash_separated_group, "~")
if #tilde_separated_groups ~= 2 then
parse_err(("Expected two tilde-separated vowel specs: %s"):format(table.concat(slash_separated_group)))
end
local function parse_conj_vowels(tilde_separated_group, vtype)
local conj_vowel_objects = {}
local comma_separated_groups = put.split_alternating_runs_and_strip_spaces(tilde_separated_group, ",")
for _, comma_separated_group in ipairs(comma_separated_groups) do
local conj_vowel = comma_separated_group[1]
if conj_vowel ~= "a" and conj_vowel ~= "i" and conj_vowel ~= "u" then
parse_err(("Expected %s conjugation vowel '%s' to be one of a, i or u in %s"):format(
vtype, conj_vowel, table.concat(slash_separated_group)))
end
conj_vowel = dia[conj_vowel]
local conj_vowel_footnotes = fetch_footnotes(comma_separated_group)
-- Try to use strings when possible as it makes q() significantly more efficient.
if conj_vowel_footnotes then
table.insert(conj_vowel_objects, {form = conj_vowel, footnotes = conj_vowel_footnotes})
else
table.insert(conj_vowel_objects, conj_vowel)
end
end
return conj_vowel_objects
end
local conj_vowel_spec = {
past = parse_conj_vowels(tilde_separated_groups[1], "past"),
nonpast = parse_conj_vowels(tilde_separated_groups[2], "non-past"),
}
table.insert(base.conj_vowels, conj_vowel_spec)
end
end
for i = 2, #dot_separated_groups do
local dot_separated_group = dot_separated_groups[i]
local first_element = dot_separated_group[1]
if first_element == "addnote" then
local spec_and_footnotes = fetch_footnotes(dot_separated_group)
if #spec_and_footnotes < 2 then
parse_err("Spec with 'addnote' should be of the form 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'")
end
local slot_spec = table.remove(spec_and_footnotes, 1)
local slot_spec_inside = rmatch(slot_spec, "^%[(.*)%]$")
if not slot_spec_inside then
parse_err("Internal error: slot_spec " .. slot_spec .. " should be surrounded with brackets")
end
local slot_specs = rsplit(slot_spec_inside, ",")
-- FIXME: Here, [[Module:it-verb]] called strip_spaces(). Generally we don't do this. Should we?
table.insert(base.addnote_specs, {slot_specs = slot_specs, footnotes = spec_and_footnotes})
elseif first_element:find("^var:") then
if #dot_separated_group > 1 then
parse_err(("Can't attach footnotes to 'var:' spec '%s'"):format(first_element))
end
base.variant = first_element:match("^var:(.*)$")
elseif first_element:find("^I+V?:") then
local root_cons, root_cons_value = first_element:match("^(I+V?):(.*)$")
local root_index
if root_cons == "I" then
root_index = 1
elseif root_cons == "II" then
root_index = 2
elseif root_cons == "III" then
root_index = 3
elseif root_cons == "IV" then
root_index = 4
if not base.verb_form:find("q$") then
parse_err(("Can't specify root consonant IV for non-quadriliteral verb form '%s': %s"):format(
base.verb_form, first_element))
end
end
local cons, translit = root_cons_value:match("^(.*)//(.*)$")
if not cons then
cons = root_cons_value
end
local root_footnotes = fetch_footnotes(dot_separated_group)
if not translit and not root_footnotes then
base.root_consonants[root_index] = cons
else
base.root_consonants[root_index] = {form = cons, translit = translit, footnotes = root_footnotes}
end
elseif first_element:find("^[a-z][a-z0-9_]*:") then
local slot_or_stem, remainder = first_element:match("^(.-):(.*)$")
dot_separated_group[1] = remainder
local comma_separated_groups = put.split_alternating_runs_and_strip_spaces(dot_separated_group, "[,،]")
if overridable_stems[slot_or_stem] then
if base.user_stem_overrides[slot_or_stem] then
parse_err("Overridable stem '" .. slot_or_stem .. "' specified twice")
end
base.user_stem_overrides[slot_or_stem] = overridable_stems[slot_or_stem](comma_separated_groups,
{prefix = slot_or_stem, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
else -- assume a form override; we validate further later when the possible slots are available
if base.user_slot_overrides[slot_or_stem] then
parse_err("Form override '" .. slot_or_stem .. "' specified twice")
end
base.user_slot_overrides[slot_or_stem] = allow_multiple_values_for_override(comma_separated_groups,
{prefix = slot_or_stem, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes},
"is form override")
end
elseif indicator_flags[first_element] then
if #dot_separated_group > 1 then
parse_err("No footnotes allowed with '" .. first_element .. "' spec")
end
if base[first_element] then
parse_err("Spec '" .. first_element .. "' specified twice")
end
base[first_element] = true
else
local passive, uncertain = first_element:match("^(.*)(%?)$")
passive = passive or first_element
uncertain = not not uncertain
if passive_types[passive] then
if #dot_separated_group > 1 then
parse_err("No footnotes allowed with '" .. passive .. "' spec")
end
if base.passive then
parse_err("Value for passive type specified twice")
end
base.passive = passive
base.passive_uncertain = uncertain
else
parse_err("Unrecognized spec '" .. first_element .. "'")
end
end
end
return base
end
-- Normalize all lemmas, substituting the pagename for blank lemmas and adding links to multiword lemmas.
local function normalize_all_lemmas(alternant_multiword_spec, head)
-- (1) Add links to all before and after text. Remember the original text so we can reconstruct the verb spec later.
if not alternant_multiword_spec.args.noautolinktext then
iut.add_links_to_before_and_after_text(alternant_multiword_spec, "remember original")
end
-- (2) Remove any links from the lemma, but remember the original form so we can use it below in the 'lemma_linked'
-- form.
iut.map_word_specs(alternant_multiword_spec, function(base)
if base.lemma == "" then
base.lemma = head
end
base.user_specified_lemma = base.lemma
base.lemma = m_links.remove_links(base.lemma)
base.user_specified_verb = base.lemma
base.verb = base.user_specified_verb
local linked_lemma
if alternant_multiword_spec.args.noautolinkverb or base.user_specified_lemma:find("%[%[") then
linked_lemma = base.user_specified_lemma
else
-- Add links to the lemma so the user doesn't specifically need to, since we preserve
-- links in multiword lemmas and include links in non-lemma forms rather than allowing
-- the entire form to be a link.
linked_lemma = iut.add_links(base.user_specified_lemma)
end
base.linked_lemma = linked_lemma
end)
end
--W: Lexical exceptions — hollow roots in the Form I فَعُلَ pattern (past~non-past u~u)
-- that keep the middle radical SOUND instead of contracting to a long vowel (هَيُؤَ /
-- يَهْيُؤُ, not هَاءَ / يَهُوءُ). This is not the general rule for u~u hollow verbs --
-- طَالَ / يَطُولُ (ط-و-ل) contracts as normal -- so each entry here is a specific
-- attested exception, not a phonological class.
-- Keyed by rad1..rad2..rad3.
-- Keyed with bare hamza (ء) for rad3, matching normalize_root()'s canonicalization of root radicals
-- (HAMZA_ON_ALIF etc. all fold to HAMZA) -- the raw root "هيأ" normalizes to radicals ه, ي, ء.
local SOUND_FORM_I_UU_ROOTS = {
["هي" .. HAMZA] = true, -- هَيُؤَ ـُ: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان، ط2، 1995، ص203
}
-- Determine weakness from radicals. Used when root given in place of lemma (e.g. for {{ar-verb forms}}).
-- `past_vowel`/`nonpast_vowel`, if given, are the past/non-past vowel of a form-I verb (a string or
-- footnote-bearing form object, per `req()`); they let SOUND_FORM_I_UU_ROOTS single out the specific
-- vowel pattern under which a hollow root is attested as sound, without affecting its other patterns
-- (e.g. a root could still contract normally under a different past~non-past pairing).
local function weakness_from_radicals(form, rad1, rad2, rad3, rad4, past_vowel, nonpast_vowel)
local weakness = nil
local quadlit = form:find("q$")
-- If weakness unspecified, derive from radicals.
if not quadlit then
if is_waw_ya(rad3) and rad1 == W and form == "I" then
weakness = form_i_w_assimilated(past_vowel, nonpast_vowel, rad1, rad2, rad3) and "assimilated+final-weak" or
"final-weak"
elseif is_waw_ya(rad3) and vform_supports_final_weak(form) then
weakness = "final-weak"
elseif rad2 == rad3 and vform_supports_geminate(form) then
-- ...unless the source prints the فكّ rather than the إدغام for this
-- lexeme in this form (عالَلَ, تَعاثَثَ); see SOUND_ROOTS.
weakness = SOUND_ROOTS[form .. ":" .. rad1 .. rad2 .. rad3] and "sound" or "geminate"
elseif is_waw_ya(rad2) and vform_supports_hollow(form) then
--W: Both wāw (و) and yāʾ (ي) in the middle position create hollow verbs, in form I
-- (قَالَ from ق-و-ل, بَاعَ from ب-ي-ع) and in the augmented forms IV, VII, VIII, X
-- (أَتَاسَ from ت-ي-س, أَبَانَ from ب-ي-ن, أَطَاحَ from ط-ي-ح — معجم متن اللغة).
if SOUND_ROOTS[form .. ":" .. rad1 .. rad2 .. rad3] then
-- Lexical exceptions that keep the middle radical sound (أَفْيَلَ,
-- اِسْتَجْوَبَ) instead of contracting it; see SOUND_ROOTS.
weakness = "sound"
elseif form == "I" and past_vowel and nonpast_vowel and req(past_vowel, U) and req(nonpast_vowel, U) and
SOUND_FORM_I_UU_ROOTS[rad1 .. rad2 .. rad3] then
-- Lexical exceptions whose Form I فَعُلَ keeps the middle radical sound (هَيُؤَ); see
-- SOUND_FORM_I_UU_ROOTS. Gated to u~u specifically since that's the attested pattern.
weakness = "sound"
else
weakness = "hollow"
end
elseif rad1 == W and form == "I" then
-- Vowel-conditioned, like the lemma path below: a wāw-initial form-I verb only
-- elides its wāw under a kasra (or lowered-kasra) non-past. Before this, the two
-- inference paths in this module disagreed -- infer_radicals() kept the wāw for
-- i~a and u~u while this one dropped it for every vowel pattern.
weakness = form_i_w_assimilated(past_vowel, nonpast_vowel, rad1, rad2, rad3) and "assimilated" or "sound"
else
weakness = "sound"
end
else
if is_waw_ya(rad4) then
weakness = "final-weak"
else
weakness = "sound"
end
end
return weakness
end
-- Join the infixed tāʔ (ت) to the first radical in form VIII verbs. This may cause assimilation of the tāʔ to the
-- radical or in some cases the radical to the tāʔ. Used when a root is supplied instead of a lemma (which already has
-- the appropriate assimilation in it).
--W: `reduced` is |مدغم=. A hamza first radical assimilates into the infixed tāʾ the
-- same way a wāw does -- اِئْتَحَدَ becomes اِتَّحَدَ, اِئْتَزَرَ becomes اِتَّزَرَ, اِئْتَخَذَ
-- becomes اِتَّخَذَ -- but unlike the wāw it is optional, and this book prints the class
-- both ways: p358's اِئْتَمَنَ and اِئْتَشَرَ unassimilated beside p359's اِتَّحَدَ and
-- اِتَّزَرَ, all four under model 262 (افتعل مهموز الفاء). p359 states the derivation in
-- its own footnotes -- «أصلُ الفعلِ اِئْتَحَدَ» and «أصلُ الفعلِ اِئْتَزَرَ وهوَ الأصحُّ» --
-- so the أصل is the module's default and the assimilation is what the caller asks for.
-- Requested, never inferred from the radical: the same rule |مدغم= follows everywhere
-- else, and the reason p358 does not have to be wrong for p359 to be right.
local function form_viii_join_ta(rad, reduced)
if rad == W or rad == Y or rad == "ت" then return "تّ"
elseif rad == HAMZA and reduced then return "تّ"
elseif rad == "د" then return "دّ"
elseif rad == "ث" then return "ثّ"
elseif rad == "ذ" then return "ذّ"
elseif rad == "ز" then return "زْد"
elseif rad == "ص" then return "صْط"
elseif rad == "ض" then return "ضْط"
elseif rad == "ط" then return "طّ"
elseif rad == "ظ" then return "ظّ"
else return rad .. SK .. "ت"
end
end
local function detect_indicator_spec(base)
base.forms = {}
base.stem_overrides = {}
base.slot_overrides = {}
if not base.conj_vowels[1] then
-- These may be converted to inferred vowels. If not, we throw an error if form I and not passive-only.
base.conj_vowels = {{
past = "-",
nonpast = "-",
}}
else
-- If multiple vowels specified for a given vowel type (e.g. a,u~u), expand so that each spec in
local expansion = {}
for _, spec in ipairs(base.conj_vowels) do
for _, past in ipairs(spec.past) do
for _, nonpast in ipairs(spec.nonpast) do
table.insert(expansion, {past = past, nonpast = nonpast})
end
end
end
base.conj_vowels = expansion
end
local vform = base.verb_form
-- check for quadriliteral form (Iq, IIq, IIIq, IVq)
base.quadlit = not not vform:find("q$")
-- Infer radicals as necessary. We infer a separate set of radicals for each past~non-past vowel combination because
-- they may be different (particularly with form-I hollow verbs).
for _, vowel_spec in ipairs(base.conj_vowels) do
-- NOTE: rad1, rad2, etc. refer to user-specified radicals, which are formobj tables that optionally specify an
-- explicit manual translit, whereas ir1, ir2, etc. refer to inferred radicals, which are either strings or
-- lists of possible radicals.
local rads = base.root_consonants
local rad1, rad2, rad3, rad4 = rads[1], rads[2], rads[3], rads[4]
-- Default any unspecified radicals to radicals determined from the headword. The returned radicals may be
-- lists of possible radicals, where the first radical should be chosen if the user didn't explicitly specify a
-- radical but all are allowed. If `ambig = true` is set in the table, the radical is considered ambiguous and
-- categories won't be created for weak radicals.
local weakness, ir1, ir2, ir3, ir4
if vform ~= "none" then
ir1, ir2, ir3 = rmatch(base.lemma, "^([^_])_([^_])_([^_])$")
if not ir1 then
ir1, ir2, ir3, ir4 = rmatch(base.lemma, "^([^_])_([^_])_([^_])_([^_])$")
end
if ir1 then
-- root given instead of lemma
weakness = weakness_from_radicals(vform, ir1, ir2, ir3, ir4, vowel_spec.past, vowel_spec.nonpast)
if vform == "VIII" then
vowel_spec.form_viii_assim = form_viii_join_ta(ir1, base.reduced)
end
else
local ret = export.infer_radicals {
headword = base.lemma,
vform = vform,
passive = base.passive,
past_vowel = vowel_spec.past,
nonpast_vowel = vowel_spec.nonpast,
is_reduced = base.reduced,
}
weakness, ir1, ir2, ir3, ir4 = ret.weakness, ret.rad1, ret.rad2, ret.rad3, ret.rad4
vowel_spec.form_viii_assim = ret.form_viii_assim
vowel_spec.past = ret.past_vowel
vowel_spec.nonpast = ret.nonpast_vowel
vowel_spec.variant = base.variant or ret.variant
end
end
-- For most ambiguous radicals, the choice of radical doesn't matter because it doesn't affect the conjugation
-- one way or another. For form I hollow verbs, however, it definitely does. In fact, the choice of radical is
-- critical even beyond the past and non-past vowels because it affects the form of the passive participle. So,
-- check for this and signal an error if the radical could not be inferred and is not given explicitly.
if vform == "I" and type(ir2) == "table" and ir2.need_radical and not rad2 then
error("Unable to guess middle radical of hollow form I verb; need to specify radical explicitly")
end
if vform == "I" and not is_passive_only(base.passive) and (
rget(vowel_spec.past) == "-" or rget(vowel_spec.nonpast) == "-") then
error("Form I verb that isn't passive-only or final-weak must have past~non-past vowels specified")
end
-- Convert ambiguous radicals.
local function regularize_inferred_radical(rad)
if type(rad) == "table" then
if rad.ambig then
return {form = rad[1], ambig = true}
else
return rad[1]
end
else
return rad
end
end
-- Return the appropriate radical at index `index` (1 through 4), based either on the user-specified radical
-- `user_radical` or (if unspecified) `inferred_radical`, inferred from the unvocalized lemma. Two values are
-- returned, the "regularized" version of the radical (where ambiguous inferred radicals are converted to their
-- most likely actual radical) and the non-regularized version. The returned values are form objects rather than
-- strings.
local function fetch_radical(user_radical, inferred_radical, index)
if not user_radical then
return regularize_inferred_radical(inferred_radical), inferred_radical
else
local rad_formval = rget(user_radical)
if type(inferred_radical) == "table" then
local allowed_radical_set = m_table.listToSet(inferred_radical)
if not allowed_radical_set[rad_formval] then
error(("For lemma %s, radical %s ambiguously inferred as %s but user radical incompatibly given as %s"):
format(base.lemma, index,
list_to_text(inferred_radical, nil, " or "), rad_formval))
end
elseif rad_formval ~= inferred_radical then
error(("For lemma %s, radical %s inferred as %s but user radical incompatibly given as %s"):
format(base.lemma, index, inferred_radical, rad_formval))
end
return user_radical, user_radical
end
end
if vform ~= "none" then
vowel_spec.rad1, vowel_spec.unreg_rad1 = fetch_radical(rad1, ir1, 1)
vowel_spec.rad2, vowel_spec.unreg_rad2 = fetch_radical(rad2, ir2, 2)
vowel_spec.rad3, vowel_spec.unreg_rad3 = fetch_radical(rad3, ir3, 3)
if base.quadlit then
vowel_spec.rad4, vowel_spec.unreg_rad4 = fetch_radical(rad4, ir4, 4)
end
end
if vform == "I" then
-- If explicit weakness given using 'I-sound' or 'I-assimilated', we may need to adjust the inferred weakness.
if base.explicit_weakness == "sound" then
if weakness == "assimilated" then
weakness = "sound"
elseif weakness == "assimilated+final-weak" then
-- Verbs like waniya~yawnā "to be faint; to languish" (although the defaults should handle this
-- correctly)
weakness = "final-weak"
else
error(("Can't specify form 'I-sound' when inferred weakness is '%s' for lemma %s"):format(
weakness, base.lemma))
end
elseif base.explicit_weakness == "assimilated" then
if weakness == "sound" then
-- i~a verbs like waṭiʔa~yaṭaʔu "to tread, to trample"; wasiʕa~yasaʕu "to be spacious; to be well-off";
-- waṯiʔa~yaṯaʔu "to get bruised, to be sprained", which would default to sound.
weakness = "assimilated"
elseif weakness == "final-weak" then
-- For completeness; not clear if any verbs occur where this is needed. (There are plenty of
-- assimilated+final-weak verbs but the defaults should take care of them.)
weakness = "assimilated+final-weak"
else
error(("Can't specify form 'I-assimilated' when inferred weakness is '%s' for lemma %s"):format(
weakness, base.lemma))
end
elseif base.explicit_weakness then
error(("Internal error: Unrecognized value '%s' for base.explicit_weakness"):format(base.explicit_weakness))
end
elseif vform == "none" then
weakness = base.explicit_weakness
elseif base.explicit_weakness then
error(("Internal error: Explicit weakness should not be specifiable except with forms I and none, but saw explicit weakness '%s' with verb form '%s'"):
format(base.explicit_weakness, vform))
end
vowel_spec.weakness = weakness
if vform ~= "none" then
-- Error if radicals are wrong given the weakness. More likely to happen if the weakness is explicitly given
-- rather than inferred. Will also happen if certain incorrect letters are included as radicals e.g. hamza on
-- top of various letters, alif maqṣūra, tā' marbūṭa.
check_radicals(vform, weakness, rget(vowel_spec.rad1), rget(vowel_spec.rad2), rget(vowel_spec.rad3),
base.quadlit and rget(vowel_spec.rad4) or nil)
end
-- Check the variant value.
local form_iii_vi_geminate = (vform == "III" or vform == "VI") and rget(vowel_spec.rad2) == rget(vowel_spec.rad3) and
not req(vowel_spec.rad2, Y)
local hayy_i_x = hayy_radicals(vowel_spec.rad1, vowel_spec.rad2, vowel_spec.rad3) and (vform == "I" or vform == "X")
if form_iii_vi_geminate or hayy_i_x then
if vowel_spec.variant and vowel_spec.variant ~= "long" and vowel_spec.variant ~= "short" and vowel_spec.variant ~= "both" then
error(("For form-III/VI geminate verb or form-I/X verb with ح-ي-ي radicals, saw unrecognized 'var:%s' value; should be 'var:long', 'var:short' or 'var:both'"):format(
vowel_spec.variant))
end
elseif vowel_spec.variant then
error(("Variant value 'var:%s' not allowed in this context"):format(vowel_spec.variant))
end
end
-- If form I, regroup expanded vowels for display purposes.
if vform == "I" then
local group_by_past = {}
for _, vowel_spec in ipairs(base.conj_vowels) do
m_table.insertIfNot(group_by_past, {
past = undia[rget(vowel_spec.past)],
nonpasts = {undia[rget(vowel_spec.nonpast)]},
}, {
key = function(obj) return obj.past end,
combine = function(obj1, obj2)
for _, nonpast in ipairs(obj2.nonpasts) do
m_table.insertIfNot(obj1.nonpasts, nonpast)
end
end,
})
end
local group_by_nonpast = {}
for _, vowel_spec in ipairs(group_by_past) do
m_table.insertIfNot(group_by_nonpast, {
pasts = {vowel_spec.past},
nonpasts = vowel_spec.nonpasts,
}, {
key = function(obj) return obj.nonpasts end,
combine = function(obj1, obj2)
for _, past in ipairs(obj2.pasts) do
m_table.insertIfNot(obj1.pasts, past)
end
end,
})
end
base.grouped_conj_vowels = group_by_nonpast
end
-- Set value of passive. If not specified, default is yes for forms II, III, IV and Iq; no but uncertainly for
-- forms VII, IX, XI - XV and IIIq - IVq, as well as form I with past vowel u; impersonal but uncertainly for form
-- V, VI, X and IIq, as well as form I with past vowel i; and yes but uncertainly for the remainder (form I with
-- past vowel only a and form VIII).
if not base.passive then
base.passive_defaulted = true
-- Temporary tracking for defaulted passives by verb form, weakness and (for form I) past/non-past vowels.
track_if_ar_conj(base, "passive-defaulted/" .. vform)
for _, vowel_spec in ipairs(base.conj_vowels) do
track_if_ar_conj(base, "passive-defaulted/" .. vform.. "/" .. vowel_spec.weakness)
if vform == "I" then
--W: use rget(); the vowel is a form object when the user attached a footnote
-- (e.g. <I/a[نادر]~u>), and undia[<table>] is nil, which crashes format() on Lua 5.1.
local past_nonpast = ("%s~%s"):format(undia[rget(vowel_spec.past)], undia[rget(vowel_spec.nonpast)])
track_if_ar_conj(base, "passive-defaulted/I/" .. past_nonpast)
track_if_ar_conj(base, "passive-defaulted/I/" .. vowel_spec.weakness .. "/" .. past_nonpast)
end
end
if vform_probably_full_passive(vform) then
base.passive = "pass"
else
base.passive_uncertain = true
for _, vowel_spec in ipairs(base.conj_vowels) do
if vform_probably_no_passive(vform, vowel_spec.weakness, vowel_spec.past, vowel_spec.nonpast) then
base.passive = "nopass"
break
elseif vform_probably_impersonal_passive(vform, vowel_spec.weakness, vowel_spec.past,
vowel_spec.nonpast) then
base.passive = "ipass"
break
end
end
base.passive = base.passive or "pass"
end
end
-- NOTE: Currently there are no built-in stems or form overrides for Arabic; this code is inherited from
-- [[Module:ca-verb]], where such things do exist, and is kept for generality in case we decide in the future to
-- implement such things.
-- Override built-in verb stems and overrides with user-specified ones.
for stem, values in pairs(base.user_stem_overrides) do
base.stem_overrides[stem] = values
end
for slot, values in pairs(base.user_slot_overrides) do
if not base.alternant_multiword_spec.verb_slots_map[slot] then
error("Unrecognized override slot '" .. slot .. "': " .. base.angle_bracket_spec)
end
if export.unsettable_slots_set[slot] then
error("Slot '" .. slot .. "' cannot be set using an override: " .. base.angle_bracket_spec)
end
if skip_slot(base, slot, "allow overrides") then
error("Override slot '" .. slot ..
"' would be skipped based on the passive, 'noimp' and/or 'no_nonpast' settings: " ..
base.angle_bracket_spec)
end
base.slot_overrides[slot] = values
end
if base.verb_form == "none-final-weak" then
for _, stem_type in ipairs { "past", "past_pass", "nonpast", "nonpast_pass" } do
if base.stem_overrides[stem_type .. "_c"] or base.stem_overrides[stem_type .. "_v"] then
error(("Specify past stem for verb type 'none-final-weak' using '%s:...' not '%s_c:...' or '%s_v:...'"):
format(stem_type, stem_type, stem_type))
end
end
for _, stem_type in ipairs { "past", "nonpast" } do
if base.stem_overrides[stem_type] or not base.stem_overrides[stem_type .. "_final_weak_vowel"] then
error(("For verb type 'none-final-weak', if '%s:...' specified, so must '%s_final_weak_vowel:...'"):
format(stem_type, stem_type))
end
end
end
end
local function detect_all_indicator_specs(alternant_multiword_spec)
add_slots(alternant_multiword_spec)
alternant_multiword_spec.verb_forms = {}
-- This means at least one individual base had the slot marked as explicitly missing. Another base (e.g. when
-- there are multiple alternants) might have a value for the slot. In practice, we only respect this when there are
-- no overall values in the slot and `slot_uncertain` isn't set; in this case, we display "no ..." for the slot
-- instead of simply not displaying anything for the slot.
alternant_multiword_spec.slot_explicitly_missing = {}
-- This means at least one individual base had no values for the slot and the slot marked as explicitly uncertain.
-- Note that this is different from a value being present but marked as uncertain (e.g. if an override was given
-- with a ? after it); this causes the form object for the value to have `uncertain = true` set. If there are no
-- overall values in the slot and `slot_uncertain` is set, we display this in the headword.
alternant_multiword_spec.slot_uncertain = {}
iut.map_word_specs(alternant_multiword_spec, function(base)
-- So arguments, etc. can be accessed. WARNING: Creates circular reference.
base.alternant_multiword_spec = alternant_multiword_spec
detect_indicator_spec(base)
if not base.nocat then
m_table.insertIfNot(alternant_multiword_spec.verb_forms, base.verb_form)
end
if base.passive then
alternant_multiword_spec.passive = base.passive
end
if base.passive_uncertain then
alternant_multiword_spec.passive_uncertain = true
end
for slot, _ in pairs(base.slot_explicitly_missing) do
alternant_multiword_spec.slot_explicitly_missing[slot] = true
end
end)
end
local function determine_slot_uncertainty_from_forms(alternant_multiword_spec)
iut.map_word_specs(alternant_multiword_spec, function(base)
-- If no verbal noun and verb form is not 'none' (manually-specified stems) — which currently only happens for
-- form I — and the verbal noun wasn't explicitly indicated as missing using <vn:->, we assume it's just
-- unknown/unspecified rather than missing. Same with active participles.
for uncertain_slot, _ in pairs(slots_that_may_be_uncertain) do
if not base.forms[uncertain_slot] and vform ~= "none" and not skip_slot(base, uncertain_slot) then
base.slot_uncertain[uncertain_slot] = true
end
end
-- Propagate slot uncertainty up. Currently only the verbal noun can have this set but we write the code
-- generally.
for slot, _ in pairs(base.slot_uncertain) do
alternant_multiword_spec.slot_uncertain[slot] = true
end
end)
-- If slot is uncertain and has no value, explicitly set its value to "?".
for uncertain_slot, _ in pairs(slots_that_may_be_uncertain) do
if not alternant_multiword_spec.forms[uncertain_slot] and
alternant_multiword_spec.slot_uncertain[uncertain_slot] then
alternant_multiword_spec.forms[uncertain_slot] = {{form = "?"}}
end
end
end
-- Determine certain properties of the verb from the overall forms, such as whether the verb is active-only or
-- passive-only, is impersonal, lacks an imperative, etc.
local function determine_verb_properties_from_forms(alternant_multiword_spec)
alternant_multiword_spec.has_active = false
alternant_multiword_spec.has_passive = false
alternant_multiword_spec.has_non_impers_active = false
alternant_multiword_spec.has_non_impers_passive = false
alternant_multiword_spec.has_imp = false
alternant_multiword_spec.has_past = false
alternant_multiword_spec.has_nonpast = false
for slot, _ in pairs(alternant_multiword_spec.forms) do
if slot == "ap" or slot:find("[123]") and not slot:find("_pass") then
alternant_multiword_spec.has_active = true
end
if slot == "pp" or slot:find("[123]") and slot:find("_pass") then
alternant_multiword_spec.has_passive = true
end
if slot:find("[123]") and not slot:find("pass_[123]") and not slot:find("3ms") then
alternant_multiword_spec.has_non_impers_active = true
end
if slot:find("pass_[123]") and not slot:find("3ms") then
alternant_multiword_spec.has_non_impers_passive = true
end
if slot:find("^imp_") then
alternant_multiword_spec.has_imp = true
end
if slot:find("^past_") then
alternant_multiword_spec.has_past = true
end
if slot:find("^ind_") or slot:find("^sub_") or slot:find("^juss_") then
alternant_multiword_spec.has_nonpast = true
end
end
end
--W: The categories this used to build alongside the annotation are gone: show()
-- has not emitted them since the format_categories() return was commented out,
-- so every insert_cat() call was building a table nothing read. What is left is
-- the title-bar annotation, which is the half that reaches a reader.
local function add_annotation(alternant_multiword_spec, base, insert_ann)
-- Useful e.g. in constructing suppletive verbs out of parts. For a verb like جاء or أتى whose imperative comes
-- from the unrelated verb تعالى, we don't want the latter verb showing up in annotations.
if base.nocat then
return
end
local vform = base.verb_form
if vform ~= "none" then
insert_ann("form", vform)
--W: Add morphological pattern corresponding to the form
local morph_pattern = FORM_TO_MORPHOLOGICAL_PATTERN[vform]
if morph_pattern then
insert_ann("morph_pattern", morph_pattern)
end
end
if base.reduced then
insert_ann("reduced", "reduced")
end
for _, vowel_spec in ipairs(base.conj_vowels) do
local rad1, rad2, rad3, rad4 = get_radicals_4(vowel_spec)
local final_weak = is_final_weak(base, vowel_spec)
local weakness = vowel_spec.weakness
-- We have to distinguish weakness by form and weakness by conjugation. Weakness by form merely indicates the
-- presence of weak letters in certain positions in the radicals. Weakness by conjugation is related to how the
-- verbs are conjugated. For example, form-II verbs that are "hollow by form" (middle radical is wāw or yāʾ) are
-- conjugated as sound verbs. Another example: form-I verbs with initial wāw are "assimilated by form" and most
-- are assimilated by conjugation as well, but a few are sound by conjugation, e.g. wajuha yawjuhu "to be
-- distinguished" (rather than wajuha yajuhu); similarly for some hollow-by-form verbs in various forms, e.g.
-- form VIII izdawaja yazdawiju "to be in pairs" (rather than izdāja yazdāju). The annotation reports weakness
-- by conjugation; weakness by form was only ever distinguished by the radical categories, which are gone.
insert_ann("weakness", weakness)
end
if vform == "I" and not is_passive_only(base.passive) then
for _, vowel_spec in ipairs(base.grouped_conj_vowels) do
insert_ann("vowels",
("%s ~ %s"):format(table.concat(vowel_spec.pasts, "/"), table.concat(vowel_spec.nonpasts, "/")))
for _, past in ipairs(vowel_spec.pasts) do
for _, nonpast in ipairs(vowel_spec.nonpasts) do
if past == "-" or nonpast == "-" then
error("Internal error: Saw form I past vowel %s and non-past vowel %s but - in place of vowel should have triggered an error earlier")
end
--W: Add morphological pattern for form I based on vowels
local form_i_with_vowels = ("I/%s~%s"):format(past, nonpast)
local morph_pattern = FORM_TO_MORPHOLOGICAL_PATTERN[form_i_with_vowels]
if morph_pattern then
insert_ann("morph_pattern", morph_pattern)
end
end
end
end
end
if base.irregular then
insert_ann("irreg", "irregular")
end
end
--W: Compute the annotation displayed in the conjugation title bar. This used to
-- compute the verb's categories alongside it -- the two carry similar
-- information -- but show() stopped emitting them, so the category half was
-- building a table with no reader and has been removed.
local function compute_annotation(alternant_multiword_spec)
local ann = {}
alternant_multiword_spec.annotation = ann
ann.form = {}
ann.morph_pattern = {} --W: arabic morphological pattern corresponding to the form
ann.weakness = {}
ann.vowels = {}
ann.passive = nil
ann.reduced = {}
ann.irreg = {}
ann.defective = {}
local function insert_ann(anntype, value)
m_table.insertIfNot(alternant_multiword_spec.annotation[anntype], value)
end
iut.map_word_specs(alternant_multiword_spec, function(base)
add_annotation(alternant_multiword_spec, base, insert_ann)
end)
if alternant_multiword_spec.has_active then
if alternant_multiword_spec.has_passive and alternant_multiword_spec.has_non_impers_passive then
ann.passive = "full passive"
elseif alternant_multiword_spec.has_passive then
ann.passive = "impersonal passive"
else
ann.passive = "no passive"
end
else
if alternant_multiword_spec.has_non_impers_passive then
ann.passive = "passive-only"
else
ann.passive = "impersonal (passive-only)"
end
end
if alternant_multiword_spec.passive_uncertain then
ann.passive = ann.passive .. ' <abbr title="passive status uncertain">(?)</abbr>'
end
if alternant_multiword_spec.has_active and not alternant_multiword_spec.has_imp then
insert_ann("defective", "no imperative")
end
if not alternant_multiword_spec.has_past then
insert_ann("defective", "no past")
end
if not alternant_multiword_spec.has_nonpast then
insert_ann("defective", "no non-past")
end
local ann_parts = {}
local function insert_ann_part(part, conj)
local val = table.concat(ann[part], conj or " or ")
if val ~= "" and val ~= "regular" then
table.insert(ann_parts, val)
end
end
insert_ann_part("form")
insert_ann_part("weakness")
insert_ann_part("reduced")
insert_ann_part("vowels")
if ann.passive then
table.insert(ann_parts, ann.passive)
end
insert_ann_part("irreg")
insert_ann_part("defective", "، ")
--W: Save morph_pattern before overwriting annotation with string
alternant_multiword_spec.morph_pattern = ann.morph_pattern
alternant_multiword_spec.annotation = table.concat(ann_parts, "، ")
end
local function show_forms(alternant_multiword_spec)
local lemmas = {}
for _, slot in ipairs(export.potential_lemma_slots) do
if alternant_multiword_spec.forms[slot] then
for _, formobj in ipairs(alternant_multiword_spec.forms[slot]) do
table.insert(lemmas, formobj)
end
break
end
end
alternant_multiword_spec.lemmas = lemmas -- save for later use in make_table()
alternant_multiword_spec.vn = alternant_multiword_spec.forms.vn -- save for later use in make_table()
-- Reconstruct the original verb spec without overrides for verbal nouns and participles, since those specific slots
-- are ignored by {{ar-verb form}}. Compute this once beforehand; `transform_accel_obj` is called repeatedly on each
-- form and we don't want to compute this repeatedly.
local reconstructed_verb_spec = iut.reconstruct_original_spec(alternant_multiword_spec, {
preprocess_angle_bracket_spec = function(spec)
spec = spec:match("^<(.*)>$")
assert(spec)
local segments = put.parse_multi_delimiter_balanced_segment_run(spec, {{"[", "]"}, {"<", ">"}})
local dot_separated_groups = put.split_alternating_runs_and_strip_spaces(segments, "%.")
-- Rejoin each dot-separated group into a single string, since we aren't actually going to do any parsing
-- of bracket-bounded textual runs; then filter out overrides for verbal nouns and participles.
local filtered_indicators = {}
for _, dot_separated_group in ipairs(dot_separated_groups) do
local indicator = table.concat(dot_separated_group)
-- FIXME: Do we want to filter out any other indicators?
if not (indicator:find("^vn:") or indicator:find("^[ap]p:")) then
table.insert(filtered_indicators, indicator)
end
end
return ("<%s>"):format(table.concat(filtered_indicators, "."))
end,
})
-- If we're dealing with a single word, no alternants and a single verb form, use the auto-conjugation-fetching
-- variant.
local reconstructed_lemma, inside = reconstructed_verb_spec:match("^([^ <>()]+)(%b<>)$")
if inside and alternant_multiword_spec.verb_forms[1] and not alternant_multiword_spec.verb_forms[2] then
reconstructed_verb_spec = ("+%s<%s>"):format(reconstructed_lemma, alternant_multiword_spec.verb_forms[1])
end
local function transform_accel_obj(slot, formobj, accel_obj)
if not accel_obj then
return accel_obj
end
if slot == "ap" or slot == "pp" or slot == "vn" then
-- FIXME: [[Module:accel]] can't correctly handle more than one verb form for participles and verbal nouns
accel_obj.form = slot .. "-" .. table.concat(alternant_multiword_spec.verb_forms, "،")
else
accel_obj.form = "verb-form-" .. reconstructed_verb_spec
end
return accel_obj
end
local function generate_link(data)
local form = data.form
local term = form.formval_for_link
local alt = form.alt
if term == "?" then
term = nil
alt = "?"
end
--W: Create simple link for verb forms without #Arabic anchor
local display = alt or term
local link
if display then
link = link_term_simple(display)
else
link = ""
end
link = link .. iut.get_footnote_text(form.footnotes, data.footnote_obj)
--W: qualifier/label rendering removed along with the q/qq/l/ll modifiers;
-- it required [[Module:pron qualifier]], absent on ar.wiktionary.
return link
end
local props = {
lang = lang,
lemmas = lemmas,
transform_accel_obj = transform_accel_obj,
generate_link = generate_link,
slot_list = alternant_multiword_spec.verb_slots,
include_translit = false,
}
iut.show_forms(alternant_multiword_spec.forms, props)
end
--W: Tatweel and the invisible direction/joining marks survive copy-paste and
-- MediaWiki keeps them in page titles, so strip them from both sides before
-- comparing a |بؤرة= value against a generated form.
local FOCUS_IGNORE = "[" .. u(0x0640) .. u(0x061C) .. u(0x200B) .. "-" .. u(0x200F)
.. u(0x202A) .. "-" .. u(0x202E) .. u(0xFEFF) .. "]"
local function normalize_for_focus(s)
return (rsub(s, FOCUS_IGNORE, ""))
end
--W: Which slots hold `focus`? Must run before show_forms() turns the form
-- lists into rendered wikitext.
local function find_focus_slots(alternant_multiword_spec, focus)
if not focus or focus == "" then
return nil
end
local target = normalize_for_focus(focus)
local slots = {}
for slot, forms in pairs(alternant_multiword_spec.forms) do
if type(forms) == "table" then
for _, formobj in ipairs(forms) do
if type(formobj) == "table" and formobj.form
and normalize_for_focus(formobj.form) == target then
slots[slot] = true
break
end
end
end
end
return slots
end
--W: 'yes' unless |موسع= asked for the table open. [[Template:inflection-table-top]]
-- turns any non-empty |tall= into the mw-collapsed class.
local function collapsed_arg(alternant_multiword_spec)
if alternant_multiword_spec.expanded then
return nil
end
return 'yes'
end
--W: Put the marker class on the cell itself rather than on a span around its
-- contents, so the highlight covers the whole cell instead of hugging the word.
-- Runs on the table wikitext below, before m_string_utilities.format() fills the
-- {slot} placeholders in. Every form cell in either table has one of two shapes:
--
-- | {past_1s} -> | class="avf-focus" | {past_1s}
-- | rowspan="2" | {past_1s} -> | rowspan="2" class="avf-focus" | {past_1s}
--
-- Styled by [[Template:ar-verb-form/style.css]] (.inflection-table td.avf-focus).
local function mark_focus_cells(text, focus_slots)
if not focus_slots then
return text
end
return (rsub(text, "\n(|[^\n]*)", function(cell)
local slot = rmatch(cell, "^|%s*{([%w_]+)}%s*$")
if slot then
if focus_slots[slot] then
return '\n| class="avf-focus" | {' .. slot .. "}"
end
return nil
end
local attrs
attrs, slot = rmatch(cell, "^|%s*(.-)%s*|%s*{([%w_]+)}%s*$")
if slot and focus_slots[slot] then
return "\n| " .. attrs .. ' class="avf-focus" | {' .. slot .. "}"
end
return nil
end))
end
-------------------------------------------------------------------------------
-- Functions to create inflection tables --
-------------------------------------------------------------------------------
-- Make the conjugation table. Called from export.show().
local function make_table(alternant_multiword_spec)
local text = mw.getCurrentFrame():expandTemplate{
title = 'inflection-table-top',
args = {
title = 'تصريف {title}',
--W: |tall= is what puts mw-collapsed on the wrapper. |موسع= drops it.
-- (Not `expanded and nil or 'yes'` — in Lua that is always 'yes'.)
tall = collapsed_arg(alternant_multiword_spec),
palette = 'green',
category = 'conjugation',
class = 'tr-alongside', -- temp hack to prevent extra line break
}
}
text = text .. [=[
! colspan="6" | <<الْمَصْدَر>>
| colspan="7" | {vn}
]=]
if alternant_multiword_spec.has_active then
text = text .. [=[
|-
! colspan="6" | <<اِسْم الْفَاعِل>>
| colspan="7" | {ap}
]=]
end
if alternant_multiword_spec.has_passive then
text = text .. [=[
|-
! colspan="6" | <<اِسْم الْمَفْعُول>>
| colspan="7" | {pp}
]=]
end
text = text .. [=[
|-
! colspan="999" class="separator" |
]=]
if alternant_multiword_spec.has_active then
text = text .. [=[
|-
! colspan="12" class="outer" | <<الْفِعْل الْمَعْلُوم>>
|-
! colspan="2" |
! colspan="3" | <<الْمُفْرَد>>
! rowspan="12" class="separator" |
! colspan="2" | <<الْمُثَنَّى>>
! rowspan="12" class="separator" |
! colspan="3"| <<الْجَمْع>>
|-
! colspan="2"|
! <<الْمُتَكَلِّم>>
! <<الْمُخَاطَب>>
! <<الْغَائِب>>
! <<الْمُخَاطَب>>
! <<الْغَائِب>>
! <<الْمُتَكَلِّم>>
! <<الْمُخَاطَب>>
! <<الْغَائِب>>
|-
! rowspan="2" | <<الْمَاضِي>>
! class="secondary" | المذكر
| rowspan="2" | {past_1s}
| {past_2ms}
| {past_3ms}
| rowspan="2" | {past_2d}
| {past_3md}
| rowspan="2" | {past_1p}
| {past_2mp}
| {past_3mp}
|-
! class="secondary" | المؤنث
| {past_2fs}
| {past_3fs}
| {past_3fd}
| {past_2fp}
| {past_3fp}
|-
! rowspan="2" | <<الْمُضَارِع الْمَرْفُوع>>
! class="secondary" | المذكر
| rowspan="2" | {ind_1s}
| {ind_2ms}
| {ind_3ms}
| rowspan="2" | {ind_2d}
| {ind_3md}
| rowspan="2" | {ind_1p}
| {ind_2mp}
| {ind_3mp}
|-
! class="secondary" | المؤنث
| {ind_2fs}
| {ind_3fs}
| {ind_3fd}
| {ind_2fp}
| {ind_3fp}
|-
! rowspan="2" | <<الْمُضَارِع الْمَنْصُوب>>
! class="secondary" | المذكر
| rowspan="2" | {sub_1s}
| {sub_2ms}
| {sub_3ms}
| rowspan="2" | {sub_2d}
| {sub_3md}
| rowspan="2" | {sub_1p}
| {sub_2mp}
| {sub_3mp}
|-
! class="secondary" | المؤنث
| {sub_2fs}
| {sub_3fs}
| {sub_3fd}
| {sub_2fp}
| {sub_3fp}
|-
! rowspan="2" | <<الْمُضَارِع الْمَجْزُوم>>
! class="secondary" | المذكر
| rowspan="2" | {juss_1s}
| {juss_2ms}
| {juss_3ms}
| rowspan="2" | {juss_2d}
| {juss_3md}
| rowspan="2" | {juss_1p}
| {juss_2mp}
| {juss_3mp}
|-
! class="secondary" | المؤنث
| {juss_2fs}
| {juss_3fs}
| {juss_3fd}
| {juss_2fp}
| {juss_3fp}
|-
! rowspan="2" | <<الْأَمْر>>
! class="secondary" | المذكر
| rowspan="2" |
| {imp_2ms}
| rowspan="2" |
| rowspan="2" | {imp_2d}
| rowspan="2" |
| rowspan="2" |
| {imp_2mp}
| rowspan="2" |
|-
! class="secondary" | المؤنث
| {imp_2fs}
| {imp_2fp}
]=]
end
if alternant_multiword_spec.has_passive then
text = text .. [=[
|-
! colspan="999" class="separator" |
|-
! colspan="12" class="outer" | <<الْفِعْل الْمَجْهُول>>
|-
! colspan="2" |
! colspan="3" | <<الْمُفْرَد>>
! rowspan="10" class="separator" |
! colspan="2" | <<الْمُثَنَّى>>
! rowspan="10" class="separator" |
! colspan="3" | <<الْجَمْع>>
|-
! colspan="2" |
! <<الْمُتَكَلِّم>>
! <<الْمُخَاطَب>>
! <<الْغَائِب>>
! <<الْمُخَاطَب>>
! <<الْغَائِب>>
! <<الْمُتَكَلِّم>>
! <<الْمُخَاطَب>>
! <<الْغَائِب>>
|-
! rowspan="2" | <<الْمَاضِي>>
! class="secondary" | المذكر
| rowspan="2" | {past_pass_1s}
| {past_pass_2ms}
| {past_pass_3ms}
| rowspan="2" | {past_pass_2d}
| {past_pass_3md}
| rowspan="2" | {past_pass_1p}
| {past_pass_2mp}
| {past_pass_3mp}
|-
! class="secondary" | المؤنث
| {past_pass_2fs}
| {past_pass_3fs}
| {past_pass_3fd}
| {past_pass_2fp}
| {past_pass_3fp}
|-
! rowspan="2" | <<الْمُضَارِع الْمَرْفُوع>>
! class="secondary" | المذكر
| rowspan="2" | {ind_pass_1s}
| {ind_pass_2ms}
| {ind_pass_3ms}
| rowspan="2" | {ind_pass_2d}
| {ind_pass_3md}
| rowspan="2" | {ind_pass_1p}
| {ind_pass_2mp}
| {ind_pass_3mp}
|-
! class="secondary" | المؤنث
| {ind_pass_2fs}
| {ind_pass_3fs}
| {ind_pass_3fd}
| {ind_pass_2fp}
| {ind_pass_3fp}
|-
! rowspan="2" | <<الْمُضَارِع الْمَنْصُوب>>
! class="secondary" | المذكر
| rowspan="2" | {sub_pass_1s}
| {sub_pass_2ms}
| {sub_pass_3ms}
| rowspan="2" | {sub_pass_2d}
| {sub_pass_3md}
| rowspan="2" | {sub_pass_1p}
| {sub_pass_2mp}
| {sub_pass_3mp}
|-
! class="secondary" | المؤنث
| {sub_pass_2fs}
| {sub_pass_3fs}
| {sub_pass_3fd}
| {sub_pass_2fp}
| {sub_pass_3fp}
|-
! rowspan="2" | <<الْمُضَارِع الْمَجْزُوم>>
! class="secondary" | المذكر
| rowspan="2" | {juss_pass_1s}
| {juss_pass_2ms}
| {juss_pass_3ms}
| rowspan="2" | {juss_pass_2d}
| {juss_pass_3md}
| rowspan="2" | {juss_pass_1p}
| {juss_pass_2mp}
| {juss_pass_3mp}
|-
! class="secondary" | المؤنث
| {juss_pass_2fs}
| {juss_pass_3fs}
| {juss_pass_3fd}
| {juss_pass_2fp}
| {juss_pass_3fp}
]=]
end
text = text .. mw.getCurrentFrame():expandTemplate{
title = 'inflection-table-bottom',
args = {
notes = '{footnote}',
}
}
local forms = alternant_multiword_spec.forms
if not alternant_multiword_spec.lemmas then
forms.title = "—"
else
local linked_lemmas = {}
for _, form in ipairs(alternant_multiword_spec.lemmas) do
--W: Create simple link for lemmas without #Arabic anchor
-- table.insert(linked_lemmas, link_term(form.form, "term"))
table.insert(linked_lemmas, link_term_simple(form.form))
end
forms.title = table.concat(linked_lemmas, "، ")
end
local ann_parts = {}
if alternant_multiword_spec.annotation ~= "" then
table.insert(ann_parts, alternant_multiword_spec.annotation)
end
if alternant_multiword_spec.vn then
local linked_vns = {}
for _, form in ipairs(alternant_multiword_spec.vn) do
table.insert(linked_vns, link_term(form.form, "term"))
end
table.insert(ann_parts, (#linked_vns > 1 and "verbal nouns" or "verbal noun") .. " " ..
table.concat(linked_vns, "، "))
end
local annotation = table.concat(ann_parts, "، ")
--W: use only arabic morphological pattern in title annotation
local morph_patterns = alternant_multiword_spec.morph_pattern
if morph_patterns and #morph_patterns > 0 then
annotation = table.concat(morph_patterns, "، ")
forms.title = forms.title .. " (" .. annotation .. ")"
end
-- Format the table.
text = mark_focus_cells(text, alternant_multiword_spec.focus_slots)
local tagged_table = rsub(text, "<<(.-)>>", tag_text)
return m_string_utilities.format(tagged_table, forms)
end
-- Helper function to get root letters and verb classification for simplified table header
-- Returns: root_display (e.g., "ح س ب"), verb_type (e.g., "فعل ثلاثي صحيح سالم")
local function get_verb_info(alternant_multiword_spec)
local root_display = ""
local verb_type = "فعل"
local rad1, rad2, rad3, rad4
-- Extract radicals from the base word spec using iut.map_word_specs
-- This accesses the radicals directly from the parsed verb specification
iut.map_word_specs(alternant_multiword_spec, function(base)
-- Get radicals from the first conjugation vowel spec
if base.conj_vowels and #base.conj_vowels > 0 then
local vowel_spec = base.conj_vowels[1]
-- Extract radicals, handling both table and string types
local function extract_radical(rad)
if type(rad) == "table" then
-- If it's a table, get the first element or the string representation
return rad[1] or rget(rad)
else
return rad
end
end
rad1 = extract_radical(vowel_spec.rad1)
rad2 = extract_radical(vowel_spec.rad2)
rad3 = extract_radical(vowel_spec.rad3)
rad4 = vowel_spec.rad4 and extract_radical(vowel_spec.rad4)
end
end)
-- Get basic/derived classification from morphological pattern
local basic_deriv
if alternant_multiword_spec.morph_pattern and #alternant_multiword_spec.morph_pattern > 0 then
local morph_pattern = alternant_multiword_spec.morph_pattern[1]
basic_deriv = MORPHOLOGICAL_PATTERN_TO_BASIC_DERIV[morph_pattern]
end
-- Format root display with spaces between letters
if rad1 and rad2 and rad3 then
if rad4 then
-- Quadrilateral
root_display = rad1 .. " " .. rad2 .. " " .. rad3 .. " " .. rad4
verb_type = "فعل رباعي"
if basic_deriv then
verb_type = verb_type .. " " .. basic_deriv
end
else
-- triliteral
root_display = rad1 .. " " .. rad2 .. " " .. rad3
verb_type = "فعل ثلاثي"
if basic_deriv then
verb_type = verb_type .. " " .. basic_deriv
if basic_deriv == "مُجرَّد" then
--W: the classification concerns only triliteral basic verbs (الثلاثي المُجرَّد)
local classification = export.classify_triliteral_verb(rad1, rad2, rad3)
verb_type = verb_type .. " " .. classification
end
end
end
end
return root_display, verb_type
end
-- Make simplified conjugation table for ar.wiktionary. Called from export.show().
-- This table shows only past, present indicative, and imperative forms.
-- No passive voice, no participles, no verbal nouns.
local function make_table_ar(alternant_multiword_spec)
local text = mw.getCurrentFrame():expandTemplate{
title = 'inflection-table-top',
args = {
title = 'تصريف {title}',
--W: |tall= is what puts mw-collapsed on the wrapper. |موسع= drops it.
-- (Not `expanded and nil or 'yes'` — in Lua that is always 'yes'.)
tall = collapsed_arg(alternant_multiword_spec),
palette = 'green',
category = 'conjugation',
class = 'tr-alongside', -- temp hack to prevent extra line break
}
}
-- Get verb root and classification
local root_display, verb_type = get_verb_info(alternant_multiword_spec)
-- First row: Root and verb type spanning all columns
text = text .. "! colspan=\"2\" | <<الجذر>>: " .. root_display .. "\n"
text = text .. "| colspan=\"3\" | <<'''" .. verb_type .. "'''>>\n"
text = text .. [=[
|-
! colspan="2" | <<الضمائر>>
! <<الماضي>>
! <<المضارع>>
! <<الأمر>>
|-
! rowspan="2" | <<المتكلّم>>
| <<أنا>>
| {past_1s}
| {ind_1s}
|
|-
| <<نحن>>
| {past_1p}
| {ind_1p}
|
|-
! rowspan="5" | <<المخاطب>>
| <<أنتَ>>
| {past_2ms}
| {ind_2ms}
| {imp_2ms}
|-
| <<أنتِ>>
| {past_2fs}
| {ind_2fs}
| {imp_2fs}
|-
| <<أنتما>>
| {past_2d}
| {ind_2d}
| {imp_2d}
|-
| <<أنتم>>
| {past_2mp}
| {ind_2mp}
| {imp_2mp}
|-
| <<أنتنّ>>
| {past_2fp}
| {ind_2fp}
| {imp_2fp}
|-
! rowspan="6" | <<الغائب>>
| <<هو>>
| {past_3ms}
| {ind_3ms}
|
|-
| <<هي>>
| {past_3fs}
| {ind_3fs}
|
|-
| <<هما>>
| {past_3md}
| {ind_3md}
|
|-
| <<هما>>
| {past_3fd}
| {ind_3fd}
|
|-
| <<هم>>
| {past_3mp}
| {ind_3mp}
|
|-
| <<هنّ>>
| {past_3fp}
| {ind_3fp}
|
]=]
text = text .. mw.getCurrentFrame():expandTemplate{
title = 'inflection-table-bottom',
args = {
notes = '{footnote}',
}
}
local forms = alternant_multiword_spec.forms
if not alternant_multiword_spec.lemmas then
forms.title = "—"
else
local linked_lemmas = {}
for _, form in ipairs(alternant_multiword_spec.lemmas) do
--W: Create simple link for lemmas without #Arabic anchor
-- table.insert(linked_lemmas, link_term(form.form, "term"))
table.insert(linked_lemmas, link_term_simple(form.form))
end
forms.title = table.concat(linked_lemmas, "، ")
end
local ann_parts = {}
if alternant_multiword_spec.annotation ~= "" then
table.insert(ann_parts, alternant_multiword_spec.annotation)
end
local annotation = table.concat(ann_parts, "، ")
--W: use only arabic morphological pattern in title annotation
local morph_patterns = alternant_multiword_spec.morph_pattern
if morph_patterns and #morph_patterns > 0 then
annotation = table.concat(morph_patterns, "، ")
forms.title = forms.title .. " (" .. annotation .. ")"
end
-- Format the table.
text = mark_focus_cells(text, alternant_multiword_spec.focus_slots)
local tagged_table = rsub(text, "<<(.-)>>", tag_text)
return m_string_utilities.format(tagged_table, forms)
end
-------------------------------------------------------------------------------
-- Verb classification functions --
-------------------------------------------------------------------------------
--[=[
تصنيف الفعل الثلاثي المُجرَّد حسب نوعه
Classify an Arabic triliteral basic verb root based on its three letters.
@param r1 الحرف الأول (first root letter - الفاء)
@param r2 الحرف الثاني (second root letter - العين)
@param r3 الحرف الثالث (third root letter - اللام)
@return str: نوع الفعل (verb type classification in Arabic)
Examples:
classify_triliteral_verb('ك', 'ت', 'ب') --> 'صحيح سالم'
classify_triliteral_verb('أ', 'ت', 'ي') --> 'معتل ناقص يائي مهموز الفاء'
classify_triliteral_verb('ق', 'ل', 'و') --> 'معتل ناقص واوي'
]=]
function export.classify_triliteral_verb(r1, r2, r3)
-- تعريف أحرف العلة والهمزة
-- الحروف الضعيفة (أحرف العلة): واو وياء فقط
local weak_letters = {[W] = true, [Y] = true}
-- الهمزة: جميع أشكال الهمزة (ء، أ، إ، ؤ، ئ)
local hamza_letters = {
[HAMZA] = true, -- ء
[HAMZA_ON_ALIF] = true, -- أ
[HAMZA_UNDER_ALIF] = true, -- إ
[HAMZA_ON_W] = true, -- ؤ
[HAMZA_ON_Y] = true -- ئ
}
-- فحص كل حرف
local is_hamza = {hamza_letters[r1] or false, hamza_letters[r2] or false, hamza_letters[r3] or false}
local is_weak = {weak_letters[r1] or false, weak_letters[r2] or false, weak_letters[r3] or false}
-- عدد أحرف العلة
local weak_count = (is_weak[1] and 1 or 0) + (is_weak[2] and 1 or 0) + (is_weak[3] and 1 or 0)
-- فحص التضعيف (الحرف الثاني = الثالث)
local is_doubled = (r2 == r3)
-- ═══════════════════════════════════════════════════════════
-- المُعتل: الفعل الذي يحتوي على حرف أو أكثر من أحرف العلة
-- ═══════════════════════════════════════════════════════════
if weak_count > 0 then
-- ─────────────────────────────────────────────────────
-- لفيف: يحتوي على حرفين أو أكثر من أحرف العلة
-- ─────────────────────────────────────────────────────
if weak_count >= 2 then
-- مقرون: حرفا العلة متجاوران
if is_weak[2] and is_weak[3] then -- الثاني والثالث
--W: المُضعَّف يُفحَص أولا: جذر مثل حيي حرفا علته متماثلان، فهو لفيف
-- مقرون مُضعَّف، وهذا أخصُّ من المقرون المُجرَّد. Paper 1's ids 38
-- and 39. This test used to be missing altogether, so حيي and عيي
-- came back as plain conjoined and tests/classify_test.lua carried
-- a GEMINATED_CONJOINED_IDS exemption to say so.
if is_doubled then
if r2 == W then
return "معتل لفيف مقرون مُضعَّف واوي"
end
return "معتل لفيف مقرون مُضعَّف يائي"
end
if is_hamza[1] then
return "معتل لفيف مقرون مهموز الفاء"
end
return "معتل لفيف مقرون"
elseif is_weak[1] and is_weak[2] then -- الأول والثاني
return "معتل لفيف مقرون"
-- مفروق: الأول والثالث حرفا علة
elseif is_weak[1] and is_weak[3] then
if is_hamza[2] then
return "معتل لفيف مفروق مهموز العين"
end
return "معتل لفيف مفروق"
end
-- ─────────────────────────────────────────────────────
-- مثال: الحرف الأول حرف علة
-- ─────────────────────────────────────────────────────
elseif is_weak[1] then
if r1 == W then -- واوي
if is_hamza[3] then
return "معتل مثال واوي مهموز اللام"
elseif is_doubled then
return "معتل مثال واوي مُضعَّف"
elseif is_hamza[2] then
return "معتل مثال واوي مهموز العين"
end
return "معتل مثال واوي"
else -- يائي (ي)
if is_doubled then
return "معتل مثال يائي مُضعَّف"
elseif is_hamza[2] then
return "معتل مثال يائي مهموز العين"
end
return "معتل مثال يائي"
end
-- ─────────────────────────────────────────────────────
-- أجوف: الحرف الثاني حرف علة
-- ─────────────────────────────────────────────────────
elseif is_weak[2] then
if r2 == W then -- واوي
if is_hamza[3] then
return "معتل أجوف واوي مهموز اللام"
elseif is_hamza[1] then
return "معتل أجوف واوي مهموز الفاء"
end
return "معتل أجوف واوي"
else -- يائي (ي)
if is_hamza[3] then
return "معتل أجوف يائي مهموز اللام"
elseif is_hamza[1] then
return "معتل أجوف يائي مهموز الفاء"
end
return "معتل أجوف يائي"
end
-- ─────────────────────────────────────────────────────
-- ناقص: الحرف الثالث حرف علة
-- ─────────────────────────────────────────────────────
elseif is_weak[3] then
if r3 == W then -- واوي
if is_hamza[1] then
return "معتل ناقص واوي مهموز الفاء"
elseif is_hamza[2] then
return "معتل ناقص واوي مهموز العين"
end
return "معتل ناقص واوي"
else -- يائي (ي)
if is_hamza[1] then
return "معتل ناقص يائي مهموز الفاء"
elseif is_hamza[2] then
return "معتل ناقص يائي مهموز العين"
end
return "معتل ناقص يائي"
end
end
-- ═══════════════════════════════════════════════════════════
-- الصحيح: الفعل الذي لا يحتوي على أحرف العلة
-- ═══════════════════════════════════════════════════════════
else
-- ─────────────────────────────────────────────────────
-- مهموز: يحتوي على همزة
-- ─────────────────────────────────────────────────────
if is_hamza[1] or is_hamza[2] or is_hamza[3] then
-- مهموز الفاء واللام: الأول والثالث همزة
if is_hamza[1] and is_hamza[3] then
return "صحيح مهموز الفاء واللام"
-- مهموز الفاء
elseif is_hamza[1] then
if is_doubled then
return "صحيح مُضعَّف مهموز الفاء"
end
return "صحيح مهموز الفاء"
-- مهموز العين
elseif is_hamza[2] then
return "صحيح مهموز العين"
-- مهموز اللام
elseif is_hamza[3] then
return "صحيح مهموز اللام"
end
-- ─────────────────────────────────────────────────────
-- مُضعَّف: الحرف الثاني = الثالث
-- ─────────────────────────────────────────────────────
elseif is_doubled then
return "صحيح مُضعَّف"
-- ─────────────────────────────────────────────────────
-- سالم: لا همزة، لا حرف علة، لا تضعيف
-- ─────────────────────────────────────────────────────
else
return "صحيح سالم"
end
end
return "غير معروف"
end
-------------------------------------------------------------------------------
-- External entry points --
-------------------------------------------------------------------------------
--W: Normalize root to use underscores as separators
-- Accepts: "كتب", "ك_ت_ب", or "ك ت ب"
-- Returns: "ك_ت_ب"
local function normalize_root(root)
if not root then
return nil
end
-- Helper function to normalize a single character/radical
local function normalize_char(char)
-- Convert all hamza variants to canonical bare hamza
if char == HAMZA_ON_ALIF or char == HAMZA_UNDER_ALIF or
char == HAMZA_ON_W or char == HAMZA_ON_Y then
return HAMZA
-- Convert alif maqṣūra to yaa (ى → ي)
elseif char == AMAQ then
return Y
-- Reject alif - it's not a root radical
elseif char == ALIF then
error("Root contains alif (ا) which is not a valid root radical. For weak verbs, use و (waw) or ي (yaa) instead.")
end
return char
end
-- Convert alif madda to hamza + alif for processing (will be caught as error below)
root = root:gsub(AMAD, HAMZA .. ALIF)
-- Replace spaces with underscores
root = root:gsub(" ", "_")
-- If no underscores yet, insert them between each character
if not root:find("_") then
-- Extract only Arabic letters (excluding diacritics)
-- Arabic letter range: U+0621 to U+064A (basic letters)
local chars = {}
for char in mw.ustring.gmatch(root, "[ء-ي]") do
table.insert(chars, normalize_char(char))
end
root = table.concat(chars, "_")
else
-- Root already has underscores (e.g., "أ_م_ن"), normalize each radical
local parts = mw.text.split(root, "_")
for i, part in ipairs(parts) do
parts[i] = normalize_char(part)
end
root = table.concat(parts, "_")
end
return root
end
--W: Construct the [1] parameter from root (جذر) and morphological pattern (وزن)
-- Example:
-- input: root="كتب", pattern="فعَل يفعُل"
-- output: "ك_ت_ب<I/a~u>"
-- `force_full_passive`, if true, appends ".pass" so the verb gets a full personal
-- passive paradigm instead of the module's default impersonal-passive guess for
-- vforms like I (past vowel i), V, VI, X and IIq (see |مبني للمجهول= on {{ar-conj}}).
-- `reduced`, if true, appends ".reduced" so an affix consonant assimilates into the
-- radical beside it: forms V/VI use the assimilated تاء التفعّل prefix (اِسَّمَّعَ)
-- instead of the default تَ- prefix (تَسَمَّعَ), and form IIIq assimilates اِفْعَنْلَلَ's
-- نون into a weak ل1 (اِهْبَيَّخَ for اِهْبَنْيَخَ) -- see |مدغم= on {{ar-conj}}. Not every
-- root with an assimilable radical is necessarily attested with the assimilated form, so
-- this isn't inferred automatically from the root; it must be requested.
local function construct_verb_spec(root, pattern, force_full_passive, reduced)
if not root or not pattern then
return nil
end
local normalized_root = normalize_root(root)
local form_code = MORPHOLOGICAL_PATTERN_TO_FORM[pattern]
if not form_code then
error("Unknown morphological pattern (وزن صرفي): " .. pattern)
end
if force_full_passive then
form_code = form_code .. ".pass"
end
if reduced then
form_code = form_code .. ".reduced"
end
return normalized_root .. "<" .. form_code .. ">"
end
-- Wrapper function that accepts جذر (root) and وزن (pattern) as parameters
-- Returns: verb_type (e.g., "فعل ثلاثي مُجرَّد صحيح سالم")
-- Example: export.get_verb_type({["جذر"] = "كتب", ["وزن"] = "فعَل يفعُل"})
function export.get_verb_type(args)
local verb_spec
if args["جذر"] and args["وزن"] then
verb_spec = construct_verb_spec(args["جذر"], args["وزن"])
elseif args[1] then
verb_spec = args[1]
else
error("Must provide either جذر and وزن, or a verb specification in args[1]")
end
local alternant_multiword_spec = export.do_generate_forms({[1] = verb_spec})
local _, verb_type = get_verb_info(alternant_multiword_spec)
return verb_type
end
-- Append two lists `l1` and `l2`, removing duplicates. If either is {nil}, just return the other.
local function combine_lists(l1, l2)
-- combine_footnotes() does exactly what we want.
return iut.combine_footnotes(l1, l2)
end
local function combine_metadata(data)
local src1 = data.form1
local src2 = data.form2
local dest = data.dest_form
dest.uncertain = src1.uncertain or src2.uncertain
if src1.genders and src2.genders and not m_table.deepEquals(src1.genders, src2.genders) then
-- do nothing
else
dest.genders = src1.genders or src2.genders
end
if src1.pos and src2.pos and src1.pos ~= src2.pos then
-- do nothing
else
dest.pos = src1.pos or src2.pos
end
-- Don't copy .alt, .gloss, .lit, .id, which describe a single term and don't extend to multiword terms.
dest.q = combine_lists(src1.q, src2.q)
dest.qq = combine_lists(src1.qq, src2.qq)
dest.l = combine_lists(src1.l, src2.l)
dest.ll = combine_lists(src1.ll, src2.ll)
end
-- Externally callable function to parse and conjugate a verb given user-specified arguments.
-- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms`
-- for each slot. If there are no values for a slot, the slot key will be missing. The value
-- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms(args, source_template, headword_head)
local PAGENAME = mw.loadData("Module:headword/data").pagename
local function in_template_space()
local nsText = mw.title.getCurrentTitle().nsText
return nsText == "Template" or nsText == "قالب"
end
-- Determine the verb spec we're being asked to generate the conjugation of. This may be taken from the current page
-- title or the value of |pagename=; but not when called from {{ar-verb form}}, where the page title is a
-- non-lemma form. Note that the verb spec may omit the lemma; e.g. it may be "<II>". For this reason, we use the
-- value of `pagename` computed here down below, when calling normalize_all_lemmas().
local pagename = source_template ~= "ar-verb form" and args.pagename or PAGENAME
local head = headword_head or pagename
--W: If both root (جذر) and morphological pattern (وزن) are provided, construct [1]
if args["جذر"] and args["جذر"] ~= "" and args["وزن"] and args["وزن"] ~= "" then
local constructed = construct_verb_spec(args["جذر"], args["وزن"], args["مبني للمجهول"], args["مدغم"])
if constructed and constructed ~= "" then
args[1] = constructed
end
end
local arg1 = args[1]
if not arg1 then
if (pagename == "ar-conj" or pagename == "ar-verb" or pagename == "ar-verb form" or pagename == "تصريف") and in_template_space() then
arg1 = "كتب<I/a~u.pass>"
else
arg1 = "<>"
end
end
-- When called from {{ar-verb form}}, determine the non-lemma form whose inflections we're being asked to
-- determine. This normally comes from the page title or the value of |pagename=.
local verb_form_of_form
if source_template == "ar-verb form" then
verb_form_of_form = args.pagename
if not verb_form_of_form then
if PAGENAME == "ar-verb form" and in_template_space() then
verb_form_of_form = "كتبت"
else
verb_form_of_form = PAGENAME
end
end
end
local incorporated_headword_head_into_lemma = false
if arg1:find("^<.*>$") then -- missing lemma
if head:find(" ") then
-- If multiword lemma, try to add arg spec after the first word.
-- Try to preserve the brackets in the part after the verb, but don't do it
-- if there aren't the same number of left and right brackets in the verb
-- (which means the verb was linked as part of a larger expression).
local first_word, post = rmatch(head, "^(.-)( .*)$")
local left_brackets = rsub(first_word, "[^%[]", "")
local right_brackets = rsub(first_word, "[^%]]", "")
if #left_brackets == #right_brackets then
arg1 = iut.remove_redundant_links(first_word) .. arg1 .. post
incorporated_headword_head_into_lemma = true
else
-- Try again using the form without links.
local linkless_head = m_links.remove_links(head)
if linkless_head:find(" ") then
first_word, post = rmatch(linkless_head, "^(.-)( .*)$")
arg1 = first_word .. arg1 .. post
else
error("Unable to incorporate <...> spec into explicit head due to a multiword linked verb or " ..
"unbalanced brackets; please include <> explicitly: " .. arg1)
end
end
else
-- Will be incorporated through `head` below in the call to normalize_all_lemmas().
incorporated_headword_head_into_lemma = true
end
end
local parse_props = {
parse_indicator_spec = parse_indicator_spec,
angle_brackets_omittable = true,
allow_blank_lemma = true,
}
local alternant_multiword_spec = iut.parse_inflected_text(arg1, parse_props)
alternant_multiword_spec.pos = pos or "verbs"
alternant_multiword_spec.args = args
alternant_multiword_spec.source_template = source_template
alternant_multiword_spec.verb_form_of_form = verb_form_of_form
alternant_multiword_spec.incorporated_headword_head_into_lemma = incorporated_headword_head_into_lemma
normalize_all_lemmas(alternant_multiword_spec, head)
detect_all_indicator_specs(alternant_multiword_spec)
local inflect_props = {
lang = lang,
slot_list = alternant_multiword_spec.verb_slots,
inflect_word_spec = conjugate_verb,
combine_metadata = combine_metadata,
-- We add links around the generated verbal forms rather than allow the entire multiword
-- expression to be a link, so ensure that user-specified links get included as well.
include_user_specified_links = true,
}
iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props)
if debug_translit then
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
if form.translit then
local full_form_translit = (lang:transliterate(m_links.remove_links(form.form)))
if full_form_translit ~= form.translit then
error(("Internal error: For slot '%s', form '%s' incremental translit '%s' not same as full translit '%s'"):
format(slot, form.form, form.translit, full_form_translit))
end
end
form.form = iut.remove_redundant_links(form.form)
end
end
end
-- Remove redundant brackets around entire forms.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = iut.remove_redundant_links(form.form)
end
end
-- Apply NFC-style normalization: reorder shadda+vowel to vowel+shadda
-- to match MediaWiki's automatic NFC normalization (which is applied on enwiktionary
-- but not in local Lua environments). This reverses the postprocessing step.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = apply_nfc_shadda(form.form)
end
end
determine_slot_uncertainty_from_forms(alternant_multiword_spec)
determine_verb_properties_from_forms(alternant_multiword_spec)
compute_annotation(alternant_multiword_spec)
if args.json and source_template == "ar-conj" then
-- There is a circular reference in `base.alternant_multiword_spec`, which points back to top level.
iut.map_word_specs(alternant_multiword_spec, function(base)
base.alternant_multiword_spec = nil
end)
return require("Module:JSON").toJSON(alternant_multiword_spec)
end
return alternant_multiword_spec
end
-- Entry point for {{ar-conj}}. Template-callable function to parse and conjugate a verb given
-- user-specified arguments and generate a displayable table of the conjugated forms.
function export.show(frame)
local parent_args = frame:getParent() and frame:getParent().args or frame.args --W
local params = {
[1] = {},
["noautolinktext"] = {type = "boolean"},
["noautolinkverb"] = {type = "boolean"},
["t"] = {}, -- for use by {{ar-verb form}}; otherwise ignored
["id"] = {}, -- for use by {{ar-verb form}}; otherwise ignored
["pagename"] = {}, -- for testing/documentation pages
["json"] = {type = "boolean"}, -- for bot use
--W: additional parameters for ar.wiktionary.org
["جذر"] = {type = "string"}, --W: الجذر اللغوي, root
["وزن"] = {type = "string"}, --W: الوزن الصرفي, morphological pattern
["مبني للمجهول"] = {type = "boolean"}, --W: force a full personal passive paradigm,
-- overriding the default impersonal-passive guess for vforms like I (past vowel
-- i), V, VI, X and IIq
["مدغم"] = {type = "boolean"}, --W: assimilate the affix into the radical beside it:
-- forms V/VI's تاء التفعّل into the first radical (اِسَّمَّعَ instead of
-- تَسَمَّعَ), or form IIIq's نون into a weak ل1 (اِهْبَيَّخَ for اِهْبَنْيَخَ)
["كامل"] = {type = "boolean"}, --W: show full table (default is simplified table)
["بؤرة"] = {type = "string"}, --W: highlight the cells holding this form
["موسع"] = {type = "boolean"}, --W: show the table expanded (default: collapsed)
}
local args = require("Module:parameters").process(parent_args, params)
--W: If both root (جذر) and morphological pattern (وزن) are provided, construct [1]
if args["جذر"] and args["جذر"] ~= "" and args["وزن"] and args["وزن"] ~= "" then
local constructed = construct_verb_spec(args["جذر"], args["وزن"], args["مبني للمجهول"], args["مدغم"])
if constructed and constructed ~= "" then
args[1] = constructed
end
end
local alternant_multiword_spec = export.do_generate_forms(args, "ar-conj")
if type(alternant_multiword_spec) == "string" then
-- JSON return value
return alternant_multiword_spec
end
--W: |بؤرة= marks the cells holding a given form, so that a conjugated-form
-- page ([[Module:ar-verb-form]]) can show the reader where in the paradigm
-- the word they looked up actually sits. The slots have to be found before
-- show_forms(), which replaces each form list with rendered wikitext.
alternant_multiword_spec.focus_slots =
find_focus_slots(alternant_multiword_spec, args["بؤرة"])
--W: A table whose one relevant cell is highlighted is no use folded away, so
-- [[Module:ar-verb-form]] asks for it open. Lemma pages keep it collapsed.
alternant_multiword_spec.expanded = args["موسع"] or false
show_forms(alternant_multiword_spec)
--W: Choose table type: simplified (default) or full (comprehensive)
local table_html
if args["كامل"] then
table_html = make_table(alternant_multiword_spec)
else
table_html = make_table_ar(alternant_multiword_spec)
end
--W: No categories. ar.wiktionary does not carry the enwiktionary category
-- tree this module was written against, so format_categories() was commented
-- out here; the insert_cat() calls that fed it are now gone too, and with
-- them alternant_multiword_spec.categories.
return table_html
end
function export.verb_forms(frame)
local parargs = frame:getParent().args
local params = {
[1] = {},
[2] = {},
[3] = {},
[4] = {},
[5] = {},
pagename = {},
}
for _, form in ipairs(allowed_vforms) do
-- FIXME: We go up to 5 here. The code supports unlimited variants but it's unlikely we will ever see more than
-- 2.
for index = 1, 5 do
local prefix = index == 1 and form or form .. index
params[prefix .. "-pv"] = {}
for _, extn in ipairs { "", "-vn", "-ap", "-pp" } do
params[prefix .. extn] = {}
params[prefix .. extn .. "-head"] = {}
-- FIXME: No -tr?
params[prefix .. extn .. "-gloss"] = {}
end
end
end
local args = require("Module:parameters").process(parargs, params)
local i = 1
local past_vowel_re = "^[aui,]*$"
local combined_root = nil
if not args[i] or rfind(args[i], past_vowel_re) then
combined_root = args.pagename or mw.loadData("Module:headword/data").pagename
if not rfind(combined_root, "^([^ ]) ([^ ]) ([^ ])$") and not
rfind(combined_root, "^([^ ]) ([^ ]) ([^ ]) ([^ ])$") then
error("When inferring roots from page title, need three or four space-separated radicals: " .. combined_root)
end
elseif rfind(args[i], " ") then
combined_root = args[i]
i = i + 1
else
local separate_roots = {}
while args[i] and not rfind(args[i], past_vowel_re) do
table.insert(separate_roots, args[i])
i = i + 1
end
combined_root = table.concat(separate_roots, " ")
end
local past_vowel = args[i]
i = i + 1
if past_vowel and not rfind(past_vowel, past_vowel_re) then
error("Unrecognized past vowel, should be 'a', 'i', 'u', 'a,u', etc. or empty: " .. past_vowel)
end
-- Spaces interfere with parsing as a unit in [[Module:inflection utilities]], so replace with underscore.
combined_root = combined_root:gsub(" ", "_")
local split_root = rsplit(combined_root, "_")
-- Map from verb forms (I, II, etc.) to a table of verb properties,
-- which has entries e.g. for "verb" (either true to autogenerate the verb
-- head, or an explicitly specified verb head using e.g. argument "I-head"),
-- and for "verb-gloss" (which comes from e.g. the argument "I" or "I-gloss"),
-- and for "vn" and "vn-gloss", "ap" and "ap-gloss", "pp" and "pp-gloss".
local verb_properties = {}
for _, form in ipairs(allowed_vforms) do
local formpropslist = {}
local derivs = {{"verb", ""}, {"vn", "-vn"}, {"ap", "-ap"}, {"pp", "-pp"}}
local index = 1
while true do
local formprops = {}
local prefix = index == 1 and form or form .. index
if prefix == "I" then
formprops.pv = past_vowel
end
if args[prefix .. "-pv"] then
formprops.pv = args[prefix .. "-pv"]
end
for _, deriv in ipairs(derivs) do
local prop = deriv[1]
local extn = deriv[2]
if args[prefix .. extn] == "+" then
formprops[prop] = true
elseif args[prefix .. extn] == "-" then
formprops[prop] = false
elseif args[prefix .. extn] then
formprops[prop] = true
formprops[prop .. "-gloss"] = args[prefix .. extn]
end
if args[prefix .. extn .. "-head"] then
if formprops[prop] == nil then
formprops[prop] = true
end
formprops[prop] = args[prefix .. extn .. "-head"]
end
if args[prefix .. extn .. "-gloss"] then
if formprops[prop] == nil then
formprops[prop] = true
end
formprops[prop .. "-gloss"] = args[prefix .. extn .. "-gloss"]
end
end
if formprops.verb then
-- If a verb form specified, also turn on vn (unless form I, with
-- unpredictable vn) and ap, and maybe pp, according to form,
-- weakness and past vowel. But don't turn these on if there's
-- an explicit on/off specification for them (e.g. I-pp=-).
if form ~= "I" and formprops.vn == nil then
formprops.vn = true
end
if formprops.ap == nil then
formprops.ap = true
end
local weakness = weakness_from_radicals(form, split_root[1], split_root[2], split_root[3],
split_root[4])
if formprops.pp == nil and not vform_probably_no_passive(form,
weakness, rsplit(formprops.pv or "", ","), {}) then
formprops.pp = true
end
if formprops.verb == true or formprops.vn == true or formprops.ap == true or formprops.pp == true then
formprops.need_autogen = true
end
table.insert(formpropslist, formprops)
index = index + 1
else
break
end
end
table.insert(verb_properties, {form, formpropslist})
end
-- Go through and create the verb form derivations as necessary, when they haven't been explicitly given.
for _, vplist in ipairs(verb_properties) do
local vform = vplist[1]
for _, props in ipairs(vplist[2]) do
if props.need_autogen then
local form_with_vowels
if vform == "I" then
local pv = props.pv
if not pv then
-- Make up likely past vowels based on weakness and actual radical.
if split_root[3] == W then -- final-weak
form_with_vowels = "I/a~u"
elseif split_root[3] == Y then
form_with_vowels = "I/a~i"
elseif split_root[2] == W then --hollow
form_with_vowels = "I/u~u"
elseif split_root[2] == Y then
form_with_vowels = "I/i~i"
else
-- most common; doesn't matter so much since we're not displaying the non-past
form_with_vowels = "I/a~u"
end
else
local pvs = rsplit(pv, ",")
local vowel_sufs = {}
for _, pv in ipairs(pvs) do
local vowel_spec
if pv == "a" then
-- Make up likely past vowels based on weakness and actual radical.
if split_root[3] == W then -- final-weak
vowel_spec = "a~u"
elseif split_root[3] == Y then
vowel_spec = "a~i"
elseif split_root[2] == W then --hollow
vowel_spec = "a~u"
elseif split_root[2] == Y then
vowel_spec = "a~i"
else
-- most common; doesn't matter so much since we're not displaying the non-past
vowel_spec = "a~u"
end
elseif pv == "i" then
-- most common; doesn't matter so much since we're not displaying the non-past
vowel_spec = "i~a"
elseif pv == "u" then
-- most common; doesn't matter so much since we're not displaying the non-past
vowel_spec = "u~u"
else
error(("Internal error: Bad past vowel '%s' in {{ar-verb forms}}"):format(pv))
end
table.insert(vowel_sufs, vowel_spec)
end
form_with_vowels = "I/" .. table.concat(vowel_sufs, "/")
end
else
form_with_vowels = vform
end
local angle_bracket_spec = ("%s<%s.pass>"):format(combined_root, form_with_vowels)
local alternant_multiword_spec = export.do_generate_forms({angle_bracket_spec}, "ar-verb forms")
local function format_forms(forms)
if not forms then
return "-" -- FIXME: Throw an error?
end
local formatted = {}
for _, form in ipairs(forms) do
if form.translit then
table.insert(formatted, ("%s//%s"):format(form.form, form.translit))
else
table.insert(formatted, form.form)
end
end
return table.concat(formatted, "،")
end
if props.verb == true then
props.verb = format_forms(alternant_multiword_spec.forms.past_3ms)
end
for _, deriv in ipairs({"vn", "ap", "pp"}) do
if props[deriv] == true then
props[deriv] = format_forms(alternant_multiword_spec.forms[deriv])
end
end
end
end
end
-- Go through and output the result
local formtextarr = {}
for _, vplist in ipairs(verb_properties) do
local form = vplist[1]
for _, props in ipairs(vplist[2]) do
local textarr = {}
if props.verb then
local text = "* '''[[Appendix:Arabic verbs#Form " .. form .. "|Form " .. form .. "]]''': "
local linktext = {}
local splitheads = rsplit(props.verb, "[,،]")
for _, head in ipairs(splitheads) do
table.insert(linktext, m_links.full_link({lang = lang, term = head, gloss = props["verb-gloss"]}))
end
text = text .. table.concat(linktext, "، ")
table.insert(textarr, text)
for _, derivengl in ipairs({{"vn", "Verbal noun"}, {"ap", "Active participle"}, {"pp", "Passive participle"}}) do
local deriv = derivengl[1]
local engl = derivengl[2]
if props[deriv] then
local text = "** " .. engl .. ": "
local linktext = {}
local splitheads = rsplit(props[deriv], "[,،]")
for _, head in ipairs(splitheads) do
local ar, translit = head:match("^(.*)//(.-)$")
if not ar then
ar = head
end
table.insert(linktext, m_links.full_link {lang = lang, term = ar, tr = translit,
gloss = props[deriv .. "-gloss"]} )
end
text = text .. table.concat(linktext, "، ")
table.insert(textarr, text)
end
end
table.insert(formtextarr, table.concat(textarr, "\n"))
end
end
end
return table.concat(formtextarr, "\n")
end
-- Infer radicals from lemma headword (i.e. 3rd masculine singular past) and verb form (I, II, etc.). Throw an error if
-- headword is malformed. A given returned radical may be actually be a list of possible radicals, where the first one
-- should be used if the user didn't explicitly give the radical. If the list contains a field `ambig = true`, the
-- radical is considered ambiguous and should not be categorized. `is_reduced` indicates that the user specified
-- `.reduced` to indicate that the verb form is reduced by assimilation and/or haplology (typically archaic Koranic
-- forms such as اِدَّارَأَ instead of تَدَارَأَ; or اِسْطَاعَ instead of اِسْتِطَاعَ; etc.
function export.infer_radicals(data)
local headword, vform, passive, past_vowel, nonpast_vowel, is_reduced =
data.headword, data.vform, data.passive, data.past_vowel, data.nonpast_vowel, data.is_reduced
past_vowel = past_vowel or "-"
nonpast_vowel = nonpast_vowel or "-"
local function verify_vowel(vowel, param)
--W: A past/non-past vowel may legitimately be a form object {form=..., footnotes=...}
-- when the user attaches a footnote, e.g. <I/a[نادر]~u>, so compare the formval.
-- Comparing the raw value crashed on Lua 5.1 ("bad argument #2 to 'format'").
local formval = rget(vowel)
if formval ~= A and formval ~= I and formval ~= U and formval ~= "-" then
error(("Internal error: Bad value for %s: %s (should be Arabic diacritic vowel or '-')"):format(
param, dump(vowel)))
end
end
verify_vowel(past_vowel, "past_vowel")
verify_vowel(nonpast_vowel, "nonpast_vowel")
local ch = {}
local form_viii_assim, variant
-- sub out alif-madda for easier processing
headword = rsub(headword, AMAD, HAMZA .. ALIF)
local function infer_err(msg, noann)
local anns = {}
local nohead, novform
if noann == "nohead" then
nohead = true
elseif noann == "novform" then
novform = true
elseif noann == "nohead-vform" then
nohead = true
novform = true
elseif noann then
error(("Internal error: Unrecognized value for 'noann': %s"):format(dump(noann)))
end
if not nohead then
table.insert(anns, ("headword=%s"):format(data.headword))
end
if not novform then
table.insert(anns, ("verb form=%s"):format(data.vform))
end
anns = table.concat(anns, "، ")
if anns ~= "" then
anns = ": " .. anns
end
error(msg .. anns)
end
local len = ulen(headword)
local expected_length
-- extract the headword letters into an array
for i = 1, len do
table.insert(ch, usub(headword, i, i))
end
-- check that the letter at the given index is the given string, or
-- is one of the members of the given array
local function check(index, must)
local letter = ch[index]
if type(must) == "string" then
if not letter then
infer_err("Letter " .. index .. " is nil")
end
if letter ~= must then
infer_err(("For verb form %s, letter %s must be %s, not %s"):format(vform, index, must, letter),
"novform")
end
elseif not m_table.contains(must, letter) then
infer_err("For verb form " .. vform .. ", radical " .. index ..
" must be one of " .. table.concat(must, " ") .. ", not " .. letter, "novform")
end
end
-- Check that length of headword is within [min, max]
local function check_len(min, max)
if min and len < min then
infer_err(("Not enough letters for verb form %s, expected at least %s"):format(vform, min), "novform")
end
if max and len > max then
infer_err(("Too many letters for verb form %s, expected at most %s"):format(vform, max), "novform")
end
end
-- A form I verb beginning with w- keeps the w in the non-past unless the non-past vowel is a kasra or a
-- lowered kasra; see form_i_w_assimilated(), which the radicals path uses too. This used to be spelt out
-- here as "i~a or u~u", which missed a~u (وَجَلَ يَوْجُلُ).
local function form_I_w_non_assimilated()
return not form_i_w_assimilated(past_vowel, nonpast_vowel)
end
-- Convert radicals to canonical form (handle various hamza varieties and check for misplaced alif or alif maqṣūra;
-- legitimate cases of these letters are handled above).
local function convert(rad, index)
if type(rad) == "table" then
for i, r in ipairs(rad) do
rad[i] = convert(r, index)
end
return rad
elseif rad == HAMZA_ON_ALIF or rad == HAMZA_UNDER_ALIF or
rad == HAMZA_ON_W or rad == HAMZA_ON_Y then
return HAMZA
elseif rad == AMAQ then
infer_err("Radical " .. index .. " must not be alif maqṣūra")
elseif rad == ALIF then
infer_err("Radical " .. index .. " must not be alif")
else
return rad
end
end
local quadlit = vform:find("q$")
-- find first radical, start of second/third radicals, check for
-- required letters
local radstart, rad1, rad2, rad3, rad4
local weakness
if vform == "I" or vform == "II" then
rad1 = ch[1]
radstart = 2
elseif vform == "III" then
rad1 = ch[1]
check(2, {ALIF, W}) -- W occurs in passive-only verbs
radstart = 3
elseif vform == "IV" then
-- this would be alif-madda but we replaced it with hamza-alif above.
if ch[1] == HAMZA and ch[2] == ALIF then
rad1 = HAMZA
else
check(1, HAMZA_ON_ALIF)
rad1 = ch[2]
end
radstart = 3
elseif vform == "V" then
check(1, is_reduced and ALIF or T)
rad1 = ch[2]
radstart = 3
elseif vform == "VI" then
check(1, is_reduced and ALIF or T)
if ch[2] == AMAD then
rad1 = HAMZA
radstart = 3
else
rad1 = ch[2]
check(3, {ALIF, W}) -- W occurs in passive-only verbs
radstart = 4
end
elseif vform == "VII" then
check(1, ALIF)
if is_reduced then
check(2, M)
rad1 = M
radstart = 3
else
check(2, N)
rad1 = ch[3]
radstart = 4
end
elseif vform == "VIII" then
check(1, ALIF)
rad1 = ch[2]
if rad1 == "د" then
rad1 = {"د", "ذ"} -- not considered ambiguous since it's usually د
radstart = 3
form_viii_assim = "دّ"
elseif rad1 == "ظ" and ch[3] == "ط" and len >= 5 then
-- [[اظطلم]], variant of [[اظلم]]
radstart = 4
form_viii_assim = "ظْط"
elseif rad1 == "ذ" and ch[3] == "د" and len >= 5 then
-- [[اذدكر]], variant of [[اذكر]]
radstart = 4
form_viii_assim = "ذْد"
elseif rad1 == T or rad1 == "ث" or rad1 == "ذ" or rad1 == "ط" or rad1 == "ظ" then
radstart = 3
form_viii_assim = rad1 .. SH
elseif rad1 == "ز" then
check(3, "د")
radstart = 4
form_viii_assim = "زْد"
elseif rad1 == "ص" or rad1 == "ض" then
check(3, "ط")
radstart = 4
form_viii_assim = rad1 .. SK .. "ط"
else
check(3, T)
radstart = 4
rad1 = convert(rad1, 1)
form_viii_assim = rad1 .. SK .. "ت"
end
if rad1 == T then
-- Radical is ambiguous, might be ت or و or ي but doesn't affect conjugation. Note that there are no
-- form-VIII verbs with initial radical ي given in Hans Wehr but Lane mentions at least:
-- - (page 2973) اِتَّأَسَ, with assimilation of the ي to ت, from root ي ء س;
-- - (page 2975) اِتَّبَسَ non-past يَتَّبِسُ and alternative اِيتَبَسَ non-past يَاتَبِسُ from the root ي ب س;
-- - (page 2976) اِتَّسَرَ non-past يَتَّسِرُ or alternatively يَأْتَسِرُ with hamza preserved from the root ي س ر.
-- These alternative forms seem very rare and probably not worth worrying about, but if we want to handle
-- them, we can do it when the time comes.
rad1 = {T, W, Y, ambig = true}
-- اِتَّخَذَ irregularly has hamza as the radical but assimilates like و
if ch[3] == "خ" and ch[4] == "ذ" then
rad1[4] = HAMZA
end
end
elseif vform == "IX" then
check(1, ALIF)
rad1 = ch[2]
radstart = 3
elseif vform == "X" then
check(1, ALIF)
check(2, S)
if is_reduced then
rad1 = ch[3]
radstart = 4
else
check(3, T)
rad1 = ch[4]
radstart = 5
end
elseif vform == "Iq" then
rad1 = ch[1]
rad2 = ch[2]
radstart = 3
elseif vform == "IIq" then
check(1, T)
rad1 = ch[2]
rad2 = ch[3]
radstart = 4
elseif vform == "IIIq" then
check(1, ALIF)
rad1 = ch[2]
rad2 = ch[3]
check(4, N)
radstart = 5
elseif vform == "IVq" then
check(1, ALIF)
rad1 = ch[2]
rad2 = ch[3]
radstart = 4
elseif vform == "XI" then
check_len(5, 5)
check(1, ALIF)
rad1 = ch[2]
rad2 = ch[3]
check(4, ALIF)
rad3 = ch[5]
weakness = "sound"
elseif vform == "XII" then
check(1, ALIF)
rad1 = ch[2]
if ch[3] ~= ch[5] then
infer_err("For verb form XII, letters 3 and 5 should be the same", "novform")
end
check(4, W)
radstart = 5
elseif vform == "XIII" then
check_len(5, 5)
check(1, ALIF)
rad1 = ch[2]
rad2 = ch[3]
check(4, W)
rad3 = ch[5]
if rad3 == AMAQ then
weakness = "final-weak"
else
weakness = "sound"
end
elseif vform == "XIV" then
check_len(6, 6)
check(1, ALIF)
rad1 = ch[2]
rad2 = ch[3]
check(4, N)
rad3 = ch[5]
if ch[6] == AMAQ then
check_waw_ya(rad3)
weakness = "final-weak"
else
if ch[5] ~= ch[6] then
infer_err("For verb form XIV, letters 5 and 6 should be the same", "novform")
end
weakness = "sound"
end
elseif vform == "XV" then
check_len(6, 6)
check(1, ALIF)
rad1 = ch[2]
rad2 = ch[3]
check(4, N)
rad3 = ch[5]
if rad3 == Y then
check(6, ALIF)
else
check(6, AMAQ)
end
weakness = "sound"
else
error("Internal error: Unrecognized verb form " .. vform)
end
-- Process the last two radicals. RADSTART is the index of the first of the two. If it's nil then all radicals have
-- already been processed above, and we don't do anything.
if radstart then
-- There must (normally) be one or two letters left.
if len == radstart then
if vform == "I" and ch[len] == Y then
-- short form حَيَّ
weakness = "final-weak"
rad2 = Y
rad3 = Y
variant = "short"
elseif vform == "IV" and rad1 == "ر" and ch[len] == AMAQ then
-- irregular verb أَرَى
weakness = "final-weak"
rad2 = HAMZA
rad3 = Y
elseif vform == "X" and rad1 == "ح" and ch[len] == AMAQ then
-- irregular verb اِسْتَحَى
weakness = "final-weak"
rad2 = Y
rad3 = Y
variant = "short"
else
-- If one letter left, then it's a geminate verb. If the letter is alif or alif maqṣūra, it will trigger
-- an error down the line.
if vform_supports_geminate(vform) then
weakness = "geminate"
rad2 = ch[len]
rad3 = ch[len]
if vform == "III" or vform == "VI" then
variant = "short"
end
else
infer_err("Apparent geminate verb, but geminate verbs not allowed for this verb form")
end
end
elseif quadlit then
-- Process last two radicals of a quadriliteral verb form.
rad3 = ch[radstart]
rad4 = ch[radstart + 1]
expected_length = radstart + 1
check_len(expected_length)
if rad4 == AMAQ or rad4 == ALIF and rad3 == Y or rad4 == Y then
-- rad4 can be Y in passive-only verbs.
if vform_supports_final_weak(vform) then
weakness = "final-weak"
-- Ambiguous radical; randomly pick wāw as radical (but avoid two wāws in a row); it could be wāw or
-- yāʾ, but doesn't affect the conjugation.
rad4 = rad3 == W and {Y, W, ambig = true} or {W, Y, ambig = true}
else
infer_err("Last radical is " .. rad4 .. " but verb form " .. vform ..
" doesn't support final-weak verbs", "novform")
end
else
weakness = "sound"
end
else
-- Process last two radicals of a triliteral verb form.
rad2 = ch[radstart]
rad3 = ch[radstart + 1]
expected_length = radstart + 1
check_len(expected_length)
if vform == "I" and (is_waw_ya(rad3) or rad3 == ALIF or rad3 == AMAQ) then
local inferred_past_vowel, inferred_nonpast_vowel
-- Check for final-weak form I verb. It can end in tall alif (rad3 = wāw) or alif maqṣūra (rad3 = yāʾ)
-- or a wāw or yāʾ (with a past vowel of i or u, e.g. nasiya/yansā "forget" or with a passive-only
-- verb).
if rad1 == W and not form_I_w_non_assimilated() then
weakness = "assimilated+final-weak"
else
weakness = "final-weak"
end
if rad3 == ALIF then
rad3 = W
inferred_past_vowel = A
inferred_nonpast_vowel = U
if is_passive_only(passive) then
infer_err("Final-weak form-I passive verbs should end in yāʔ (ي), not tall alif (ا)", "novform")
end
elseif rad3 == AMAQ then
rad3 = Y
inferred_past_vowel = A
inferred_nonpast_vowel = I
if is_passive_only(passive) then
infer_err("Final-weak form-I passive verbs should end in yāʔ (ي), not alif maqṣūra (ى)",
"novform")
end
elseif rad1 == "ح" and rad2 == Y and rad3 == Y then
-- Long variant حَيِيَ.
inferred_past_vowel = I
inferred_nonpast_vowel = A
variant = "long"
else
if not is_passive_only(passive) then
-- does a non-passive final-weak verb in -uwa ever happen? (YES: e.g. [[رجو]] "to be slack")
inferred_past_vowel = rad3 == Y and I or U
inferred_nonpast_vowel = A
end
-- Ambiguous radical; randomly pick wāw as radical (but avoid two wāws); it could be wāw or yāʾ, but
-- doesn't affect the conjugation.
rad3 = (rad1 == W or rad2 == W) and {Y, W, ambig = true} or {W, Y, ambig = true} -- ambiguous
end
if inferred_past_vowel then
local raw_past_vowel = rget(past_vowel)
local raw_nonpast_vowel = rget(nonpast_vowel)
if raw_past_vowel ~= "-" then
if raw_past_vowel ~= inferred_past_vowel then
infer_err(("Final-weak form-I verb inferred past vowel %s, which disagrees with " ..
"explicitly specified %s"):format(undia[inferred_past_vowel], undia[raw_past_vowel]), "novform")
else
-- in case of footnote in past_vowel
inferred_past_vowel = past_vowel
end
end
if raw_nonpast_vowel ~= "-" and raw_nonpast_vowel ~= A and inferred_nonpast_vowel == U then
-- if inferred as I or A, the reality can be the reverse; form-I final-weak verbs with a~a and
-- i~i exist, e.g. سَعَى/يَسْعَى, وَلِيَ/يَلِي. Weird verb [[صها]] (also written [[صهى]]) has non-past
-- يصهى so we can't throw an error in this situation.
if raw_nonpast_vowel ~= inferred_nonpast_vowel then
infer_err(("Final-weak form-I verb inferred non-past vowel %s, which disagrees with " ..
"explicitly specified %s"):format(undia[inferred_nonpast_vowel], undia[raw_nonpast_vowel]), "novform")
else
-- in case of footnote in nonpast_vowel
inferred_nonpast_vowel = nonpast_vowel
end
end
end
if not is_passive_only(passive) then
if rget(past_vowel) == "-" then
past_vowel = inferred_past_vowel
end
if rget(nonpast_vowel) == "-" then
nonpast_vowel = inferred_nonpast_vowel
end
end
elseif vform == "IX" and is_waw_ya(rad3) and len == radstart + 2 and ch[len] == AMAQ then
-- Final-weak form IX verbs like اِرْعَوَى "to desist, to repent, to see the light".
weakness = "final-weak"
expected_length = radstart + 2
elseif vform == "X" and rad1 == "ح" and rad2 == Y and rad3 == ALIF then
-- Long variant اِسْتَحْيَا.
weakness = "final-weak"
rad3 = Y
variant = "long"
elseif rad3 == AMAQ or rad2 == Y and rad3 == ALIF or rad3 == Y then
-- rad3 == Y happens in passive-only verbs.
if vform_supports_final_weak(vform) then
weakness = "final-weak"
else
infer_err("Last radical is " .. rad3 .. " but verb form doesn't support final-weak verbs")
end
-- Ambiguous radical; randomly pick wāw as radical (but avoid two wāws); it could be wāw or yāʾ, but
-- doesn't affect the conjugation.
rad3 = (rad1 == W or rad2 == W) and {Y, W, ambig = true} or {W, Y, ambig = true}
elseif rad2 == ALIF then
if vform_supports_hollow(vform) then
weakness = "hollow"
local function set_past_to_a()
if req(past_vowel, A) then
-- already set
elseif req(past_vowel, "-") or req(past_vowel, rget(nonpast_vowel)) then
past_vowel = A
else
infer_err(("Form I hollow verb with nonpast vowel set to '%s' must have past vowel set to 'a' or the same value, not %s"):
format(undia[rget(nonpast_vowel)], undia[rget(past_vowel)]), "novform")
end
end
if vform == "I" and req(nonpast_vowel, U) then
rad2 = W
set_past_to_a()
elseif vform == "I" and req(nonpast_vowel, I) then
rad2 = Y
set_past_to_a()
else
if req(nonpast_vowel, A) and not req(past_vowel, I) then
infer_err(("Form I hollow verb with nonpast vowel set to 'a' must have past vowel set to 'i', not %s"):
format(undia[rget(past_vowel)]), "novform")
end
-- Ambiguous radical; could be wāw or yāʾ; if verb form I, it's critical to get this right, and
-- the caller checks for this situation and throws an error if non-past vowel is "a" and second
-- radical isn't explicitly given.
rad2 = {W, Y, ambig = true, need_radical = true}
end
else
infer_err("Second radical is alif but verb form doesn't support hollow verbs")
end
elseif vform == "I" and rad1 == W and not form_I_w_non_assimilated() then
weakness = "assimilated"
elseif rad2 == rad3 and (vform == "III" or vform == "VI") then
weakness = "geminate"
variant = "long"
else
weakness = "sound"
end
end
if expected_length then
check_len(expected_length, expected_length)
end
end
rad1 = convert(rad1, 1)
rad2 = convert(rad2, 2)
rad3 = convert(rad3, 3)
rad4 = convert(rad4, 4)
if not weakness then
error("Internal error: Returned weakness from infer_radicals() is nil")
end
return {
weakness = weakness,
rad1 = rad1,
rad2 = rad2,
rad3 = rad3,
rad4 = rad4,
past_vowel = past_vowel,
nonpast_vowel = nonpast_vowel,
form_viii_assim = form_viii_assim,
variant = variant,
}
end
-- bot interface to infer_radicals()
function export.infer_radicals_json(frame)
local iparams = {
headword = {},
vform = {},
passive = {},
past_vowel = {},
nonpast_vowel = {},
is_reduced = {type = "boolean"},
}
local iargs = require("Module:parameters").process(frame.args, iparams)
return require("Module:JSON").toJSON(export.infer_radicals(iargs))
end
-- Infer vocalization from participle headword (active or passive), verb form (I, II, etc.) and whether the headword is
-- active or passive. Throw an error if headword is malformed. Returned radicals may contain Latin letters "t", "w" or "y"
-- indicating ambiguous radicals guessed to be tāʾ, wāw or yāʾ respectively.
function export.infer_participle_vocalization(headword, vform, weakness, is_active)
local chars = {}
local orig_headword = headword
-- Sub out alif-madda for easier processing.
headword = rsub(headword, AMAD, HAMZA .. ALIF)
local len = ulen(headword)
-- Extract the headword letters into an array.
for i = 1, len do
table.insert(chars, usub(headword, i, i))
end
local function form_intro_error_msg()
return ("For verb form %s %s%s participle %s, "):format(vform, orig_headword ~= headword and "normalized " or
"", is_active and "active" or "passive", headword)
end
local function err(msg)
error(form_intro_error_msg() .. msg, 1)
end
-- Check that length of headword is within [min, max].
local function check_len(min, max)
if min and len < min then
err(("expected at least %s letters but saw %s"):format(min, len))
elseif max and len > max then
err(("expected at most %s letters but saw %s"):format(max, len))
end
end
-- Get the character at `ind`, making sure it exists.
local function c(ind)
check_len(ind)
return chars[ind]
end
-- Check that the letter at the given index is the given string, or is one of the members of the given array
local function check(index, must)
local letter = chars[index]
local function make_possible_values()
if type(must) == "string" then
return must
else
return list_to_text(must, nil, " or ")
end
end
if not letter then
err(("expected a letter (specifically %s) at position %s, but participle is too short"):format(
make_possible_values(), index))
end
local matches
if type(must) == "string" then
matches = letter == must
else
matches = m_table.contains(must, letter)
end
if not matches then
err(("letter %s at index %s must be %s"):format(letter, index, make_possible_values()))
end
end
local function check_weakness(values, allow_missing, invert_condition)
local function make_possible_weaknesses()
for i, val in ipairs(values) do
values[i] = "'" .. val .. "'"
end
return list_to_text(values, nil, " or ")
end
if allow_missing and invert_condition then
error("Internal error: Can't specify both allow_missing and invert_condition")
end
if not weakness then
if allow_missing or invert_condition then
return
else
err(("weakness is unspecified but must be %s"):format(make_possible_weaknesses()))
end
else
local matches = m_table.contains(values, weakness)
if invert_condition and matches then
err(("weakness '%s' must not be %s"):format(weakness, make_possible_weaknesses()))
elseif not invert_condition and not matches then
err(("weakness '%s' must be %s"):format(weakness, make_possible_weaknesses()))
end
end
end
local vocalized
local function handle_possibly_final_weak(sound_prefix, expected_length)
check_len(expected_length, expected_length)
if c(expected_length) == AMAQ then
-- passive final-weak
if is_active then
err("participle in -ِى only allowed for passive participles")
end
check_weakness({"final-weak", "assimilated+final-weak"}, "allow missing")
vocalized = sound_prefix .. AN .. AMAQ
else
-- all others behave as if sound
check_weakness({"final-weak", "assimilated+final-weak"}, nil, "invert condition")
vocalized = sound_prefix .. (is_active and I or A) .. c(expected_length)
end
end
if not (vform == "I" and is_active) then
-- all participles except verb form I active begin in م-.
check(1, M)
end
if vform == "I" then
if is_active then
check(2, ALIF)
local sound_prefix = c(1) .. AA .. c(3)
if len == 3 then
if c(3) == HAMZA then
-- Either hollow with hamzated third radical, e.g. [[شاء]] active participle 'شَاءٍ', or final-weak
-- with hamzated second radical, e.g. [[رأى]] active participle 'رَاءٍ'. Theoretically (?), also
-- geminate with hamzated second/third radical, but I don't know if any such verbs exist.
if weakness == "geminate" then
vocalized = sound_prefix .. SH
else
check_weakness({"hollow", "final-weak"}, "allow missing")
vocalized = sound_prefix .. IN
end
else
check_weakness({"final-weak", "geminate"})
if weakness == "geminate" then
vocalized = sound_prefix .. SH
else
vocalized = sound_prefix .. IN
end
end
else
check_len(4, 4)
-- we will convert back to alif maqṣūra below as needed
vocalized = sound_prefix .. I .. c(4)
end
else
-- assimilated verbs: regular, e.g. مَوْزُون "weighed"
-- geminate verbs: regular, e.g. مَبْلُول "moistened"
-- third-hamzated verbs: مَبْرُوء
-- hollow verbs: مَقُود "led, driven"; مَزِيد "added, increased"
-- hollow first-hamzated verbs: مَئِيض "returned, reverted"; مَأْيُوس "despaired" (NOTE: formation is sound);
-- مَأُود or مَؤُود "bent; depleted"
-- hollow third-hamzated verbs: مَشِيء "willed, intended", مَضُوء "glittered?"
-- final-weak: مَلْقِيّ "found, encountered"; مَصْغُوّ "inclined"
-- hollow + final-weak: مَشْوِيّ "fried, grilled", مَهْوِيّ "loved"
-- first-hamzated + hollow + final-weak: مَأْوِيّ "received hospitably"
local sound_prefix = MA .. c(2) .. SK .. c(3)
if len == 5 then
-- sound, assimilated or geminate
check(4, W)
vocalized = sound_prefix .. UU .. c(5)
else
check_len(4, 4)
if c(4) == W then
-- final-weak third-wāw
vocalized = sound_prefix .. U .. W .. SH
elseif c(4) == Y then
-- final-weak third-yāʾ
vocalized = sound_prefix .. I .. Y .. SH
else
-- hollow
check(3, {W, Y})
if c(3) == W then
vocalized = MA .. c(2) .. UU .. c(4)
else
vocalized = MA .. c(2) .. II .. c(4)
end
end
end
end
elseif vform == "II" or vform == "V" or vform == "XII" or vform == "XIII" or vform == "Iq" or vform == "IIq" or
vform == "IIIq" then
local sound_prefix, expected_length
if vform == "II" then
sound_prefix = MU .. c(2) .. A .. c(3) .. SH
expected_length = 4
elseif vform == "V" then
check(2, T)
sound_prefix = MU .. T .. A .. c(3) .. A .. c(4) .. SH
expected_length = 5
elseif vform == "XII" then
-- e.g. [[احدودب]] "to be or become convex or humpbacked", مُحْدَوْدِب (active);
-- [[اثنونى]] "to be bent; to be doubled up", مُثْنَوْنٍ (active)
check(4, W)
if c(3) ~= c(5) then
err(("third letter %s should be the same as the fifth letter %s"):format(c(3), c(5)))
end
sound_prefix = MU .. c(2) .. SK .. c(3) .. A .. W .. SK .. c(5)
expected_length = 6
elseif vform == "XIII" then
-- e.g. [[اخروط]] "to get entangled; to extend", مُخْرَوِّط (active), مُخْرَوَّط (passive)
check(4, W)
sound_prefix = MU .. c(2) .. SK .. c(3) .. A .. W .. SH
expected_length = 5
elseif vform == "Iq" then
sound_prefix = MU .. c(2) .. A .. c(3) .. SK .. c(4)
expected_length = 5
elseif vform == "IIq" then
check(2, T)
sound_prefix = MU .. T .. A .. c(3) .. A .. c(4) .. SK .. c(5)
expected_length = 6
elseif vform == "IIIq" then
-- e.g. [[اخرنطم]] "to be proud and angry"
check(4, T)
sound_prefix = MU .. c(2) .. SK .. c(3) .. A .. N .. SK .. c(5)
expected_length = 6
else
error("Internal error: Unhandled verb form " .. vform)
end
if len == expected_length - 1 then
-- active final-weak
if not is_active then
err(("length-%s participle only allowed for active participles"):format(len))
end
check_weakness({"final-weak", "assimilated+final-weak"}, "allow missing")
vocalized = sound_prefix .. IN
else
handle_possibly_final_weak(sound_prefix, expected_length)
end
elseif vform == "III" or vform == "VI" then
local sound_prefix, expected_length
if vform == "VI" then
check(2, T)
check(4, ALIF)
sound_prefix = MU .. T .. A .. c(3) .. AA .. c(5)
expected_length = 6
else
sound_prefix = MU .. c(2) .. AA .. c(4)
expected_length = 5
end
if len == expected_length - 1 then
-- active final-weak or active or passive geminate
if is_active then
check_weakness({"geminate", "final-weak", "assimilated+final-weak"})
if weakness == "geminate" then
vocalized = sound_prefix .. SH
else
vocalized = sound_prefix .. IN
end
else
check_weakness({"geminate"}, "allow missing")
vocalized = sound_prefix .. SH
end
else
handle_possibly_final_weak(sound_prefix, expected_length)
end
elseif vform == "IV" or vform == "X" then
-- form IV:
-- sound: مُرْسِخ (active, "entrenching"), مُرْسَخ (passive, "entrenched")
-- first-hamzated (like sound): مُؤْيِس (active, "causing to despair"), مُؤْيَس (passive, "caused to despair")
-- final-weak: مُكْرٍ (active, "renting out"), مُكْرًى (passive, "rented out")
-- assimilated: مُورِد (active, "transferring"), مُورَد (passive, "transferred"); same when first-Y, e.g.
-- أَيْقَنَ "to be certain of": مُوقِن (active), مُوقَن (passive)
-- assimilated + final-weak: مُورٍ (active, "setting fire, kindling"), مُورًى (passive, "set fire, kindled")
-- geminate: مُمِدّ (active, "granting, helping"), مُمَدّ (passive, "granted, helped")
-- hollow: مُزِيل (active, "eliminating"), مُزَال (passive, "eliminated")
-- hollow + final-weak: مُعْيٍ (active, "tiring"), مُعْيًى (passive, "tired")
local sound_prefix, expected_length
if vform == "X" then
check(2, S)
check(3, T)
sound_prefix = MU .. S .. SK .. T .. A .. c(4)
expected_length = 6
else
sound_prefix = MU .. c(2)
expected_length = 4
end
if len == expected_length and c(len - 1) == Y and c(len) ~= AMAQ then
-- active hollow
if not is_active then
err("this shape only allowed for active participles")
end
check_weakness({"hollow"}, "allow missing")
vocalized = sound_prefix .. II .. c(len)
elseif len == expected_length and c(len - 1) == ALIF then
-- passive hollow
if is_active then
err("this shape only allowed for passive participles")
end
check_weakness({"hollow"}, "allow missing")
vocalized = sound_prefix .. AA .. c(len)
elseif len == expected_length - 1 then
-- active final-weak or active or passive geminate
if is_active then
check_weakness({"geminate", "final-weak", "assimilated+final-weak"})
if weakness == "geminate" then
vocalized = sound_prefix .. I .. c(len) .. SH
elseif vform == "IV" and c(2) == W then
-- assimilated final-weak
vocalized = sound_prefix .. c(len) .. IN
else
vocalized = sound_prefix .. SK .. c(len) .. IN
end
else
check_weakness({"geminate"}, "allow missing")
vocalized = sound_prefix .. A .. c(len) .. SH
end
else
if vform == "IV" and c(2) == W then
-- assimilated, possibly final-weak
sound_prefix = sound_prefix .. c(expected_length - 1)
else
sound_prefix = sound_prefix .. SK .. c(expected_length - 1)
end
handle_possibly_final_weak(sound_prefix, expected_length)
end
elseif vform == "VII" or vform == "VIII" then
-- form VII (passive participles are fairly rare but do exist):
-- sound: مُنْكَتِب (active "subscribing"), مُنْكَتَب (passive "subscribed")
-- geminate: مُنْضَمّ (both active "joining, containing" and passive "joined, contained")
-- final-weak: مُنْطَلٍ (active "fooling (someone)"), مُنْطَلًى (passive "fooled")
-- final-weak with medial wāw: مُنْطَوٍ (active "involving"), مُنْطَوًى (passive "involved")
-- hollow: مُنْقَاد (both active "complying with" and passive "complied with")
--
-- for form VIII, the same variants exist but things are complicated by assimilations involving the template T.
-- sound third-hamzated no assimilation: مُبْتَدِئ (active "beginning"), مُبْتَدَأ (passive "begun")
-- geminate no assimilation: مُبْتَزّ (both active "robbing" and passive "robbed")
-- final-weak no assimilation: مُبْتَنٍ (active "building"), مُبْتَنًى (passive "built")
-- final-weak with medial wāw no assimilation: مُحْتَوٍ (active "containing"), مُحْتَوًى (passive "contained")
-- hollow no assimilation: مُخْتَار (both active "choosing" and passive "chosen")
--
-- sound with total assimilation: مُتَّبِع (active "following"), مُتَّبَع (passive "followed")
-- sound with total assimilation, assimilating wāw: مُتَّعِد (active "threatening"), مُتَّعَد (passive "threatened")
-- sound with total assimilation, irregularly assimilating hamza: مُتَّخِذ (active "taking"), مُتَّخَذ (passive "taken")
-- sound with total assimilation (to ḏāl, producing dāl): مُدَّخِر (active "reserving"), مُدَّخَر (passive "reserved")
-- sound with total assimilation (to ḏāl): مُذَّكِر (active "remembering"), مُذَّكَر (passive "remembered")
-- sound with total assimilation (to ṭāʔ): مُطَّرِح (active "discarding"), مُطَّرَح (passive "discarded")
-- sound with total assimilation (to ẓāʔ): مُظَّلِم (active "tolerating"), مُظَّلَم (passive "tolerated")
-- final-weak with total assimilation, assimilating wāw: مُتَّقٍ (active "guarding against"), مُتَّقًى (passive "guarded against")
-- final-weak with total assimilation (to ṯāʔ): مُثَّنٍ (active "undulating"), مُثَّنًى (passive "undulated")
-- final-weak with total assimilation (to dāl): مُدَّعٍ (active "claiming"), مُدَّعًى (passive "claimed")
-- sound with partial assimilation (to zayn): مُزْدَهِر (active "thriving"), مُزْدَهَر (passive "thrived")
-- sound with medial wāw with partial assimilation (to zayn): مُزْدَوِج (active "appearing twice")
-- sound with partial assimilation (to ṣād): مُصْطَبِح (active "illuminating"), مُصْطَبَح (passive, "illuminated")
-- sound with partial assimilation (to ḍād): مُضْطَرِب (active "to be disturbed"; no passive)
-- geminate with partial assimilation (to ṣād): مُصْطَبّ (both active "effusing" and passive "effused")
-- geminate with partial assimilation (to ḍād): مُضْطَرّ (both active "forcing" and passive "forced")
-- final-weak with partial assimilation (to ṣād): مُصْطَلٍ (active "warming"), مُصْطَلًى (passive "warmed")
-- hollow with partial assimilation (to zayn): مُزْدَاد (both active "increasing" and passive "increased")
-- hollow with partial assimilation (to ṣad): مُصْطَاد (both active "hunting" and passive "hunted")
local sound_prefix, sufind
if vform == "VII" then
check(2, N)
sound_prefix = MU .. N .. SK .. c(3)
sufind = 4
else
local c2 = c(2)
if c2 == T or c2 == "د" or c2 == "ث" or c2 == "ذ" or c2 == "ط" or c2 == "ظ" then
-- full assimilation
sound_prefix = MU .. c2 .. SH
sufind = 3
else
-- partial or no assimilation
if c2 == "ز" then
check(3, "د")
elseif c2 == "ص" or c2 == "ض" then
check(3, "ط")
else
check(3, T)
end
sound_prefix = MU .. c2 .. SK .. c(3)
sufind = 4
end
end
if c(sufind) == ALIF then
-- hollow, active or passive
check_len(sufind + 1, sufind + 1)
check_weakness({"hollow"}, "allow missing")
vocalized = sound_prefix .. AA .. c(sufind + 1)
elseif len == sufind then
-- active final-weak or active or passive geminate
if is_active then
check_weakness({"geminate", "final-weak", "assimilated+final-weak"})
if weakness == "geminate" then
vocalized = sound_prefix .. A .. c(len) .. SH
else
vocalized = sound_prefix .. A .. c(len) .. IN
end
else
check_weakness({"geminate"}, "allow missing")
vocalized = sound_prefix .. A .. c(len) .. SH
end
else
sound_prefix = sound_prefix .. A .. c(sufind)
handle_possibly_final_weak(sound_prefix, sufind + 1)
end
elseif vform == "IX" then
check_len(4, 4)
vocalized = MU .. c(2) .. SK .. c(3) .. A .. c(4) .. SH
elseif vform == "IVq" then
-- e.g. [[اذلعب]] "to scamper away", مُذْلَعِبّ (active), مُذْلَعَبّ (passive);
-- [[اطمأن]] "to remain quietly; to be certain", مُطْمَئِنّ (active), مُطْمَأَنّ (passive)
check_len(5, 5)
local sound_prefix = MU .. c(2) .. SK .. c(3) .. A .. c(4)
if is_active then
vocalized = sound_prefix .. I .. c(5) .. SH
else
vocalized = sound_prefix .. A .. c(5) .. SH
end
elseif vform == "XI" then
check_len(5, 5)
check(4, ALIF)
vocalized = MU .. c(2) .. SK .. c(3) .. AA .. c(5) .. SH
-- e.g. [[احمار]] "to turn red, to blush", مُحْمَارّ (active)
elseif vform == "XIV" or vform == "XV" then
-- FIXME: Implement. No examples in Wiktionary currently; need to look up in a grammar.
error("Support for verb form " .. vform .. " not implemented yet")
else
error("Don't recognize verb form " .. vform)
end
vocalized = rsub(vocalized, HAMZA .. AA, AMAD)
local reconstructed_headword = lang:makeEntryName(vocalized)
if reconstructed_headword ~= orig_headword then
error(("Internal error: Vocalized participle %s doesn't match original participle %s"):format(
vocalized, orig_headword))
end
-- Apply NFC-style normalization to match MediaWiki's automatic normalization
return apply_nfc_shadda(vocalized)
end
function export.infer_participle_vocalization_json(frame)
local iparams = {
[1] = {required = true},
[2] = {required = true},
["weakness"] = {},
["passive"] = {type = "boolean"}
}
local iargs = require("Module:parameters").process(frame.args, iparams)
return export.infer_participle_vocalization(iargs[1], iargs[2], iargs.weakness, not iargs.passive)
end
return export
p2bbm2w15bafifwqw78crc35w81duu8
1159136
1159133
2026-09-11T08:33:42Z
ForzaGreen
28665
corpus 462 paradigms / 15549 cells: خلايا اِظَّنَّ، وإدغام عَيَّ في وحدة ar-verb
1159136
Scribunto
text/plain
local export = {}
--[=[
This module implements {{ar-conj}} and provides the underlying conjugation functions for {{ar-verb}}
(whose actual formatting is done in [[Module:ar-headword]]).
Author: User:Benwing, from an early version (2013-2014) by User:Atitarev, User:ZxxZxxZ.
]=]
--[=[
TERMINOLOGY:
-- "slot" = A particular combination of tense/mood/person/number/etc.
Example slot names for verbs are "past_1s" (past tense first-person singular), "juss_pass_3fp" (non-past jussive
passive third-person feminine plural) "ap" (active participle). Each slot is filled with zero or more forms.
-- "form" = The conjugated Arabic form representing the value of a given slot.
-- "lemma" = The dictionary form of a given Arabic term. For Arabic, normally the third person masculine singular past,
although other forms may be used if this form is missing (e.g. in passive-only verbs or verbs lacking the past).
]=]
--[=[
FIXME:
1. ~~Finish unimplemented conjugation types. Only IX-final-weak left~~ (extremely rare, possibly only one verb اِعْمَايَ
(according to Haywood and Nahmad p. 244, who are very specific about the irregular occurrence of alif + yā instead
of expected اِعْمَيَّ with doubled yā). Not in Hans Wehr. NOTE: Not true about this, cf. form IX اِرْعَوَى "to desist,
to repent, to see the light". Also note form XII اِخْضَوْضَرَ = form IX اِخْضَرَّ "to be or become green".
[DONE. IX-final-weak is implemented and asserted: اِرْعَوَى is fixture 019_277, conjugated in full and green. The
اِعْمَايَ exception is not a gap either -- الدحداح prints the verb as اِعْمَايَّ with the doubled yā (نموذج 297،
ص383, fixture 457_297, which the module builds) and names اِعْمَايَ only in the page's note, explicitly as
شذوذ: «ويجوزُ اِعْمَايَ حيثُ حُذِفَتْ إِحْدَى اليَائَيْنِ شُذوذًا للتَّخْفِيفِ». A form the source marks anomalous and
does not print in its own table is one the module is right not to derive.]
2. Implement irregular verbs as special cases and recognize them, e.g.
-- laysa "to not be"; only exists in the past tense, no non-past, no imperative, no participles, no passive, no
verbal noun. Irregular alternation las-/lays-. [IMPLEMENTABLE USING OVERRIDES]
-- istaḥā yastaḥī "be ashamed of" -- this is complex according to Hans Wehr because there are two verbs, regular
istaḥyā yastaḥyī "to spare (someone)'s life" and irregular istaḥyā yastaḥyī "to be ashamed to face (someone)",
which is irregular because it has the alternate irregular form istaḥā yastaḥī which only applies to this meaning.
Currently we follow Haywood and Nahmad in saying that both varieties can be spelled istaḥyā/istaḥā/istaḥḥā, but we
should instead use a variant= param similar to حَيَّ to distinguish the two possibilities, and maybe not include
istaḥḥā.
-- ~~ʿayya/ʿayiya yaʿayyu/yaʿyā "to not find the right way, be incapable of, stammer, falter, fall ill".~~
[DONE] The questions this asked -- do the consonant-ending parts of the past follow the final-weak paradigm,
is the non-past the same, can the non-past be conjugated either way -- are answered by a printed paradigm:
أنطوان الدحداح، معجم تصريف الأفعال العربية، نموذج 159 (ص233), which is fixture 238_159. The answer is that the
past's consonant-suffixed cells are final-weak throughout (عَيِيتُ، عَيِينَ), the non-past is final-weak only and
never geminate (يَعْيَا، يَعْيَوْنَ، اِعْيَ), and the gemination appears only where the past takes a vowel suffix,
as an alternant: عَيَّ beside عَيِيَ, which that page's note calls the commoner («ويجوزُ الإدْغامُ فيُقالُ عَيَّ
وهوَ الأكثرُ»). That is exactly the حيي paradigm, so this verb is handled by the same one -- see
hayy_radicals().
-- اِنْمَحَى inmaḥā or يمَّحَى immaḥā "to be effaced, obliterated; to disappear, vanish" has irregular assimilation of inm-
to imm- as an alternative. inmalasa "to become smooth; to glide; to slip away; to escape" also has immalasa as an
alternative. The only other form VII verbs in Hans Wehr beginning with -m- are inmalaḵa "to be pulled out, torn
out, wrenched" and inmāʿa "to be melted, to melt, to dissolve", which are not listed with imm- alternatives, but
might have them; if so, we should handle this generally. [DONE]
-- يَرَعَ yaraʕa yariʕu "to be a coward, to be chickenhearted" as an alternative form of يَرِعَ yariʕa yayraʕu (as given in
Wehr). [IMPLEMENTABLE USING OVERRIDES]
3. Implement individual override parameters for each paradigm part. See Module:fro-verb for an example of how to do this
generally. Note that {{temp|ar-conj-I}} and other of the older templates already had such individual override params.
[DONE]
Irregular verbs already implemented:
-- [ḥayya/ḥayiya yaḥyā "live" -- behaves like a normal final-weak verb
(e.g. past first singular ḥayītu) except in the past-tense parts with
vowel-initial endings (all the third person except for the third feminine
plural). The normal singular and dual endings have -yiya- in them, which
compresses to -yya-, with the normal endings the less preferred ones.
In masculine third plural, expected ḥayū is replaced by ḥayyū by
analogy to the -yy- parts, and the regular form is not given as an
alternant in John Mace. Barron's 201 verbs appears to have the regular
ḥayū as the part, however. Note also that final -yā appears with tall
alif. This appears to be a spelling convention of Arabic, also applying
in ḥayyā (form II, "to keep (someone) alive") and 'aḥyā (form IV,
"to animate, revive, give birth to, give new life to").] -- implemented
-- [ittaxadha yattaxidhu "take"] -- implemented
-- [sa'ala yas'alu "ask" with alternative jussive/imperative yasal/sal] -- implemented
-- [ra'ā yarā "see"] -- implemented
-- ['arā yurī "show"] -- implemented
-- ['akala ya'kulu "eat" with imperative kul] -- implemented
-- ['axadha ya'xudhu "take" with imperative xudh] -- implemented
-- ['amara ya'muru "order" with imperative mur] -- implemented
--]=]
-- if true, always maintain manual translit during processing, and compare against full translit at the end
local debug_translit = false
local lang = require("Module:languages").getByCode("ar")
local m_links = require("Module:links")
local m_string_utilities = require("Module:string utilities")
local m_table = require("Module:table")
local ar_utilities = require("Module:ar-utilities")
local iut = require("Module:inflection utilities")
local put = require("Module:parse utilities")
local list_to_text = mw.text.listToText
local rfind = m_string_utilities.find
local rsubn = m_string_utilities.gsub
local rmatch = m_string_utilities.match
local rsplit = m_string_utilities.split
local usub = m_string_utilities.sub
local ulen = m_string_utilities.len
local u = m_string_utilities.char
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local dump = mw.dumpObject
-- Within this module, conjugations are the functions that do the actual
-- conjugating by creating the parts of a basic verb.
-- They are defined further down.
local conjugations = {}
-- hamza variants
local HAMZA = u(0x0621) -- hamza on the line (stand-alone hamza) = ء
local HAMZA_ON_ALIF = u(0x0623)
local HAMZA_ON_W = u(0x0624)
local HAMZA_UNDER_ALIF = u(0x0625)
local HAMZA_ON_Y = u(0x0626)
local HAMZA_ANY = "[" .. HAMZA .. HAMZA_ON_ALIF .. HAMZA_UNDER_ALIF .. HAMZA_ON_W .. HAMZA_ON_Y .. "]"
local HAMZA_PH = u(0xFFF0) -- hamza placeholder
local BAD = u(0xFFF1)
local BORDER = u(0xFFF2)
local KEEP_W_PH = u(0xFFF3) -- retained-wāw placeholder; see postprocess_term()
local KEEP_HAMZA_PH = u(0xFFF4) -- quiescent-hamza placeholder; see postprocess_term()
local WAW_SEAT_PH = u(0xFFF5) -- pre-seated hamza-on-wāw placeholder; see postprocess_term()
local NO_MADDA_PH = u(0xFFF6) -- hamza held back from the madda rule; see postprocess_term()
-- diacritics
local A = u(0x064E) -- fatḥa
local AN = u(0x064B) -- fatḥatān (fatḥa tanwīn)
local U = u(0x064F) -- ḍamma
local UN = u(0x064C) -- ḍammatān (ḍamma tanwīn)
local I = u(0x0650) -- kasra
local IN = u(0x064D) -- kasratān (kasra tanwīn)
local SK = u(0x0652) -- sukūn = no vowel
local SH = u(0x0651) -- šadda = gemination of consonants
local DAGGER_ALIF = u(0x0670)
local DIACRITIC_ANY_BUT_SH = "[" .. A .. I .. U .. AN .. IN .. UN .. SK .. DAGGER_ALIF .. "]"
-- Pattern matching short vowels
local AIU = "[" .. A .. I .. U .. "]"
-- Pattern matching short vowels or sukūn
local AIUSK = "[" .. A .. I .. U .. SK .. "]"
-- Pattern matching any diacritics that may be on a consonant
local DIACRITIC = SH .. "?" .. DIACRITIC_ANY_BUT_SH
-- translit_patterns
local vowels = "aeiouāēīōū"
local NV = "[^" .. vowels .. "]"
local dia = {a = A, i = I, u = U}
local undia = {[A] = "a", [I] = "i", [U] = "u", ["-"] = "-"}
-- various letters and signs
local ALIF = u(0x0627) -- ʾalif = ا
local AMAQ = u(0x0649) -- ʾalif maqṣūra = ى
local AMAD = u(0x0622) -- ʾalif madda = آ
local TAM = u(0x0629) -- tāʾ marbūṭa = ة
local T = u(0x062A) -- tāʾ = ت
local HYPHEN = u(0x0640)
local N = u(0x0646) -- nūn = ن
local W = u(0x0648) -- wāw = و
local Y = u(0x064A) -- yāʾ = ي
local S = "س"
local M = "م"
local LRM = u(0x200e) -- left-to-right mark
-- common combinations
local AH = A .. TAM
local AT = A .. T
local AA = A .. ALIF
local AAMAQ = A .. AMAQ
local AAH = AA .. TAM
local AAT = AA .. T
local II = I .. Y
local UU = U .. W
local AY = A .. Y
local AW = A .. W
local AYSK = AY .. SK
local AWSK = AW .. SK
local NA = N .. A
local NI = N .. I
local AAN = AA .. N
local AANI = AA .. NI
local AYNI = AYSK .. NI
local AWNA = AWSK .. NA
local AYNA = AYSK .. NA
local AYAAT = AY .. AAT
local UNU = "[" .. UN .. U .. "]"
local MA = M .. A
local MU = M .. U
local TA = T .. A
local TU = T .. U
local _I = ALIF .. I
local _U = ALIF .. U
--W: Morphological pattern (الوزن الصرفي) to verb form mapping
local MORPHOLOGICAL_PATTERN_TO_FORM = {
["فعَل يفعُل"] = "I/a~u",
["فعَل يفعِل"] = "I/a~i",
["فعَل يفعَل"] = "I/a~a",
["فعُل يفعُل"] = "I/u~u",
["فعِل يفعَل"] = "I/i~a",
["فعِل يفعِل"] = "I/i~i",
["فعّل"] = "II",
["فاعل"] = "III",
["أفعل"] = "IV",
["تفعّل"] = "V",
["تفاعل"] = "VI",
["انفعل"] = "VII",
["افتعل"] = "VIII",
["افعلّ"] = "IX",
["استفعل"] = "X",
["افعالّ"] = "XI",
["افعوعل"] = "XII",
["افعوّل"] = "XIII",
["فعلل"] = "Iq",
["تفعلل"] = "IIq",
["افعنلل"] = "IIIq", -- "XIV" should not be used
["افعللّ"] = "IVq",
}
--W: Create reverse mapping from form to morphological pattern
local FORM_TO_MORPHOLOGICAL_PATTERN = {}
for pattern, form in pairs(MORPHOLOGICAL_PATTERN_TO_FORM) do
FORM_TO_MORPHOLOGICAL_PATTERN[form] = pattern
end
--W:
local MORPHOLOGICAL_PATTERN_TO_BASIC_DERIV = {
["فعَل يفعُل"] = "مُجرَّد",
["فعَل يفعِل"] = "مُجرَّد",
["فعَل يفعَل"] = "مُجرَّد",
["فعُل يفعُل"] = "مُجرَّد",
["فعِل يفعَل"] = "مُجرَّد",
["فعِل يفعِل"] = "مُجرَّد",
["فعّل"] = "مزيد بحرف",
["فاعل"] = "مزيد بحرف",
["أفعل"] = "مزيد بحرف",
["تفعّل"] = "مزيد بحرفين",
["تفاعل"] = "مزيد بحرفين",
["انفعل"] = "مزيد بحرفين",
["افتعل"] = "مزيد بحرفين",
["افعلّ"] = "مزيد بحرفين",
["استفعل"] = "مزيد بثلاثة أحرف",
["افعالّ"] = "مزيد بثلاثة أحرف",
["افعوعل"] = "مزيد بثلاثة أحرف",
["افعوّل"] = "مزيد بثلاثة أحرف",
["فعلل"] = "مُجرَّد",
["تفعلل"] = "مزيد بحرف",
["افعنلل"] = "مزيد بحرفين",
["افعللّ"] = "مزيد بحرفين",
}
local translit_cache = {
-- hamza variants
[HAMZA] = "ʔ",
[HAMZA_ON_ALIF] = "ʔ",
[HAMZA_ON_W] = "ʔ",
[HAMZA_UNDER_ALIF] = "ʔ",
[HAMZA_ON_Y] = "ʔ",
[HAMZA_PH] = "ʔ",
-- diacritics
[A] = "a",
[AN] = "an",
[U] = "u",
[UN] = "un",
[I] = "i",
[IN] = "in",
[SK] = "",
[SH] = "*", -- handled specially
[DAGGER_ALIF] = "ā",
-- various letters and signs
[""] = "",
[ALIF] = BAD, -- we should never be transliterating ALIF by itself, as its translit in isolation is ambiguous
[AMAQ] = BAD,
[AMAD] = "ʔā",
[TAM] = "",
[T] = "t",
[N] = "n",
[W] = "w",
[Y] = "y",
[S] = "s",
[M] = "m",
[LRM] = "",
-- common combinations
[AH] = "a",
[AT] = "at",
[AA] = "ā",
[AAMAQ] = "ā",
[AAH] = "āh",
[AAT] = "āt",
[II] = "ī",
[UU] = "ū",
[AY] = "ay",
[AW] = "aw",
[AYSK] = "ay",
[AWSK] = "aw",
[NA] = "na",
[NI] = "ni",
[AAN] = "ān",
[AANI] = "āni",
[AYNI] = "ayni",
[AWNA] = "awna",
[AYNA] = "ayna",
[AYAAT] = "ayāt",
[MA] = "ma",
[MU] = "mu",
[TA] = "ta",
[TU] = "tu",
[_I] = "i",
[_U] = "u",
}
local function transliterate(text)
local cached = translit_cache[text]
if cached then
if cached == BAD then
error(("Internal error: Unable to transliterate %s because explicitly marked as BAD"):format(text))
end
return cached
end
local tr = (lang:transliterate(text))
if not tr then
error(("Internal error: Unable to transliterate: %s"):format(text))
end
translit_cache[text] = tr
return tr
end
local all_person_number_list = {
"1s",
"2ms",
"2fs",
"3ms",
"3fs",
"2d",
"3md",
"3fd",
"1p",
"2mp",
"2fp",
"3mp",
"3fp"
}
local function make_person_number_slot_accel_list(list)
local slot_accel_list = {}
return slot_accel_list
end
local imp_person_number_list = {}
for _, pn in ipairs(all_person_number_list) do
if pn:find("^2") then
table.insert(imp_person_number_list, pn)
end
end
local passive_types = m_table.listToSet {
"pass", -- verb has both active and passive
"ipass", -- verb is active with impersonal passive
"nopass", -- verb is active-only
"onlypass", -- verb is passive-only
"onlypass-impers", -- verb itself is impersonal, meaning passive-only with impersonal passive
}
local indicator_flags = m_table.listToSet {
"nopast", "no_nonpast", "noimp",
"nocat", -- don't categorize or include annotations about this; useful in suppletive parts of verbs
"reduced", -- verb has assimilation/reduction of initial coronals
"altgem", -- form X with alternative past geminate forms with final-weak endings
}
export.potential_lemma_slots = {"past_3ms", "past_pass_3ms", "ind_3ms", "ind_pass_3ms", "imp_2ms"}
export.unsettable_slots = {}
for _, potential_lemma_slot in ipairs(export.potential_lemma_slots) do
table.insert(export.unsettable_slots, potential_lemma_slot .. "_linked")
end
-- We don't set the active participle directly for form I because we don't want stative verbs (with past vowel i or u)
-- to default to فَاعِل. Instead we set the special slot 'ap1' and later copy it to 'ap' for non-stative verbs. The user
-- meanwhile can explicitly request the فَاعِل form for active participles for stative verbs using `ap:+`.
table.insert(export.unsettable_slots, "ap1") -- primary default فَاعِل for form I active participles
table.insert(export.unsettable_slots, "ap2") -- secondary default فَعِيل for form I active participles (stative I)
table.insert(export.unsettable_slots, "ap3") -- secondary default فَعِل for form I active participles (stative II)
table.insert(export.unsettable_slots, "apcd") -- secondary default أَفْعَل for form I active participles (color/defect)
table.insert(export.unsettable_slots, "apan") -- secondary default فَعْلَان for form I active participles (in -ān)
table.insert(export.unsettable_slots, "pp2") -- secondary default فَعِيل for form I passive participles (same as ap2)
table.insert(export.unsettable_slots, "vn2") -- secondary default فِعَال for form III verbal nouns
export.unsettable_slots_set = m_table.listToSet(export.unsettable_slots)
local default_indicator_to_active_participle_slot = {
["+"] = "ap1",
["++"] = "ap2",
["+++"] = "ap3",
["+cd"] = "apcd",
["+an"] = "apan",
}
local slots_that_may_be_uncertain = {
vn = "verbal noun",
ap = "active participle",
}
-- Initialize all the slots for which we generate forms.
local function add_slots(alternant_multiword_spec)
alternant_multiword_spec.verb_slots = {
{"ap", "act|part"},
{"pp", "pass|part"},
{"vn", "vnoun"},
}
for _, unsettable_slot in ipairs(export.unsettable_slots) do
table.insert(alternant_multiword_spec.verb_slots, {unsettable_slot, "-"})
end
-- Add entries for a slot with person/number variants.
-- `slot_prefix` is the prefix of the slot, typically specifying the tense/aspect.
-- `tag_suffix` is a string listing the set of inflection tags to add after the person/number tags.
-- `person_number_list` is a list of the person/number slot suffixes to add to `slot_prefix`.
local function add_personal_slot(slot_prefix, tag_suffix, person_number_list)
for _, persnum in ipairs(person_number_list) do
local slot = slot_prefix .. "_" .. persnum
local accel = persnum:gsub("(.)", "%1|") .. tag_suffix
table.insert(alternant_multiword_spec.verb_slots, {slot, accel})
end
end
local tenses = {
{"past", "past|%s"},
{"ind", "non-past|%s|ind"},
{"sub", "non-past|%s|sub"},
{"juss", "non-past|%s|juss"},
}
for _, slot_accel in ipairs(tenses) do
local slot, accel = unpack(slot_accel)
for _, voice in ipairs {"act", "pass"} do
add_personal_slot(voice == "act" and slot or slot .. "_pass", accel:format(voice),
all_person_number_list)
end
end
add_personal_slot("imp", "imp", imp_person_number_list)
alternant_multiword_spec.verb_slots_map = {}
for _, slot_accel in ipairs(alternant_multiword_spec.verb_slots) do
local slot, accel = unpack(slot_accel)
alternant_multiword_spec.verb_slots_map[slot] = accel
end
end
local overridable_stems = {}
local slot_override_param_mods = {
footnote = {
item_dest = "footnotes",
store = "insert",
},
alt = {},
t = {
-- [[Module:links]] expects the gloss in "gloss".
item_dest = "gloss",
},
gloss = {},
g = {
-- [[Module:links]] expects the genders in "g". `sublist = true` automatically splits on comma (optionally
-- with surrounding whitespace).
item_dest = "genders",
sublist = true,
},
pos = {},
lit = {},
id = {},
--W: The q/qq/l/ll (qualifier and label) modifiers were removed: rendering them
-- needs [[Module:pron qualifier]], which does not exist on ar.wiktionary, so any
-- use of them raised a script error. Accepting them here again requires importing
-- that module first and restoring the block in generate_link() below.
}
local function generate_obj(formval, parse_err, prefix, is_slot_override)
local val, uncertain = formval:match("^(.*)(%?)$")
val = val or formval
uncertain = not not uncertain
local ar, translit = val:match("^(.*)//(.*)$")
if not ar then
ar = val
end
if ar == "" then
if uncertain then
ar = "?"
else
error(("Can't specify blank value for override for %s override '%s'"):format(
is_slot_override and "slot" or "stem", prefix))
end
end
return {form = ar, translit = translit, uncertain = uncertain}
end
local function parse_inline_modifiers(comma_separated_group, parse_err, prefix, is_slot_override)
local function this_generate_obj(formval, parse_err)
return generate_obj(formval, parse_err, prefix, is_slot_override)
end
return put.parse_inline_modifiers_from_segments {
group = comma_separated_group,
props = {
param_mods = slot_override_param_mods,
parse_err = parse_err,
generate_obj = this_generate_obj,
pre_normalize_modifiers = function(data)
local modtext = data.modtext
modtext = modtext:match("^(%[.*%])$")
if modtext then
return ("<footnote:%s>"):format(modtext)
end
return data.modtext
end,
},
}
end
local function allow_multiple_values_for_override(comma_separated_groups, data, is_slot_override)
local retvals = {}
for _, comma_separated_group in ipairs(comma_separated_groups) do
local retval
if is_slot_override then
--W: pass `prefix` and `is_slot_override` through; without them the error
-- raised for a blank override value formatted a nil prefix, which is a
-- crash on Lua 5.1 rather than the intended message. Reachable from e.g.
-- <I/a~u.vn:[[كتابة]]>, where the [[...]] is consumed as a footnote and
-- leaves the value empty.
retval = parse_inline_modifiers(comma_separated_group, data.parse_err, data.prefix,
is_slot_override)
else
retval = generate_obj(comma_separated_group[1], data.parse_err, data.prefix, is_slot_override)
retval.footnotes = data.fetch_footnotes(comma_separated_group)
end
table.insert(retvals, retval)
end
for _, form in ipairs(retvals) do
if form.form == "+" or default_indicator_to_active_participle_slot[form.form] then
if form.form ~= "+" and default_indicator_to_active_participle_slot[form.form] and not is_slot_override then
error(("Stem override '%s' cannot use %s to request a secondary default"):format(
data.prefix, form.form))
end
data.base.slot_override_uses_default[data.prefix] = true
end
end
for _, form in ipairs(retvals) do
if form.form == "-" then
data.base.slot_explicitly_missing[data.prefix] = true
break
end
end
if data.base.slot_explicitly_missing[data.prefix] then
for _, form in ipairs(retvals) do
if form.form ~= "-" then
data.parse_err(("For slot or stem '%s', saw both - and a value other than -, which isn't allowed"):
format(data.prefix))
end
end
return nil
end
return retvals
end
local function simple_choice(choices)
return function(separated_groups, data)
if #separated_groups > 1 then
data.parse_err("For spec '" .. data.prefix .. ":', only one value currently allowed")
end
if #separated_groups[1] > 1 then
data.parse_err("For spec '" .. data.prefix .. ":', no footnotes currently allowed")
end
local choice = separated_groups[1][1]
if not m_table.contains(choices, choice) then
data.parse_err("For spec '" .. data.prefix .. ":', saw value '" .. choice .. "' but expected one of '" ..
table.concat(choices, "،") .. "'")
end
return choice
end
end
for _, overridable_stem in ipairs {
"past",
"past_v",
"past_c",
"past_pass",
"past_pass_v",
"past_pass_c",
"nonpast",
"nonpast_v",
"nonpast_c",
"nonpast_pass",
"nonpast_pass_v",
"nonpast_pass_c",
"imp",
"imp_v",
"imp_c",
} do
overridable_stems[overridable_stem] = allow_multiple_values_for_override
end
overridable_stems.past_final_weak_vowel = simple_choice { "ay", "aw", "ī", "ū" }
overridable_stems.past_pass_final_weak_vowel = simple_choice { "ay", "aw", "ī", "ū" }
overridable_stems.nonpast_final_weak_vowel = simple_choice { "ā", "ī", "ū" }
overridable_stems.nonpast_pass_final_weak_vowel = simple_choice { "ā", "ī", "ū" }
-------------------------------------------------------------------------------
-- Utility functions --
-------------------------------------------------------------------------------
-- version of rsubn() that discards all but the first return value
local function rsub(term, foo, bar)
return (rsubn(term, foo, bar))
end
-- version of rsubn() that returns a 2nd argument boolean indicating whether a substitution was made.
local function rsubb(term, foo, bar)
local retval, nsubs = rsubn(term, foo, bar)
return retval, nsubs > 0
end
-- Concatenate one or more strings or form objects.
local function q(...)
local not_all_strings = debug_translit
local has_manual_translit = debug_translit
for i = 1, select("#", ...) do
local argt = select(i, ...)
if not argt then
error(("Internal error: Saw nil at index %s: %s"):format(i, dump({...})))
end
if type(argt) ~= "string" then
not_all_strings = true
if argt.translit then
has_manual_translit = true
break
end
end
end
if not not_all_strings then
-- just strings, concatenate directly
return table.concat({...})
end
local formvals = {}
local translit = has_manual_translit and {} or nil
local footnotes
for i = 1, select("#", ...) do
local argt = select(i, ...)
if type(argt) == "string" then
formvals[i] = argt
if has_manual_translit then
translit[i] = transliterate(argt)
end
else
formvals[i] = argt.form
if has_manual_translit then
translit[i] = argt.translit or transliterate(argt.form)
end
footnotes = iut.combine_footnotes(footnotes, argt.footnotes)
end
end
-- FIXME: Do we want to support other properties?
return {
form = table.concat(formvals),
translit = has_manual_translit and table.concat(translit) or nil,
footnotes = footnotes,
}
end
-- Return the formval associated with `rad` (a radical or past/non-past vowel, either a string or form object).
local function rget(rad)
if type(rad) == "string" then
return rad
elseif type(rad) == "table" then
return rad.form
else
error(("Internal error: Unexpected type for radical or past/non-past vowel: %s"):format(dump(rad)))
end
end
export.rget = rget -- for use in [[Module:ar-headword]]
-- Return the footnotes associated with `rad` (a radical or past/non-past vowel, either a string or form object).
local function rget_footnotes(rad)
if type(rad) == "string" then
return nil
elseif type(rad) == "table" then
return rad.footnotes
else
error(("Internal error: Unexpected type for radical or past/non-past vowel: %s"):format(dump(rad)))
end
end
-- Return true if the formval associated with `rad` (a radical or past/non-past vowel, either a string or form object)
-- is `val`.
local function req(rad, val)
return rget(rad) == val
end
-- True if a form-I verb whose first radical is wāw elides that wāw in the non-past (يَعِدُ for
-- *يَوْعِدُ) rather than keeping it (يَوْجَلُ). The elision belongs to the kasra non-past -- a~i
-- وَعَدَ يَعِدُ, i~i وَرِثَ يَرِثُ -- and to the fatḥa non-past that is a throat-letter lowering of
-- that same underlying kasra: a~a وَضَعَ يَضَعُ, وَهَبَ يَهَبُ. Everywhere else the wāw stays:
-- i~a وَجِلَ يَوْجَلُ، وَنِيَ يَوْنَى (a fatḥa non-past that is the regular partner of a kasra past,
-- not a lowered kasra)
-- *~u وَجَلَ يَوْجُلُ، وَجُهَ يَوْجُهُ (a ḍamma non-past is never a lowered kasra)
-- The two elided-anyway lexemes with a kasra past (وَسِعَ يَسَعُ, وَطِئَ يَطَأُ) are lexical and are
-- what the explicit `I-assimilated` weakness exists to express -- see the comment on it in
-- detect_indicator_spec().
--
-- The u-non-past half of this is attested directly: أنطوان الدحداح، معجم تصريف الأفعال العربية
-- prints يَوْجُلُ/اُوْجُلْ for وَجَلَ (ص136) and says so in the page's own note -- "لا تُحذَفُ واوُ
-- الفعلِ في المُضارعِ ولا تُقلَبُ في الأمرِ" -- and يَوْنَى/اِوْنَ for وَنِيَ (ص230).
--
-- Returns true when the vowels aren't known, which keeps the historical default for callers
-- that have radicals but no vowel pattern.
--W: Lexical exceptions to the rule below, keyed root..":"..past..nonpast so that a
-- listed verb is listed for the measure its source attests and no other. Both
-- directions occur and the vowels do not predict either:
--
-- وَطِئَ ـَ the i~a pattern normally keeps the wāw (وَجِلَ ـَ / يَوْجَلُ) and this
-- one drops it -- يَطَأُ, طَأْ, printed through both columns of نموذج 155.
-- Upstream's own commentary on this function names the verb: "there are
-- naturally exceptions, e.g. waṭiʔa~yaṭaʔu 'to tread, to trample'".
-- وَبَأَ ـَ the a~a pattern normally drops it (وَضَعَ / يَضَعُ) and this one keeps
-- it -- يَوْبَأُ, يَوْبَآنِ, يَوْبَؤُونَ, إِيبَأْ, printed through نموذج 135.
--
-- Same instrument as GEMINATE_ITBAA_ROOTS and for the same reason: the fact is about
-- the lexeme, so listing it is the only honest way to hold it, and listing keeps every
-- other root of the same shape exactly where it was.
local FORM_I_W_ASSIMILATION = {
["وطء:ia"] = true, -- وَطِئَ ـَ / يَطَأُ / طَأْ: الدحداح، نموذج 155
["وبء:aa"] = false, -- وَبَأَ ـَ / يَوْبَأُ / إِيبَأْ: الدحداح، نموذج 135
}
local function vowel_letter(v)
return req(v, A) and "a" or req(v, I) and "i" or req(v, U) and "u" or "?"
end
local function form_i_w_assimilated(past_vowel, nonpast_vowel, rad1, rad2, rad3)
if not past_vowel or not nonpast_vowel then
return true
end
if rad1 and rad2 and rad3 then
local listed = FORM_I_W_ASSIMILATION[rad1 .. rad2 .. rad3 .. ":" ..
vowel_letter(past_vowel) .. vowel_letter(nonpast_vowel)]
if listed ~= nil then
return listed
end
end
return req(nonpast_vowel, I) or req(nonpast_vowel, A) and req(past_vowel, A)
end
--W: Geminate form-I roots whose degemination vowel follows the مضارع by إتباع.
-- When gemination breaks under a consonant-initial suffix, the vowel that surfaces on the
-- second radical (مَدَدْتَ's second د) is normally the verb's own past vowel, which the وزن
-- fixes at one value per measure: فتح for فعَل يفعُل (مَدَدْتَ، فَرَرْتَ، عَضَضْتَ), كسر for
-- فعِل يفعَل (ظَلِلْتَ). Classical grammar also attests a minority إتباع variant on the
-- فعَل يفعُل measure, where that vowel instead follows the مضارع's own ضمة (هَمُمْتَ). Which
-- of the two a given verb takes is a fact about the lexeme, not about its وزن -- هَمَّ and
-- مَدَّ share the measure and differ here -- so it cannot be derived from جذر + وزن and is
-- listed, the same way SOUND_FORM_I_UU_ROOTS lists هَيُؤَ. Keyed rad1..rad2..rad3 and gated
-- on the a~u pattern, so a listed root still degeminates normally under any other pattern.
local GEMINATE_ITBAA_ROOTS = {
["همم"] = true, -- هَمَّ ـُ: أنطوان الدحداح، معجم تصريف الأفعال العربية، ص192
-- The Template-B page of the same model number, which prints two more of them:
["عشش"] = true, -- عَشَّ ـُ / عَشُشْتُ: الدحداح، نموذج 141
["فكك"] = true, -- فَكَّ ـُ / فَكُكْتُ: الدحداح، نموذج 141
}
-- The vowel that surfaces on the second radical of a geminate form-I verb once gemination
-- breaks. `past_vowel` unless the root is an attested إتباع lexeme; see GEMINATE_ITBAA_ROOTS.
local function geminate_degemination_vowel(rad1, rad2, rad3, past_vowel, nonpast_vowel)
if past_vowel and nonpast_vowel and req(past_vowel, A) and req(nonpast_vowel, U)
and GEMINATE_ITBAA_ROOTS[rad1 .. rad2 .. rad3] then
return nonpast_vowel
end
return past_vowel
end
--W: Form-I final-weak roots that keep rad3 as a consonant in the 2fs non-past and
-- imperative (تَسْهُوِينَ، اُسْهُوِي) instead of contracting it away (تَسْهِينَ، اِسْهِي).
--
-- This was briefly gated on the فعُل يفعُل measure alone, then narrowed to a root table,
-- then widened back to the measure -- and the middle step is why. The argument for the
-- measure was always that the measure is what keeps rad3 consonantal in the first place
-- (its past 3ms is سَهُوَ, not the سَها an a~u root like دَعَا gives), but at the time the
-- corpus held exactly one فعُل يفعُل final-weak page, so there was no second paradigm to
-- check it against and the rule it displaces -- contract before the 2fs -ī, as دَعَا does --
-- was the one the module had applied for years. Generalising an unverified reading over a
-- whole class of live entries is the wrong direction to be wrong in, so it went back to
-- listing سهو alone, keyed and gated exactly like SOUND_FORM_I_UU_ROOTS.
--
-- Checkpoint 4 supplied the second page, and it answers the question. p222 (model 147)
-- prints TWO فعُل يفعُل final-weak paradigms, حَلُوَ and سَرُوَ, and both retain rad3 in both
-- eligible slots: تَحْلُوِينَ / اُحْلُوِي and تَسْرُوِينَ / اُسْرُوِي, the wāw carrying its kasra
-- under it, all four read at 6x off the strip against the same columns' يَحْلُونَ / يَسْرُونَ.
-- Two independent roots, one page, agreeing with سهو on p204 -- and سَرُوَ is precisely the
-- root the narrowing had put back to تَسْرِينَ, so the cautious reading is the one the ink
-- refutes. So the gate is the vowel pattern after all and the table is gone.
local function final_weak_uu_retains_rad3(rad1, rad2, rad3, past_ending_vowel, nonpast_ending_vowel)
return past_ending_vowel == "ū" and nonpast_ending_vowel == "ū"
end
-- Map `vow` (a past/non-past vowel, either a string or form object without translit) by passing the formval through
-- `fn`. Don't call this on radicals because they may have manual translit and it isn't clear how to handle that.
local function map_vowel(vow, fn)
if type(vow) == "string" then
return fn(vow)
elseif type(vow) == "table" then
return {form = fn(vow.form), footnotes = vow.footnotes}
else
error(("Internal error: Unexpected type for past/non-past vowel: %s"):format(dump(vow)))
end
end
local function get_radicals_3(vowel_spec)
return vowel_spec.rad1, vowel_spec.rad2, vowel_spec.rad3, vowel_spec.past, vowel_spec.nonpast
end
local function get_radicals_4(vowel_spec)
return vowel_spec.rad1, vowel_spec.rad2, vowel_spec.rad3, vowel_spec.rad4
end
local function is_final_weak(base, vowel_spec)
return vowel_spec.weakness == "final-weak" or base.form == "XV"
end
--W: Create a simple link
local function link_term_simple(text)
return "[[" .. text .. "]]"
end
local function link_term(text, face, id)
return m_links.full_link({lang = lang, term = text, tr = "-", id = id}, face)
end
local function tag_text(text, tag, class)
return m_links.full_link({lang = lang, alt = text, tr = "-"})
end
local function track(page)
require("Module:debug/track")("ar-verb/" .. page)
return true
end
local function track_if_ar_conj(base, page)
if base.alternant_multiword_spec.source_template == "ar-conj" then
require("Module:debug/track")("ar-verb/" .. page)
end
return true
end
local function reorder_shadda(word)
-- shadda+short-vowel (including tanwīn vowels, i.e. -an -in -un) gets
-- replaced with short-vowel+shadda during NFC normalisation, which
-- MediaWiki does for all Unicode strings; however, it makes various
-- processes inconvenient, so undo it.
word = rsub(word, "(" .. DIACRITIC_ANY_BUT_SH .. ")" .. SH, SH .. "%1")
return word
end
local function apply_nfc_shadda(word)
-- Apply NFC-style normalization: reorder shadda+vowel to vowel+shadda
-- to match MediaWiki's automatic NFC normalization. This reverses the
-- internal shadda+vowel format used during processing.
word = rsub(word, SH .. "(" .. DIACRITIC_ANY_BUT_SH .. ")", "%1" .. SH)
return word
end
-------------------------------------------------------------------------------
-- Basic functions to inflect tenses --
-------------------------------------------------------------------------------
local function skip_slot(base, slot, allow_overrides)
if base.slot_explicitly_missing[slot] then
return true
end
if not allow_overrides and base.slot_overrides[slot] and not base.slot_override_uses_default[slot] then
-- Skip any slots for which there are overrides, except those that request the default value using +, ++, etc.
return true
end
if base.passive == "nopass" and (slot == "pp" or slot:find("_pass")) then
return true
elseif base.passive == "onlypass" and slot ~= "pp" and slot ~= "vn" and not slot:find("_pass") then
return true
elseif base.passive == "ipass" and slot:find("_pass") and not slot:find("3ms") then
return true
elseif base.passive == "onlypass-impers" and slot ~= "pp" and slot ~= "vn" and (not slot:find("_pass") or
slot:find("_pass") and not slot:find("3ms")) then
return true
end
if base.nopast and slot:find("^past_") then
return true
end
if base.noimp and slot:find("^imp_") then
return true
end
if base.no_nonpast and (slot:find("^ind_") or slot:find("^sub_") or slot:find("^juss")) then
return true
end
return false
end
local function basic_combine_stem_ending(stem, ending)
return stem .. ending
end
local function basic_combine_stem_ending_tr(stem, ending)
return stem .. ending
end
-- Concatenate `prefixes`, `stems` and `endings` (any of which may be an abbreviate form list, i.e. strings, form
-- objects or lists of strings or form objects) and store into `slot`. If a user-supplied override exists for the slot,
-- nothing will happen unless `allow_overrides` is provided.
local function add3(base, slot, prefixes, stems, endings, allow_overrides)
if skip_slot(base, slot, allow_overrides) then
return
end
-- Optimization since the prefixes are almost always single strings.
if type(prefixes) == "string" then
local function do_combine_stem_ending(stem, ending)
return prefixes .. stem .. ending
end
local function do_combine_stem_ending_tr(stem, ending)
return transliterate(prefixes) .. stem .. ending
end
iut.add_forms(base.forms, slot, stems, endings, do_combine_stem_ending, transliterate,
do_combine_stem_ending_tr, base.form_footnotes)
else
iut.add_multiple_forms(base.forms, slot, {prefixes, stems, endings}, basic_combine_stem_ending, transliterate,
basic_combine_stem_ending_tr, base.form_footnotes)
end
end
-- Insert one or more forms in `form_or_forms` into `slot`. `form_or_forms` is an abbreviated form list (see comment at
-- top of [[Module:inflection utilities]]). If a user-supplied override exists for the slot, nothing will happen unless
-- `allow_overrides` is provided. BEWARE: One form object should never occur in two different slots, or twice in a given
-- slot; if taking a form object from an existing slot, make sure to shallowCopy() it.
local function insert_form_or_forms(base, slot, form_or_forms, allow_overrides, uncertain)
if not skip_slot(base, slot, allow_overrides) then
-- Some optimizations of the most common case of inserting a single string.
if type(form_or_forms) == "string" and not base.form_footnotes then
form_or_forms = {form = form_or_forms, uncertain = uncertain}
iut.insert_form(base.forms, slot, form_or_forms)
else
local list = iut.convert_to_general_list_form(form_or_forms, base.form_footnotes)
if uncertain then
for _, formobj in ipairs(list) do
formobj.uncertain = true
end
end
iut.insert_forms(base.forms, slot, list)
end
end
end
-- Insert `string_or_form` into both the ap2 and pp2 slots, shallowCopying a form object to make sure no form objects
-- occur in two slots.
local function insert_ap2_pp2(base, string_or_form)
insert_form_or_forms(base, "ap2", string_or_form)
if type(string_or_form) == "table" then
string_or_form = m_table.shallowCopy(string_or_form)
end
insert_form_or_forms(base, "pp2", string_or_form)
end
-- Convert `stemforms` (a string, a form object, or a list of strings and/or form objects) into "general form" (a list
-- of form objects) and map `fn` over the list of objects. `fn` is passed two arguments (form value and translit) and
-- should likewise return the new form value and translit. Footnotes will be preserved. FIXME: Preserve other metadata.
local function map_general(stemforms, fn)
return iut.map_forms(iut.convert_to_general_list_form(stemforms), fn)
end
-- Similar to map_general() except that `fn` should return a single value (one or more strings or form objects), instead
-- of two values (form value and translit), and the resulting value(s) from all calls to `fn` will be flattened to
-- construct the overall return value. Footnotes will be preserved. FIXME: Preserve other metadata.
local function flatmap_general(stemforms, fn)
return iut.flatmap_forms(iut.convert_to_general_list_form(stemforms), fn)
end
-- Given user-supplied stem overrides in `base`, construct any derived stem overrides (e.g. vowel-specific or
-- consonant-specific variants), and truncate initial y-/ي- in any non-past overrides.
local function construct_stems(base)
local stems = base.stem_overrides
stems.past_v = stems.past_v or stems.past
stems.past_c = stems.past_c or stems.past
stems.past_pass_v = stems.past_pass_v or stems.past_pass
stems.past_pass_c = stems.past_pass_c or stems.past_pass
stems.nonpast_v = stems.nonpast_v or stems.nonpast
stems.nonpast_c = stems.nonpast_c or stems.nonpast
stems.nonpast_pass_v = stems.nonpast_pass_v or stems.nonpast_pass
stems.nonpast_pass_c = stems.nonpast_pass_c or stems.nonpast_pass
stems.imp_v = stems.imp_v or stems.imp
stems.imp_c = stems.imp_c or stems.imp
local function truncate_nonpast_initial_cons(stem_type, form, translit)
if form == "+" then
return form, translit
end
if not form:find("^" .. Y) then
error(("Form value %s for stem type '%s' should begin with ي"):format(form, stem_type))
end
form = form:gsub("^" .. Y, "")
if translit then
if not translit:find("^y") then
error(("Translit value %s for stem type '%s' should begin with y"):format(translit, stem_type))
end
translit = translit:gsub("^y", "")
end
return form, translit
end
for _, nonpast_stem_type in ipairs { "nonpast_v", "nonpast_c", "nonpast_pass_v", "nonpast_pass_c" } do
if stems[nonpast_stem_type] then
stems[nonpast_stem_type] = map_general(stems[nonpast_stem_type], function(form, translit)
return truncate_nonpast_initial_cons(nonpast_stem_type, form, translit)
end)
end
end
end
-- Given user-specified overrides for stem `stemname`, return overrides with occurrences of + replaced by
-- `default_stem`. If no overrides, return `default_stem`, or {} if no default.
local function override_stem_if_needed(base, stemname, default_stem)
local overrides = base.stem_overrides[stemname]
if not overrides then
return default_stem or {}
end
return map_general(overrides, function(form, translit)
if form ~= "+" and default_indicator_to_active_participle_slot[form] then
error(("Stem overrides cannot use secondary default indicators but saw %s in stem override '%s'"):format(
form, stemname))
end
if form == "+" then
if translit then
error(("Cannot supply manual translit along with + for stem override '%s'"):format(stemname))
end
if not default_stem then
error(("Cannot use + for stem override '%s' because no default is available"):format(stemname))
end
if type(default_stem) ~= "string" then
error(("Internal error: Default stem for '%s' is not a string: %s"):format(stemname, dump(default_stem)))
end
return default_stem
end
return form, translit
end)
end
-------------------------------------------------------------------------------
-- Properties of different verbal forms --
-------------------------------------------------------------------------------
local allowed_vforms = {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX",
"X", "XI", "XII", "XIII", "XIV", "XV", "Iq", "IIq", "IIIq", "IVq"}
local allowed_vforms_set = m_table.listToSet(allowed_vforms)
local allowed_vforms_with_weakness = m_table.shallowCopy(allowed_vforms)
-- The user needs to be able to explicitly specify that a form-I verb (specifically one whose initial radical is و) is
-- sound. Cf. wajiʕa yawjaʕu (not #yajaʕu) "to ache, to hurt". In general, i~a and u~u verbs whose initial radical is و
-- seem to not assimilate the first radical; cf. وقح "to be shameless", variously waqaḥa~yaqiḥu, waquḥa~yawquḥu and
-- waqiḥa~yawqaḥu, whereas a~i verbs (wafaḍa~yafiḍu "to rush"), i~i verbs (wafiqa~yafiqu "to be proper, to be suitable")
-- and a~a verbs (waḍaʕa~yaḍaʕu "to set down, to place") do assimilate. But there are naturally exceptions, e.g.
-- waṭiʔa~yaṭaʔu "to tread, to trample"; wasiʕa~yasaʕu "to be spacious; to be well-off"; waṯiʔa~yaṯaʔu "to get bruised,
-- to be sprained". Also beware of waniya~yawnā "to be faint; to languish", which is sound in the first radical and
-- final-weak in the last radical. Nonetheless, the regularity of the patterns mentioned above suggest we should provide
-- them as defaults.
-- Note that there are other cases of unexpectedly sound verbs, e.g. izdawaja~yazdawiju "to be in pairs", layisa~yalyasu
-- "to be valiant, to be brave", ʔaḥwaja~yuḥwiju "to need", istahwana~yastahwinu "to consider easy", sawisa~yaswasu "to
-- be or become moth-eaten or worm-eaten" (vs. sāsa~yasūsu "to govern, to rule" from the same radicals), ʕawira~yaʕwaru
-- "to be one-eyed", istajwaba~yastajwibu "to interrogate", etc. But in these cases there is no need for explicit user
-- specification as the lemma itself specifies the unexpected soundness.
for _, form_with_weakness in ipairs { "I-sound", "I-assimilated", "none-sound", "none-hollow", "none-geminate",
"none-final-weak" } do
table.insert(allowed_vforms_with_weakness, form_with_weakness)
end
local allowed_vforms_with_weakness_set = m_table.listToSet(allowed_vforms_with_weakness)
local function vform_supports_final_weak(vform)
return vform ~= "XI" and vform ~= "XV" and vform ~= "IVq"
end
local function vform_supports_geminate(vform)
return vform == "I" or vform == "III" or vform == "IV" or vform == "VI" or vform == "VII" or vform == "VIII" or
vform == "X"
end
local function vform_supports_hollow(vform)
return vform == "I" or vform == "IV" or vform == "VII" or vform == "VIII" or vform == "X"
end
local function vform_probably_impersonal_passive(vform, weakness, past_vowel, nonpast_vowel)
return vform == "I" and req(past_vowel, I) or vform == "V" or vform == "VI" or vform == "X" or vform == "IIq"
end
local function vform_probably_full_passive(vform)
return vform == "II" or vform == "III" or vform == "IV" or vform == "Iq"
end
local function vform_probably_no_passive(vform, weakness, past_vowel, nonpast_vowel)
return vform == "I" and req(past_vowel, U) or vform == "VII" or vform == "IX" or
vform == "XI" or vform == "XII" or vform == "XIII" or vform == "XIV" or vform == "XV" or
vform == "IIIq" or vform == "IVq"
end
-- Active vforms II, III, IV, Iq use non-past prefixes in -u- instead of -a-.
local function prefix_vowel_from_vform(vform)
if vform == "II" or vform == "III" or vform == "IV" or vform == "Iq" then
return "u"
else
return "a"
end
end
-- True if the active non-past takes a-vocalization rather than i-vocalization in its last syllable.
local function vform_nonpast_a_vowel(vform)
return vform == "V" or vform == "VI" or vform == "XV" or vform == "IIq"
end
-- True if the `passive` spec indicates a passive-only verb.
local function is_passive_only(passive)
return passive == "onlypass" or passive == "onlypass-impers"
end
export.is_passive_only = is_passive_only -- for use in [[Module:ar-headword]]
-------------------------------------------------------------------------------
-- Properties of specific sounds --
-------------------------------------------------------------------------------
-- Is radical wāw (و) or yāʾ (ي)?
local function is_waw_ya(rad)
return req(rad, W) or req(rad, Y)
end
-- Check that radical is wāw (و) or yāʾ (ي), error if not
local function check_waw_ya(rad)
if not is_waw_ya(rad) then
error("Expecting weak radical: '" .. rget(rad) .. "' should be " .. W .. " or " .. Y)
end
end
-- Form-I verb whose past may contract by إدغام -- حَيَّ beside حَيِيَ, عَيَّ beside
-- عَيِيَ -- and form-X verb استحيا or استحى.
--
-- rad2 = rad3 = ي is necessary and not sufficient: the alternation is a fact about
-- the lexeme, so the first radical is listed. حيي was the only one, and it was
-- listed twice over -- once here and once as the literal string حَيِي hardcoded into
-- make_form_i_hayy_verb()'s stems, which is why a second root could not reach that
-- paradigm at all. أنطوان الدحداح، معجم تصريف الأفعال العربية states the alternation
-- for both in the same words: حَيِيَ at نموذج 159 (ص231) with «ويجوزُ الإدغامُ
-- فيُقالُ حَيَّ وهوَ الأكثرُ», and عَيِيَ at the same model (ص233) with «ويجوزُ
-- الإدْغامُ فيُقالُ عَيَّ وهوَ الأكثرُ». Both tables print the uncontracted form and
-- both notes call the contracted one commoner, which is why it is offered first.
--
-- VFORM is passed as "I" by the form-I caller only. The form-X alternation
-- اِسْتَحْيَا / اِسْتَحَى is attested for حيي and nothing else -- اِسْتَعْيَا / اِسْتَعَى
-- is not a word -- so عيي is admitted for form I and not for form X. Kept as one
-- function taking a parameter rather than two functions, because create_conjugations()
-- is at Lua 5.1's 60-upvalue ceiling and a new file-level name will not load.
local function hayy_radicals(rad1, rad2, rad3, vform)
if not (req(rad2, Y) and is_waw_ya(rad3)) then
return false
end
return req(rad1, "ح") or vform == "I" and req(rad1, "ع") or false
end
-- FUCK ME HARD. "Lua error at line 1514: main function has more than 200 local variables".
local function create_conjugations()
-------------------------------------------------------------------------------
-- Radicals associated with various irregular verbs --
-------------------------------------------------------------------------------
-- Form-I verb أخذ or form-VIII verb اتخذ
local function axadh_radicals(rad1, rad2, rad3)
return req(rad1, HAMZA) and req(rad2, "خ") and req(rad3, "ذ")
end
-- Form-I verb whose imperative has a reduced form: أكل and أخذ and أمر. Return "shortonly" if only
-- short-form imperatives exist (أكل and أخذ) or "shortlong" if long-form imperatives also exist (أمر);
-- they are used after a clitic like فَ and وَ.
local function reduced_imperative_verb(rad1, rad2, rad3)
return axadh_radicals(rad1, rad2, rad3) and "shortonly" or
req(rad1, HAMZA) and req(rad2, "ك") and req(rad3, "ل") and "shortonly" or
req(rad1, HAMZA) and req(rad2, "م") and req(rad3, "ر") and "shortlong"
end
-- Form-I verb رأى and form-IV verb أرى
local function raa_radicals(rad1, rad2, rad3)
return req(rad1, "ر") and req(rad2, HAMZA) and is_waw_ya(rad3)
end
-- Form-I verb سأل
local function saal_radicals(rad1, rad2, rad3)
return req(rad1, "س") and req(rad2, HAMZA) and req(rad3, "ل")
end
-- Form-I verb كان
local function kaan_radicals(rad1, rad2, rad3)
return req(rad1, "ك") and req(rad2, W) and req(rad3, N)
end
-- Form-I hollow verb سالَ يَسالُ, the hamza-less variant of سَأَلَ. Distinct from
-- saal_radicals() above, which is the hamzated root itself.
local function saal_hollow_radicals(rad1, rad2, rad3)
return req(rad1, "س") and req(rad2, W) and req(rad3, "ل")
end
-------------------------------------------------------------------------------
-- Sets of past endings --
-------------------------------------------------------------------------------
-- The 13 endings of the sound/hollow/geminate past tense.
local past_endings = {
-- singular
SK .. TU, SK .. TA, SK .. "تِ", A, A .. "تْ",
--dual
SK .. "تُمَا", AA, A .. "تَا",
-- plural
SK .. "نَا", SK .. "تُمْ",
-- shadda + vowel diacritic ends up in the wrong order due to Unicode
-- bug, so keep them separate to avoid this
SK .. "تُن" .. SH .. A, UU .. ALIF, SK .. "نَ"
}
-- Make endings for final-weak past in -aytu or -awtu. AYAW is AY or AW as appropriate. Note that AA and AW are
-- global variables.
local function make_past_endings_ay_aw(ayaw, third_sg_masc)
return {
-- singular
ayaw .. SK .. TU, ayaw .. SK .. TA, ayaw .. SK .. "تِ",
third_sg_masc, A .. "تْ",
--dual
ayaw .. SK .. "تُمَا", ayaw .. AA, A .. "تَا",
-- plural
ayaw .. SK .. "نَا", ayaw .. SK .. "تُمْ",
-- shadda + vowel diacritic ends up in the wrong order due to Unicode
-- bug, so keep them separate to avoid this
ayaw .. SK .. "تُن" .. SH .. A, AW .. SK .. ALIF, ayaw .. SK .. "نَ"
}
end
-- past final-weak -aytu endings
local past_endings_ay = make_past_endings_ay_aw(AY, AAMAQ)
-- past final-weak -awtu endings
local past_endings_aw = make_past_endings_ay_aw(AW, AA)
-- used for alternative endings for form-X geminate verbs like اِسْتَمَرَّ
local past_endings_ay_12_person_only = {
-- singular
AY .. SK .. TU, AY .. SK .. TA, AY .. SK .. "تِ",
{}, {},
--dual
AY .. SK .. "تُمَا", {}, {},
-- plural
AY .. SK .. "نَا", AY .. SK .. "تُمْ",
-- shadda + vowel diacritic ends up in the wrong order due to Unicode
-- bug, so keep them separate to avoid this
AY .. SK .. "تُن" .. SH .. A, {}, {},
}
-- Make endings for final-weak past in -ītu or -ūtu. IIUU is ī or ū as appropriate. Note that AA and UU are global
-- variables.
local function make_past_endings_ii_uu(iiuu)
return {
-- singular
iiuu .. TU, iiuu .. TA, iiuu .. "تِ", iiuu .. A, iiuu .. A .. "تْ",
--dual
iiuu .. "تُمَا", iiuu .. AA, iiuu .. A .. "تَا",
-- plural
iiuu .. "نَا", iiuu .. "تُمْ",
-- shadda + vowel diacritic ends up in the wrong order due to Unicode
-- bug, so keep them separate to avoid this
iiuu .. "تُن" .. SH .. A, UU .. ALIF, iiuu .. "نَ"
}
end
-- past final-weak -ītu endings
local past_endings_ii = make_past_endings_ii_uu(II)
-- past final-weak -ūtu endings
local past_endings_uu = make_past_endings_ii_uu(UU)
-------------------------------------------------------------------------------
-- Sets of non-past prefixes and endings --
-------------------------------------------------------------------------------
local nonpast_prefix_consonants = {
-- singular
HAMZA, T, T, Y, T,
-- dual
T, Y, T,
-- plural
N, T, T, Y, Y
}
-- There are only five distinct endings in all non-past verbs. Make any set of non-past endings given these five
-- distinct endings.
local function make_nonpast_endings(null, fem, dual, pl, fempl)
return {
-- singular
null, null, fem, null, null,
-- dual
dual, dual, dual,
-- plural
null, pl, fempl, pl, fempl
}
end
-- endings for non-past indicative
local ind_endings = make_nonpast_endings(
U,
II .. NA,
AANI,
UU .. NA,
SK .. NA
)
-- Make the endings for non-past subjunctive/jussive, given the vowel diacritic used in "null" endings
-- (1s/2ms/3ms/3fs/1p).
local function make_sub_juss_endings(dia_null)
return make_nonpast_endings(
dia_null,
II,
AA,
UU .. ALIF,
SK .. NA
)
end
-- endings for non-past subjunctive
local sub_endings = make_sub_juss_endings(A)
-- endings for non-past jussive
local juss_endings = make_sub_juss_endings(SK)
-- endings for alternative geminate non-past jussive in -a; same as subjunctive
local juss_endings_alt_a = sub_endings
-- endings for alternative geminate non-past jussive in -i
local juss_endings_alt_i = make_sub_juss_endings(I)
-- Endings for final-weak non-past indicative in -ā. Note that AY, AW and AAMAQ are global variables.
local ind_endings_aa = make_nonpast_endings(
AAMAQ,
AYSK .. NA,
AY .. AANI,
AWSK .. NA,
AYSK .. NA
)
-- Make endings for final-weak non-past indicative in -ī or -ū; IIUU is ī or ū as appropriate. Note that II and UU
-- are global variables.
local function make_ind_endings_ii_uu(iiuu)
return make_nonpast_endings(
iiuu,
II .. NA,
iiuu .. AANI,
UU .. NA,
iiuu .. NA
)
end
-- endings for final-weak non-past indicative in -ī
local ind_endings_ii = make_ind_endings_ii_uu(II)
-- endings for final-weak non-past indicative in -ū
local ind_endings_uu = make_ind_endings_ii_uu(UU)
-- Endings for final-weak non-past subjunctive in -ā. Note that AY, AW, ALIF, AAMAQ are global variables.
local sub_endings_aa = make_nonpast_endings(
AAMAQ,
AYSK,
AY .. AA,
AWSK .. ALIF,
AYSK .. NA
)
-- Make endings for final-weak non-past subjunctive in -ī or -ū. IIUU is ī or ū as appropriate. Note that AA, II,
-- UU, ALIF are global variables.
local function make_sub_endings_ii_uu(iiuu)
return make_nonpast_endings(
iiuu .. A,
II,
iiuu .. AA,
UU .. ALIF,
iiuu .. NA
)
end
-- endings for final-weak non-past subjunctive in -ī
local sub_endings_ii = make_sub_endings_ii_uu(II)
-- endings for final-weak non-past subjunctive in -ū
local sub_endings_uu = make_sub_endings_ii_uu(UU)
-- endings for final-weak non-past jussive in -ā
local juss_endings_aa = make_nonpast_endings(
A,
AYSK,
AY .. AA,
AWSK .. ALIF,
AYSK .. NA
)
-- Make endings for final-weak non-past jussive in -ī or -ū. IU is short i or u, IIUU is long ī or ū as appropriate.
-- Note that AA, II, UU, ALIF are global variables.
local function make_juss_endings_ii_uu(iu, iiuu)
return make_nonpast_endings(
iu,
II,
iiuu .. AA,
UU .. ALIF,
iiuu .. NA
)
end
-- endings for final-weak non-past jussive in -ī
local juss_endings_ii = make_juss_endings_ii_uu(I, II)
-- endings for final-weak non-past jussive in -ū
local juss_endings_uu = make_juss_endings_ii_uu(U, UU)
-------------------------------------------------------------------------------
-- Sets of imperative endings --
-------------------------------------------------------------------------------
-- Extract the second person jussive endings to get corresponding imperative endings.
local function imperative_endings_from_jussive(endings)
return {endings[2], endings[3], endings[6], endings[10], endings[11]}
end
-- normal imperative endings
local imp_endings = imperative_endings_from_jussive(juss_endings)
-- alternative geminate imperative endings in -a
local imp_endings_alt_a = imperative_endings_from_jussive(juss_endings_alt_a)
-- alternative geminate imperative endings in -i
local imp_endings_alt_i = imperative_endings_from_jussive(juss_endings_alt_i)
-- final-weak imperative endings in -ā
local imp_endings_aa = imperative_endings_from_jussive(juss_endings_aa)
-- final-weak imperative endings in -ī
local imp_endings_ii = imperative_endings_from_jussive(juss_endings_ii)
-- final-weak imperative endings in -ū
local imp_endings_uu = imperative_endings_from_jussive(juss_endings_uu)
-------------------------------------------------------------------------------
-- Basic functions to inflect tenses --
-------------------------------------------------------------------------------
-- Add to `base` the inflections for the tense indicated by `tense` (the prefix in the slot names, e.g. 'past'
-- or 'juss_pass'), formed by combining the `prefixes`, `stems` and `endings`. Each of `prefixes`, `stems` and
-- `endings` is either a sequence of 5 (for the imperative) or 13 (for other tenses) abbreviated form lists (each of
-- which is either a string, a form object, or a list of strings and/or form objects; see
-- [[Module:inflection utilities]] for more info). Alternatively, any of `prefixes`, `stems` or `endings` can be a
-- single-element list containing an abbreviated form list, with an additional key `all_same` set to true, or (as a
-- special case) a single string; in the latter cases, the same value is used for all 5 or 13 slots. If existing
-- inflections already exist, they will be added to, not overridden. `pnums` is the list of person/number slot name
-- suffixes, which must match up with the elements in `prefixes`, `stems` and `endings` (i.e. 5 for imperative, 13
-- otherwise).
local function inflect_tense_1(base, tense, prefixes, stems, endings, pnums)
if not prefixes or not stems or not endings then
return
end
local function verify_affixes(affixname, affixes)
local function interr(msg)
error(("Internal error: For tense '%s', '%s' %s: %s"):format(tense, affixname, msg, dump(affixes)))
end
if type(affixes) == "string" then
-- do nothing
elseif type(affixes) ~= "table" then
interr("is not a table or string")
elseif affixes.all_same then
if #affixes ~= 1 then
interr(("with all_same = true should have length 1 but has length %s"):format(#affixes))
end
else
if #affixes ~= #pnums then
interr(("should have length %s but has length %s"):format(#pnums, #affixes))
end
end
end
verify_affixes("prefixes", prefixes)
verify_affixes("stems", stems)
verify_affixes("endings", endings)
local function get_affix(affixes, i)
if type(affixes) == "string" then
return affixes
elseif affixes.all_same then
return affixes[1]
else
return affixes[i]
end
end
for i, pnum in ipairs(pnums) do
local prefix = get_affix(prefixes, i)
local stem = get_affix(stems, i)
local ending = get_affix(endings, i)
local slot = tense .. "_" .. pnum
add3(base, slot, prefix, stem, ending)
end
end
-- Add to `base` the inflections for the tense indicated by `tense` (the prefix in the slot names, e.g. 'past'
-- or 'juss_pass'), formed by combining the `prefixes`, `stems` and `endings`. This is a simple wrapper around
-- inflect_tense_1() that applies to all tenses other than the imperative; see inflect_tense_1() for more
-- information about the parameters.
local function inflect_tense(base, tense, prefixes, stems, endings)
inflect_tense_1(base, tense, prefixes, stems, endings, all_person_number_list)
end
-- Like inflect_tense() but for the imperative, which has only five parts instead of 13 and no prefixes.
local function inflect_tense_imp(base, stems, endings)
inflect_tense_1(base, "imp", "", stems, endings, imp_person_number_list)
end
-------------------------------------------------------------------------------
-- Functions to inflect the past tense --
-------------------------------------------------------------------------------
-- Generate past verbs using specified vowel and consonant stems; works for sound, assimilated, hollow, and geminate
-- verbs, active and passive.
local function past_2stem_conj(base, tense, v_stem, c_stem, footnote_12)
local passive = tense:find("_pass") and "_pass" or ""
-- Override stems with user-specified stems if available.
v_stem = override_stem_if_needed(base, "past" .. passive .. "_v", v_stem)
local c_stem_12 = c_stem
if footnote_12 then
c_stem_12 = iut.combine_form_and_footnotes(c_stem_12, footnote_12)
end
c_stem_12 = override_stem_if_needed(base, "past" .. passive .. "_c", c_stem_12)
local c_stem_3 = override_stem_if_needed(base, "past" .. passive .. "_c", c_stem)
inflect_tense(base, tense, "", {
-- singular
c_stem_12, c_stem_12, c_stem_12, v_stem, v_stem,
--dual
c_stem_12, v_stem, v_stem,
-- plural
c_stem_12, c_stem_12, c_stem_12, v_stem, c_stem_3
}, past_endings)
end
-- Generate past verbs using single specified stem; works for sound and assimilated verbs, active and passive.
local function past_1stem_conj(base, tense, stem)
past_2stem_conj(base, tense, stem, stem)
end
-------------------------------------------------------------------------------
-- Functions to inflect non-past tenses --
-------------------------------------------------------------------------------
-- Generate non-past conjugation, with two stems, for vowel-initial and consonant-initial endings, respectively.
-- Useful for active and passive; for all forms; for all weaknesses (sound, assimilated, hollow, final-weak and
-- geminate) and for all types of non-past (indicative, subjunctive, jussive) except for the imperative. (There is a
-- separate wrapper function below for geminate jussives because they have three alternants.) Both stems may be the
-- same, e.g. for sound verbs.
-- `prefix_vowel` will be either "a" or "u". `endings` should be an array of 13 items. If `endings` is nil or
-- omitted, infer the endings from the tense. If `jussive` is true, or `endings` is nil and `tense` indicatives
-- jussive, use the jussive pattern of vowel/consonant stems (different from the normal ones).
local function nonpast_2stem_conj(base, tense, prefix_vowel, v_stem, c_stem, endings, jussive)
local passive = tense:find("_pass") and "_pass" or ""
-- Override stems with user-specified stems if available.
v_stem = override_stem_if_needed(base, "nonpast" .. passive .. "_v",
v_stem and q(dia[prefix_vowel], v_stem) or nil)
c_stem = override_stem_if_needed(base, "nonpast" .. passive .. "_c",
c_stem and q(dia[prefix_vowel], c_stem) or nil)
if not endings then
if tense:find("^ind") then
endings = ind_endings
elseif tense:find("^sub") then
endings = sub_endings
elseif tense:find("^juss") then
jussive = true
endings = juss_endings
else
error("Internal error: Unrecognized tense '" .. tense .."'")
end
end
if not jussive then
inflect_tense(base, tense, nonpast_prefix_consonants, {
-- singular
v_stem, v_stem, v_stem, v_stem, v_stem,
--dual
v_stem, v_stem, v_stem,
-- plural
v_stem, v_stem, c_stem, v_stem, c_stem
}, endings)
else
inflect_tense(base, tense, nonpast_prefix_consonants, {
-- singular
-- 'adlul, tadlul, tadullī, yadlul, tadlul
c_stem, c_stem, v_stem, c_stem, c_stem,
--dual
-- tadullā, yadullā, tadullā
v_stem, v_stem, v_stem,
-- plural
-- nadlul, tadullū, tadlulna, yadullū, yadlulna
c_stem, v_stem, c_stem, v_stem, c_stem
}, endings)
end
end
-- Generate non-past conjugation with one stem (no distinct stems for vowel-initial and consonant-initial endings).
-- See nonpast_2stem_conj().
local function nonpast_1stem_conj(base, tense, prefix_vowel, stem, endings, jussive)
nonpast_2stem_conj(base, tense, prefix_vowel, stem, stem, endings, jussive)
end
-- Generate active/passive jussive geminative. There are three alternants, two with terminations -a and -i and one
-- in a null termination with a distinct pattern of vowel/consonant stem usage. See nonpast_2stem_conj() for a
-- description of the arguments.
local function jussive_gem_conj(base, tense, prefix_vowel, v_stem, c_stem)
-- alternative in -a
nonpast_2stem_conj(base, tense, prefix_vowel, v_stem, c_stem, juss_endings_alt_a)
-- alternative in -i
nonpast_2stem_conj(base, tense, prefix_vowel, v_stem, c_stem, juss_endings_alt_i)
-- alternative in -null; requires different combination of v_stem and
-- c_stem since the null endings require the c_stem (e.g. "tadlul" here)
-- whereas the corresponding endings above in -a or -i require the v_stem
-- (e.g. "tadulla, tadulli" above)
nonpast_2stem_conj(base, tense, prefix_vowel, v_stem, c_stem, juss_endings, "jussive")
end
-------------------------------------------------------------------------------
-- Functions to inflect the imperative --
-------------------------------------------------------------------------------
-- Generate imperative conjugation, with two stems, for vowel-initial and consonant-initial endings, respectively.
-- Useful for all forms, and for all weaknesses other than final-weak. Note that the two stems may be the same
-- (specifically for sound and assimilated verbs). If `endings` is nil or omitted, use `imp_endings`. If `alt_gem`
-- is specified, use the pattern of vowel and consonant stems appropriate for the alternative geminate imperatives
-- that use a null ending of -a or -i instead of an empty ending.
local function make_2stem_imperative(base, v_stem, c_stem, endings, alt_gem)
endings = endings or imp_endings
-- Override stems with user-specified stems if available.
v_stem = override_stem_if_needed(base, "imp_v", v_stem)
c_stem = override_stem_if_needed(base, "imp_c", c_stem)
if alt_gem then
inflect_tense_imp(base, {v_stem, v_stem, v_stem, v_stem, c_stem}, endings)
else
inflect_tense_imp(base, {c_stem, v_stem, v_stem, v_stem, c_stem}, endings)
end
end
-- Generate imperative parts for sound or assimilated verbs.
local function make_1stem_imperative(base, stem)
make_2stem_imperative(base, stem, stem)
end
-- Generate imperative parts for geminate verbs form I (also IV, VII, VIII, X).
local function make_gem_imperative(base, v_stem, c_stem)
make_2stem_imperative(base, v_stem, c_stem, imp_endings_alt_a, "alt gem")
make_2stem_imperative(base, v_stem, c_stem, imp_endings_alt_i, "alt gem")
make_2stem_imperative(base, v_stem, c_stem)
end
-------------------------------------------------------------------------------
-- Functions to inflect entire verbs --
-------------------------------------------------------------------------------
-- Generate finite parts of a sound verb (also works for assimilated verbs) from five stems (past and non-past,
-- active and passive, plus imperative) plus the prefix vowel in the active non-past ("a" or "u").
local function make_sound_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem, imp_stem,
prefix_vowel)
past_1stem_conj(base, "past", past_stem)
past_1stem_conj(base, "past_pass", past_pass_stem)
nonpast_1stem_conj(base, "ind", prefix_vowel, nonpast_stem)
nonpast_1stem_conj(base, "sub", prefix_vowel, nonpast_stem)
nonpast_1stem_conj(base, "juss", prefix_vowel, nonpast_stem)
nonpast_1stem_conj(base, "ind_pass", "u", nonpast_pass_stem)
nonpast_1stem_conj(base, "sub_pass", "u", nonpast_pass_stem)
nonpast_1stem_conj(base, "juss_pass", "u", nonpast_pass_stem)
make_1stem_imperative(base, imp_stem)
end
local function past_final_weak_endings_from_vowel(vowel)
if vowel == "ay" then
return past_endings_ay
elseif vowel == "aw" then
return past_endings_aw
elseif vowel == "ī" then
return past_endings_ii
elseif vowel == "ū" then
return past_endings_uu
elseif not vowel then
return nil
else
error(("Internal error: Unrecognized past final-weak vowel spec '%s'"):format(vowel))
end
end
local function nonpast_final_weak_endings_from_vowel(vowel)
if vowel == "ā" then
return ind_endings_aa, sub_endings_aa, juss_endings_aa, imp_endings_aa
elseif vowel == "ī" then
return ind_endings_ii, sub_endings_ii, juss_endings_ii, imp_endings_ii
elseif vowel == "ū" then
return ind_endings_uu, sub_endings_uu, juss_endings_uu, imp_endings_uu
elseif not vowel then
return nil
else
error(("Internal error: Unrecognized non-past final-weak vowel spec '%s'"):format(vowel))
end
end
-- Generate finite parts of a final-weak verb from five stems (past and non-past, active and passive, plus
-- imperative), the past active ending vowel (ay, aw, ī or ū), the non-past active ending vowel (ā, ī or ū) and the
-- prefix vowel in the active non-past (a or u). All five imperative persons share `imp_stem`, so the
-- hamzat wasl carries the verb's own vowel class throughout -- اُدْعُ and اُدْعِي alike. The 2fs used to
-- take a kasra one of its own (finding #5, now #11): its ending is -ī regardless of vowel class, so the
-- stem vowel surfaces as a kasra there, and #5 read that as pulling the hamza with it. The book prints
-- the ḍamma -- اُدْعِي (p.141), اُعْلِي and اُغْزِي (p159) -- so the surfacing kasra is عارض and leaves the
-- hamza alone, exactly as the ḍamma of اِمْشُوا leaves it alone in the mirror case.
--
-- `retain_rad3_2fs`, if true, keeps rad3 as a consonant before that -ī instead of letting it
-- contract away: تَسْهُوِينَ / اُسْهُوِي rather than تَسْهِينَ / اِسْهِي. See README "Findings" #8
-- and final_weak_uu_retains_rad3().
local function make_final_weak_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem, imp_stem,
past_ending_vowel, nonpast_ending_vowel, prefix_vowel, retain_rad3_2fs)
past_stem = override_stem_if_needed(base, "past", past_stem)
past_pass_stem = override_stem_if_needed(base, "past_pass", past_pass_stem)
-- Don't call override_stem_if_needed() here for non-past stems; it's called in nonpast_2stem_conj().
imp_stem = override_stem_if_needed(base, "imp", imp_stem)
-- + not supported for ending vowel overrides
past_ending_vowel = base.stem_overrides.past_final_weak_vowel or past_ending_vowel
local past_pass_ending_vowel = base.stem_overrides.past_pass_final_weak_vowel or "ī"
nonpast_ending_vowel = base.stem_overrides.nonpast_final_weak_vowel or nonpast_ending_vowel
local nonpast_pass_ending_vowel = base.stem_overrides.nonpast_pass_final_weak_vowel or "ā"
local past_endings = past_final_weak_endings_from_vowel(past_ending_vowel)
local past_pass_endings = past_final_weak_endings_from_vowel(past_pass_ending_vowel)
local ind_endings, sub_endings, juss_endings, imp_endings =
nonpast_final_weak_endings_from_vowel(nonpast_ending_vowel)
local ind_pass_endings, sub_pass_endings, juss_pass_endings =
nonpast_final_weak_endings_from_vowel(nonpast_pass_ending_vowel)
if retain_rad3_2fs then
-- rad3 surfaces as a consonant carrying the class's own ḍamma, then the regular -ī:
-- سْهـ + ُوِينَ, not سْهـ + ِينَ. The 2fs sits at index 3 of a make_nonpast_endings()
-- table (`fem`) and at index 2 of the five imperative endings that
-- imperative_endings_from_jussive() extracts from it. Copied rather than mutated --
-- these ending tables are module-level constants shared by every final-weak verb.
-- Written out inline, not via a helper: create_conjugations() is at Lua's 60-upvalue
-- ceiling, and one more captured local stops the module loading at all.
local function set_2fs(endings, index, ending)
local out = {}
for i, v in ipairs(endings) do out[i] = v end
out[index] = ending
return out
end
ind_endings = set_2fs(ind_endings, 3, UU .. II .. NA)
sub_endings = set_2fs(sub_endings, 3, UU .. II)
juss_endings = set_2fs(juss_endings, 3, UU .. II)
imp_endings = set_2fs(imp_endings, 2, UU .. II)
end
inflect_tense(base, "past", "", {past_stem, all_same = 1}, past_endings)
inflect_tense(base, "past_pass", "", {past_pass_stem, all_same = 1}, past_pass_endings)
nonpast_1stem_conj(base, "ind", prefix_vowel, nonpast_stem, ind_endings)
nonpast_1stem_conj(base, "sub", prefix_vowel, nonpast_stem, sub_endings)
nonpast_1stem_conj(base, "juss", prefix_vowel, nonpast_stem, juss_endings)
nonpast_1stem_conj(base, "ind_pass", "u", nonpast_pass_stem, ind_pass_endings)
nonpast_1stem_conj(base, "sub_pass", "u", nonpast_pass_stem, sub_pass_endings)
nonpast_1stem_conj(base, "juss_pass", "u", nonpast_pass_stem, juss_pass_endings)
inflect_tense_imp(base, {imp_stem, all_same = 1}, imp_endings)
end
-- Generate finite parts of an augmented (form II+) final-weak verb from five stems (past and non-past, active and
-- passive, plus imperative) plus the prefix vowel in the active non-past ("a" or "u") and a flag indicating if it
-- behaves like a form V/VI verb in taking non-past endings in -ā instead of -ī.
local function make_augmented_final_weak_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem,
imp_stem, prefix_vowel, form56)
make_final_weak_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem, imp_stem, "ay",
form56 and "ā" or "ī", prefix_vowel)
end
-- Generate finite parts of an augmented (form II+) sound or final-weak verb, given:
-- * `base` (conjugation data structure);
-- * `vowel_spec` (radicals, weakness);
-- * `past_stem_base` (active past stem minus last syllable (= -al or -ā));
-- * `nonpast_stem_base` (non-past stem minus last syllable (= -al/-il or -ā/-ī);
-- * `past_pass_stem_base` (passive past stem minus last syllable (= -il or -ī));
-- * `vn` (verbal noun).
local function make_augmented_sound_final_weak_verb(base, vowel_spec, past_stem_base, nonpast_stem_base,
past_pass_stem_base, vn)
insert_form_or_forms(base, "vn", vn)
local lastrad = base.quadlit and vowel_spec.rad4 or vowel_spec.rad3
local final_weak = is_final_weak(base, vowel_spec)
local prefix_vowel = prefix_vowel_from_vform(base.verb_form)
local form56 = vform_nonpast_a_vowel(base.verb_form)
local a_base_suffix = final_weak and "" or q(A, lastrad)
local i_base_suffix = final_weak and "" or q(I, lastrad)
-- past and non-past stems, active and passive
local past_stem = q(past_stem_base, a_base_suffix)
-- In forms 5 and 6, non-past has /a/ as last stem vowel in the non-past
-- in both active and passive, but /i/ in the active participle and /a/
-- in the passive participle. Elsewhere, consistent /i/ in active non-past
-- and participle, consistent /a/ in passive non-past and participle.
-- Hence, forms 5 and 6 differ only in the non-past active (but not
-- active participle), so we have to split the finite non-past stem and
-- active participle stem.
local nonpast_stem = q(nonpast_stem_base, form56 and a_base_suffix or i_base_suffix)
local ap_stem = q(nonpast_stem_base, i_base_suffix)
local past_pass_stem = q(past_pass_stem_base, i_base_suffix)
local nonpast_pass_stem = q(nonpast_stem_base, a_base_suffix)
-- imperative stem
local imp_stem = q(past_stem_base, form56 and a_base_suffix or i_base_suffix)
-- make parts
if final_weak then
make_augmented_final_weak_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem, imp_stem,
prefix_vowel, form56)
else
make_sound_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem, imp_stem, prefix_vowel)
end
-- active and passive participle
if final_weak then
insert_form_or_forms(base, "ap", q(MU, ap_stem, IN))
insert_form_or_forms(base, "pp", q(MU, nonpast_pass_stem, AN, AMAQ))
else
insert_form_or_forms(base, "ap", q(MU, ap_stem))
insert_form_or_forms(base, "pp", q(MU, nonpast_pass_stem))
end
end
-- Generate finite parts of a hollow or geminate verb from ten stems (vowel and consonant stems for each of past and
-- non-past, active and passive, plus imperative) plus the prefix vowel in the active non-past ("a" or "u"), plus a
-- flag indicating if we are a geminate verb.
local function make_hollow_geminate_verb(base, geminate, past_v_stem, past_c_stem, past_pass_v_stem,
past_pass_c_stem, nonpast_v_stem, nonpast_c_stem, nonpast_pass_v_stem, nonpast_pass_c_stem, imp_v_stem,
imp_c_stem, prefix_vowel, altgem_note)
past_2stem_conj(base, "past", past_v_stem, past_c_stem, altgem_note)
past_2stem_conj(base, "past_pass", past_pass_v_stem, past_pass_c_stem)
nonpast_2stem_conj(base, "ind", prefix_vowel, nonpast_v_stem, nonpast_c_stem)
nonpast_2stem_conj(base, "sub", prefix_vowel, nonpast_v_stem, nonpast_c_stem)
nonpast_2stem_conj(base, "ind_pass", "u", nonpast_pass_v_stem, nonpast_pass_c_stem)
nonpast_2stem_conj(base, "sub_pass", "u", nonpast_pass_v_stem, nonpast_pass_c_stem)
if geminate then
jussive_gem_conj(base, "juss", prefix_vowel, nonpast_v_stem, nonpast_c_stem)
jussive_gem_conj(base, "juss_pass", "u", nonpast_pass_v_stem, nonpast_pass_c_stem)
make_gem_imperative(base, imp_v_stem, imp_c_stem)
else
nonpast_2stem_conj(base, "juss", prefix_vowel, nonpast_v_stem, nonpast_c_stem)
nonpast_2stem_conj(base, "juss_pass", "u", nonpast_pass_v_stem, nonpast_pass_c_stem)
make_2stem_imperative(base, imp_v_stem, imp_c_stem)
end
end
-- Generate finite parts of an augmented (form II+) hollow verb, given:
-- * `base` (conjugation data structure);
-- * `vowel_spec` (radicals, weakness);
-- * `past_stem_base` (invariable part of active past stem);
-- * `nonpast_stem_base` (invariable part of nonpast stem);
-- * `past_pass_stem_base` (invariable part of passive past stem);
-- * `vn` (verbal noun).
local function make_augmented_hollow_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base,
vn)
insert_form_or_forms(base, "vn", vn)
local lastrad = base.quadlit and vowel_spec.rad4 or vowel_spec.rad3
local form410 = base.verb_form == "IV" or base.verb_form == "X"
local prefix_vowel = prefix_vowel_from_vform(base.verb_form)
local a_base_suffix_v, a_base_suffix_c
local i_base_suffix_v, i_base_suffix_c
a_base_suffix_v = q(AA, lastrad) -- 'af-āl-a, inf-āl-a
a_base_suffix_c = q(A, lastrad) -- 'af-al-tu, inf-al-tu
i_base_suffix_v = q(II, lastrad) -- 'uf-īl-a, unf-īl-a
i_base_suffix_c = q(I, lastrad) -- 'uf-il-tu, unf-il-tu
-- past and non-past stems, active and passive, for vowel-initial and
-- consonant-initial endings
local past_v_stem = q(past_stem_base, a_base_suffix_v)
local past_c_stem = q(past_stem_base, a_base_suffix_c)
-- yu-f-īl-u, ya-staf-īl-u but yanf-āl-u, yaft-āl-u
local nonpast_v_stem = q(nonpast_stem_base, form410 and i_base_suffix_v or a_base_suffix_v)
local nonpast_c_stem = q(nonpast_stem_base, form410 and i_base_suffix_c or a_base_suffix_c)
local past_pass_v_stem = q(past_pass_stem_base, i_base_suffix_v)
local past_pass_c_stem = q(past_pass_stem_base, i_base_suffix_c)
local nonpast_pass_v_stem = q(nonpast_stem_base, a_base_suffix_v)
local nonpast_pass_c_stem = q(nonpast_stem_base, a_base_suffix_c)
-- imperative stem
local imp_v_stem = q(past_stem_base, form410 and i_base_suffix_v or a_base_suffix_v)
local imp_c_stem = q(past_stem_base, form410 and i_base_suffix_c or a_base_suffix_c)
-- make parts
make_hollow_geminate_verb(base, false, past_v_stem, past_c_stem, past_pass_v_stem,
past_pass_c_stem, nonpast_v_stem, nonpast_c_stem, nonpast_pass_v_stem,
nonpast_pass_c_stem, imp_v_stem, imp_c_stem, prefix_vowel)
-- active participle
insert_form_or_forms(base, "ap", q(MU, nonpast_v_stem))
-- passive participle
insert_form_or_forms(base, "pp", q(MU, nonpast_pass_v_stem))
end
-- Generate finite parts of an augmented (form II+) geminate verb, given:
-- * `base` (conjugation data structure);
-- * `vowel_spec` (radicals, weakness);
-- * `past_stem_base` (invariable part of active past stem; this and the stem bases below will end with a consonant
-- for forms IV, X, IVq, and a short vowel for the others);
-- * `nonpast_stem_base` (invariable part of nonpast stem);
-- * `past_pass_stem_base` (invariable part of passive past stem);
-- * `vn` (verbal noun);
-- * `altgem_note` (footnote to add to active past 1/2-person forms, when alternative forms are supplied [form X]).
local function make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base,
past_pass_stem_base, vn, altgem_note)
insert_form_or_forms(base, "vn", vn)
local vform = base.verb_form
local lastrad = base.quadlit and vowel_spec.rad4 or vowel_spec.rad3
local prefix_vowel = prefix_vowel_from_vform(vform)
local a_base_suffix_v, a_base_suffix_c
local i_base_suffix_v, i_base_suffix_c
if vform == "IV" or vform == "X" or vform == "IVq" then
a_base_suffix_v = q(A, lastrad, SH) -- 'af-all
a_base_suffix_c = q(SK, lastrad, A, lastrad) -- 'af-lal
i_base_suffix_v = q(I, lastrad, SH) -- yuf-ill
i_base_suffix_c = q(SK, lastrad, I, lastrad) -- yuf-lil
else
a_base_suffix_v = q(lastrad, SH) -- fā-ll, infa-ll
a_base_suffix_c = q(lastrad, A, lastrad) -- fā-lal, infa-lal
i_base_suffix_v = q(lastrad, SH) -- yufā-ll, yanfa-ll
i_base_suffix_c = q(lastrad, I, lastrad) -- yufā-lil, yanfa-lil
end
-- past and non-past stems, active and passive, for vowel-initial and
-- consonant-initial endings
local past_v_stem = q(past_stem_base, a_base_suffix_v)
local past_c_stem = q(past_stem_base, a_base_suffix_c)
local nonpast_v_stem = q(nonpast_stem_base, vform_nonpast_a_vowel(vform) and a_base_suffix_v or i_base_suffix_v)
local nonpast_c_stem = q(nonpast_stem_base, vform_nonpast_a_vowel(vform) and a_base_suffix_c or i_base_suffix_c)
-- NOTE: Formerly had a comment that "vform III and VI passive past do not have contracted parts, only
-- uncontracted parts, which are added separately by those functions". This is based on Mace
-- "Arabic Verbs and Essential Grammar" (1999) entry 63 (continued), which shows passive ḥūjija but no ḥūjja;
-- but that is apparently a mistake, as (1) verb tables in other books do show contracted passive parts for
-- these forms; (2) there is no mention of such an exception on p. 99, which explains how geminate ("doubled")
-- verbs work (on the contrary, it says "The contracted and uncontracted pairs (see above) are found all
-- over Forms III and VI of the doubled verbs").
local past_pass_v_stem = q(past_pass_stem_base, i_base_suffix_v)
local past_pass_c_stem = q(past_pass_stem_base, i_base_suffix_c)
local nonpast_pass_v_stem = q(nonpast_stem_base, a_base_suffix_v)
local nonpast_pass_c_stem = q(nonpast_stem_base, a_base_suffix_c)
-- imperative stem
local imp_v_stem = q(past_stem_base, vform_nonpast_a_vowel(vform) and a_base_suffix_v or i_base_suffix_v)
local imp_c_stem = q(past_stem_base, vform_nonpast_a_vowel(vform) and a_base_suffix_c or i_base_suffix_c)
-- make parts
make_hollow_geminate_verb(base, "geminate", past_v_stem, past_c_stem, past_pass_v_stem,
past_pass_c_stem, nonpast_v_stem, nonpast_c_stem, nonpast_pass_v_stem,
nonpast_pass_c_stem, imp_v_stem, imp_c_stem, prefix_vowel, altgem_note)
-- active participle
insert_form_or_forms(base, "ap", q(MU, nonpast_v_stem))
-- passive participle
insert_form_or_forms(base, "pp", q(MU, nonpast_pass_v_stem))
end
-------------------------------------------------------------------------------
-- Conjugation functions for specific conjugation types --
-------------------------------------------------------------------------------
local function form_i_imp_stem_through_rad1(base, nonpast_vowel, rad1)
local imp_vowel = map_vowel(nonpast_vowel, function(vow)
if vow == A or vow == I then
return I
elseif vow == U then
return U
elseif not skip_slot(base, "imp_2ms") then
error(("Internal error: Non-past vowel %s isn't a, i, or u, should have been caught earlier"):format(
dump(nonpast_vowel)))
else
-- Passive-only; imperative won't ever be displayed so it doesn't matter.
return I
end
end)
-- Mace ("Arabic Verbs and Essentials of Grammar" p. 63: [https://archive.org/details/arabicverbsessen00john/page/62/mode/2up])
-- claims that initial hamza is assimilated/elided into a long vowel in the form-I imperative, but apparently
-- this isn't corrrect.
local vowel_on_alif = map_vowel(imp_vowel, function(vow)
return ALIF .. vow
end)
return q(vowel_on_alif, rad1, SK)
end
-- Implement form-I sound or assimilated verb. ASSIMILATED is true for assimilated verbs.
local function make_form_i_sound_assimilated_verb(base, vowel_spec, assimilated)
local rad1, rad2, rad3, past_vowel, nonpast_vowel = get_radicals_3(vowel_spec)
-- Verbal nouns (maṣādir) for form I are unpredictable and have to be supplied
-- past and non-past stems, active and passive
local past_stem = q(rad1, A, rad2, past_vowel, rad3)
local nonpast_stem = assimilated and q(rad2, nonpast_vowel, rad3) or
q(rad1, SK, rad2, nonpast_vowel, rad3)
local past_pass_stem = q(rad1, U, rad2, I, rad3)
local nonpast_pass_stem = q(rad1, SK, rad2, A, rad3)
-- imperative stem
-- check for irregular verb with reduced imperative (أَخَذَ or أَكَلَ or أَمَرَ)
local reducedimp = reduced_imperative_verb(rad1, rad2, rad3)
if reducedimp then
base.irregular = true
end
local imp_stem_suffix = q(rad2, nonpast_vowel, rad3)
local long_imp_stem_base = form_i_imp_stem_through_rad1(base, nonpast_vowel, rad1)
local short_imp_stem_base = ""
local imp_stem = q((assimilated or reducedimp) and "" or long_imp_stem_base, imp_stem_suffix)
-- A form-I mithal that keeps its wāw spells its imperative on a hamzat wasl,
-- اِوْجَلْ / اِوْنَ. Tell postprocess_term() not to reduce that اِوْ to اِي -- see #10
-- there for why the substitution list can't decide this for itself.
if not assimilated and req(rad1, W) then
base.orth.keep_initial_w = true
end
-- make parts
make_sound_verb(base, past_stem, past_pass_stem, nonpast_stem, nonpast_pass_stem, imp_stem, "a")
if reducedimp == "shortlong" then
make_1stem_imperative(base, iut.combine_form_and_footnotes(q(long_imp_stem_base, imp_stem_suffix),
mw.getCurrentFrame():preprocess("[used especially with a clitic such as {{m|ar|فَ}} or {{m|ar|وَ}}]")))
end
-- Check for irregular verb سَأَلَ with alternative jussive and imperative. Calling this after make_sound_verb()
-- adds additional entries to the paradigm parts.
if saal_radicals(rad1, rad2, rad3) then
base.irregular = true
nonpast_1stem_conj(base, "juss", "a", "سَل")
nonpast_1stem_conj(base, "juss_pass", "u", "سَل")
make_1stem_imperative(base, "سَل")
end
-- Active participle.
insert_form_or_forms(base, "ap1", q(rad1, AA, rad2, I, rad3))
-- Insert alternative active participle (stative type I) فَعِيل. Since not all verbs have this, we require that
-- verbs that do have it specify it explicitly; a shortcut ++ is provided to make this easier (e.g. <ap:++> to
-- indicate that the alternative form should be used for the active participle, <ap:+,++> to indicate that both
-- forms can be used, and <ap:-> to indicate that there is no active participle). The same form is used for
-- secondary default passive participle.
insert_ap2_pp2(base, q(rad1, A, rad2, II, rad3))
-- Active participle, stative type II فَعِل (+++).
insert_form_or_forms(base, "ap3", q(rad1, A, rad2, I, rad3))
-- Active participle, color/defect أَفْعَل (+cd).
insert_form_or_forms(base, "apcd", q(HAMZA, A, rad1, SK, rad2, A, rad3))
-- Active participle, -ān فَعْلَان (+an).
insert_form_or_forms(base, "apan", q(rad1, A, rad2, SK, rad3, AAN))
-- Passive participle.
insert_form_or_forms(base, "pp", q(MA, rad1, SK, rad2, UU, rad3))
end
conjugations["I-sound"] = function(base, vowel_spec)
make_form_i_sound_assimilated_verb(base, vowel_spec, false)
end
conjugations["none-sound"] = function(base, vowel_spec)
-- All default stems are nil.
make_sound_verb(base)
end
conjugations["none-hollow"] = function(base, vowel_spec)
-- All default stems are nil.
make_hollow_geminate_verb(base, false)
end
conjugations["none-geminate"] = function(base, vowel_spec)
-- All default stems are nil.
make_hollow_geminate_verb(base, "geminate")
end
conjugations["none-final-weak"] = function(base, vowel_spec)
-- All default stems are nil.
make_final_weak_verb(base)
end
conjugations["I-assimilated"] = function(base, vowel_spec)
make_form_i_sound_assimilated_verb(base, vowel_spec, "assimilated")
end
-- The إدغام-contracting form-I final-weak verb: حَيَّ beside حَيِيَ, عَيَّ beside
-- عَيِيَ. Which roots these are is hayy_radicals(), above.
local function make_form_i_hayy_verb(base, vowel_spec)
-- Verbal nouns (maṣādir) for form I are unpredictable and have to be supplied
base.irregular = true
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
-- past and non-past stems, active and passive, and imperative stem.
-- Built from the radicals. They used to be the literal strings حَيِي / حَيّ /
-- حْي, which is why this whole paradigm was one verb's: a second root with the
-- same alternation could not reach it, and the book states the alternation for
-- عيي in the same words it uses for حيي.
local past_c_stem = q(rad1, A, rad2, I, rad3)
local past_v_stem_long = past_c_stem
local past_v_stem_short = q(rad1, A, rad2, SH)
-- 3mp of the long variant (حَيِيَ) is حَيُوا, not the geminated حَيُّوا of the short
-- variant (حَيَّ) -- rad2 (ي) here is a plain radical, not doubled; see README
-- "Open findings" #4. Needs its own stem, distinct from both the long and short ones.
local past_v_stem_3mp = q(rad1, A, rad2)
local past_pass_c_stem = q(rad1, U, rad2, I, rad3)
local past_pass_v_stem_long = past_pass_c_stem
local past_pass_v_stem_short = q(rad1, U, rad2, SH)
local past_pass_v_stem_3mp = q(rad1, U, rad2)
local nonpast_stem = q(rad1, SK, rad2)
local nonpast_pass_stem = nonpast_stem
local imp_stem = _I .. nonpast_stem
-- make parts
past_2stem_conj(base, "past", {}, past_c_stem)
past_2stem_conj(base, "past_pass", {}, past_pass_c_stem)
local variant = vowel_spec.variant or "both"
if variant == "short" or variant == "both" then
past_2stem_conj(base, "past", past_v_stem_short, {})
past_2stem_conj(base, "past_pass", past_pass_v_stem_short, {})
end
function inflect_long_variant(tense, long_stem, mp_stem)
inflect_tense_1(base, tense, "",
{long_stem, long_stem, long_stem, long_stem, mp_stem},
{past_endings[4], past_endings[5], past_endings[7], past_endings[8],
past_endings[12]},
{"3ms", "3fs", "3md", "3fd", "3mp"})
end
if variant == "long" or variant == "both" then
inflect_long_variant("past", past_v_stem_long, past_v_stem_3mp)
inflect_long_variant("past_pass", past_pass_v_stem_long, past_pass_v_stem_3mp)
end
nonpast_1stem_conj(base, "ind", "a", nonpast_stem, ind_endings_aa)
nonpast_1stem_conj(base, "sub", "a", nonpast_stem, sub_endings_aa)
nonpast_1stem_conj(base, "juss", "a", nonpast_stem, juss_endings_aa)
nonpast_1stem_conj(base, "ind_pass", "u", nonpast_pass_stem, ind_endings_aa)
nonpast_1stem_conj(base, "sub_pass", "u", nonpast_pass_stem, sub_endings_aa)
nonpast_1stem_conj(base, "juss_pass", "u", nonpast_pass_stem, juss_endings_aa)
inflect_tense_imp(base, {imp_stem, all_same = 1}, imp_endings_aa)
-- Participles. Byte-for-byte the block make_form_i_final_weak_verb() ends
-- with, because nothing about these verbs' participles is irregular -- it is
-- the *past* that contracts. This used to read "active and passive participles
-- apparently do not exist for this verb", and the source prints them: حايٍ /
-- مَحْيِيٌّ under نموذج 159 (ص231) and عايٍ / مَعْيِيٌّ under the same model
-- (ص233), which is ap1 and pp exactly. Leaving them out scored "module has
-- none" against both, and dropping the rest would have been a regression for
-- عيي, which reached the ordinary path until it was listed here.
insert_form_or_forms(base, "ap1", q(rad1, AA, rad2, IN))
insert_ap2_pp2(base, q(rad1, A, rad2, II, SH))
insert_form_or_forms(base, "ap3", q(rad1, A, rad2, IN))
insert_form_or_forms(base, "apcd", q(HAMZA, A, rad1, SK, rad2, AAMAQ))
insert_form_or_forms(base, "apan", q(rad1, A, rad2, SK, rad3, AAN))
insert_form_or_forms(base, "pp", q(MA, rad1, SK, rad2, req(rad3, Y) and II or UU, SH))
end
-- Implement form-I final-weak assimilated+final-weak verb. ASSIMILATED is true for assimilated verbs.
local function make_form_i_final_weak_verb(base, vowel_spec, assimilated)
local rad1, rad2, rad3, past_vowel, nonpast_vowel = get_radicals_3(vowel_spec)
-- حَيَّ / حَيِيَ and عَيَّ / عَيِيَ are weird enough to handle separately.
if hayy_radicals(rad1, rad2, rad3, "I") then
make_form_i_hayy_verb(base, vowel_spec)
return
end
-- Verbal nouns (maṣādir) for form I are unpredictable and have to be supplied.
-- Past and non-past stems, active and passive, and imperative stem.
local past_stem = q(rad1, A, rad2)
local past_pass_stem = q(rad1, U, rad2)
local nonpast_stem, nonpast_pass_stem, imp_stem
if raa_radicals(rad1, rad2, rad3) then
base.irregular = true
nonpast_stem = rad1
nonpast_pass_stem = rad1
imp_stem = rad1
else
nonpast_pass_stem = q(rad1, SK, rad2)
if assimilated then
nonpast_stem = rad2
imp_stem = rad2
else
nonpast_stem = nonpast_pass_stem
imp_stem = q(form_i_imp_stem_through_rad1(base, nonpast_vowel, rad1), rad2)
end
end
-- A form-I mithal that keeps its wāw spells its imperative on a hamzat wasl,
-- اِوْجَلْ / اِوْنَ. Tell postprocess_term() not to reduce that اِوْ to اِي -- see #10
-- there for why the substitution list can't decide this for itself.
if not assimilated and req(rad1, W) then
base.orth.keep_initial_w = true
end
-- Make parts.
local past_ending_vowel =
req(rad3, Y) and req(past_vowel, A) and "ay" or
req(rad3, W) and req(past_vowel, A) and "aw" or
req(past_vowel, I) and "ī" or "ū"
-- Try to preserve footnotes attached to the third radical and/or past and/or non-past vowels.
local past_footnotes = iut.combine_footnotes(rget_footnotes(rad3), rget_footnotes(past_vowel))
local nonpast_ending_vowel = req(nonpast_vowel, A) and "ā" or req(nonpast_vowel, I) and "ī" or "ū"
local nonpast_footnotes = iut.combine_footnotes(rget_footnotes(rad3), rget_footnotes(nonpast_vowel))
make_final_weak_verb(base,
iut.combine_form_and_footnotes(past_stem, past_footnotes),
iut.combine_form_and_footnotes(past_pass_stem, past_footnotes),
iut.combine_form_and_footnotes(nonpast_stem, nonpast_footnotes),
iut.combine_form_and_footnotes(nonpast_pass_stem, nonpast_footnotes),
iut.combine_form_and_footnotes(imp_stem, nonpast_footnotes),
past_ending_vowel, nonpast_ending_vowel, "a",
final_weak_uu_retains_rad3(rad1, rad2, rad3, past_ending_vowel, nonpast_ending_vowel))
-- Active participle.
insert_form_or_forms(base, "ap1", q(rad1, AA, rad2, IN))
-- Active participle, stative type I فَعِيّ (++). FIXME: Is this correct when rad3 is W?
insert_ap2_pp2(base, q(rad1, A, rad2, II, SH))
-- Active participle, stative type II فَعٍ (+++). FIXME: Any examples of this to verify it's correct?
insert_form_or_forms(base, "ap3", q(rad1, A, rad2, IN))
-- Active participle, color/defect أَفْعَى (+cd).
insert_form_or_forms(base, "apcd", q(HAMZA, A, rad1, SK, rad2, AAMAQ))
-- Active participle, -ān فَعْيَان or فَعْوَان (+an).
-- FIXME: Any examples of this for both rad3 = W and y to verify it's correct?
insert_form_or_forms(base, "apan", q(rad1, A, rad2, SK, rad3, AAN))
-- Passive participle.
insert_form_or_forms(base, "pp", q(MA, rad1, SK, rad2, req(rad3, Y) and II or UU, SH))
end
conjugations["I-final-weak"] = function(base, vowel_spec)
make_form_i_final_weak_verb(base, vowel_spec, false)
end
conjugations["I-assimilated+final-weak"] = function(base, vowel_spec)
make_form_i_final_weak_verb(base, vowel_spec, "assimilated")
end
conjugations["I-hollow"] = function(base, vowel_spec)
local rad1, rad2, rad3, past_vowel, nonpast_vowel = get_radicals_3(vowel_spec)
-- In some sense, hollow vowels i~i and u~u are more "correct" than a~i and a~u, but the latter follow the
-- pattern of other form-I verbs, so we map i~i to a~i and u~u to a~u in infer_radicals(). Now however we have
-- to undo this to get the actual past vowel based on the non-past vowel.
if req(past_vowel, A) then
past_vowel = map_vowel(past_vowel, function(vow)
return req(nonpast_vowel, A) and I or rget(nonpast_vowel)
end)
end
local lengthened_nonpast = map_vowel(nonpast_vowel, function(vow)
return vow == U and UU or vow == I and II or AA
end)
-- Verbal nouns (maṣādir) for form I are unpredictable and have to be supplied.
-- active past stems - vowel (v) and consonant (c)
local past_v_stem = q(rad1, AA, rad3)
local past_c_stem = q(rad1, past_vowel, rad3)
-- active non-past stems - vowel (v) and consonant (c)
local nonpast_v_stem = q(rad1, lengthened_nonpast, rad3)
local nonpast_c_stem = q(rad1, nonpast_vowel, rad3)
-- passive past stems - vowel (v) and consonant (c)
-- 'ufīla always; the contracted stem takes whichever of i/u the active past_c_stem
-- *isn't* -- xāfa/xiftu (i) -> passive xufta (u), qāla/qultu (u) -> passive qilta (i).
-- Contraction drops rad2, so this vowel is the only thing distinguishing active from
-- passive in these forms, hence the two roots' behaviour is opposite, not independent.
-- Confirmed on two printed pages (خافَ p.224 "خُفْتَ", قالَ p.138 "قِلْتَ"); previously
-- hardcoded to u from خافَ alone, which is only half the pattern -- see README.
local past_pass_v_stem = q(rad1, II, rad3)
local past_pass_c_stem = q(rad1, map_vowel(past_vowel, function(vow)
return vow == I and U or I
end), rad3)
-- passive non-past stems - vowel (v) and consonant (c)
-- yufāla/yufalna
-- stem is built differently but conjugation is identical to sound verbs
local nonpast_pass_v_stem = q(rad1, AA, rad3)
local nonpast_pass_c_stem = q(rad1, A, rad3)
-- imperative stem
local imp_v_stem = nonpast_v_stem
local imp_c_stem = nonpast_c_stem
-- make parts
make_hollow_geminate_verb(base, false, past_v_stem, past_c_stem, past_pass_v_stem,
past_pass_c_stem, nonpast_v_stem, nonpast_c_stem, nonpast_pass_v_stem,
nonpast_pass_c_stem, imp_v_stem, imp_c_stem, "a")
if kaan_radicals(rad1, rad2, rad3) then
local endings = make_nonpast_endings(U, {}, {}, {}, {})
inflect_tense(base, "juss", nonpast_prefix_consonants, q(A, rad1), endings)
base.irregular = true
end
-- سالَ يَسالُ keeps سَأَلْتُ's fatha in its contracted past -- سَلْتَ, not the سِلْتَ
-- the a~a pair would give -- and the book says why in as many words, under p202's
-- own table: "سالَ يَسالُ، لغة في سَأَلَ المهموز ... ويُقالُ في الماضي سَلْتُ بفتحِ
-- أوّلهِ مثلَ سَأَلْتُ فحُذِفَتِ الهمزةُ كما حُذِفَتْ مِنْ رَأَيْتُ فقيلَ فيه رَيْتُ".
-- So this is not a hollow-vowel exception and no rule about the a~a pair should be
-- touched for it: it is سَأَلْتُ with the hamza dropped, the way رَأَيْتُ gives رَيْتُ.
-- Added as an extra variant rather than a replacement, for the same reason
-- saal_radicals() adds سَلْ beside اِسْأَلْ instead of replacing it -- the book prints
-- both, in different places (p202 sets سَلْتَ, p176 sets سَأَلْتَ). Gated on the a~a
-- pair, because a سول verb with a u non-past is a different verb. README finding #19.
if saal_hollow_radicals(rad1, rad2, rad3) and req(nonpast_vowel, A) then
base.irregular = true
past_2stem_conj(base, "past", past_v_stem, q(rad1, A, rad3))
end
-- Active participle.
insert_form_or_forms(base, "ap1", req(rad3, HAMZA) and q(rad1, AA, HAMZA, IN) or
q(rad1, AA, HAMZA, I, rad3))
-- Active participle, stative type I فَيِّد (++). FIXME: Any examples of this to verify it's correct?
insert_ap2_pp2(base, q(rad1, A, Y, SH, I, rad3))
-- Active participle, stative type II فَيِد (+++). FIXME: Any examples of this to verify it's correct?
insert_form_or_forms(base, "ap3", q(rad1, A, Y, I, rad3))
-- Active participle, color/defect أَفّيَد or أَفّوَد (+cd). FIXME: Any examples of this to verify it's correct?
insert_form_or_forms(base, "apcd", q(HAMZA, A, rad1, SK, rad2, A, rad3))
-- Active participle, -ān فَيْدَان or فَوْدَان (+an). Example: جَاعَ "to be hungry", act part جَوْعَان
insert_form_or_forms(base, "apan", q(rad1, A, rad2, SK, rad3, AAN))
-- Passive participle.
insert_form_or_forms(base, "pp", q(MA, rad1, req(rad2, Y) and II or UU, rad3))
end
conjugations["I-geminate"] = function(base, vowel_spec)
local rad1, rad2, rad3, past_vowel, nonpast_vowel = get_radicals_3(vowel_spec)
-- Verbal nouns (maṣādir) for form I are unpredictable and have to be supplied.
-- active past stems - vowel (v) and consonant (c)
-- The contracted stem's vowel is the past vowel for most roots (مَدَدْتَ) but follows the
-- مضارع for the إتباع lexemes (هَمُمْتَ); see geminate_degemination_vowel().
local past_v_stem = q(rad1, A, rad2, SH)
local past_c_stem = q(rad1, A, rad2,
geminate_degemination_vowel(rad1, rad2, rad3, past_vowel, nonpast_vowel), rad2)
-- active non-past stems - vowel (v) and consonant (c)
local nonpast_v_stem = q(rad1, nonpast_vowel, rad2, SH)
local nonpast_c_stem = q(rad1, SK, rad2, nonpast_vowel, rad2)
-- passive past stems - vowel (v) and consonant (c)
-- dulla/dulilta
local past_pass_v_stem = q(rad1, U, rad2, SH)
local past_pass_c_stem = q(rad1, U, rad2, I, rad2)
-- passive non-past stems - vowel (v) and consonant (c)
--yudallu/yudlalna
-- stem is built differently but conjugation is identical to sound verbs
local nonpast_pass_v_stem = q(rad1, A, rad2, SH)
local nonpast_pass_c_stem = q(rad1, SK, rad2, A, rad2)
-- imperative stem
local imp_v_stem = q(rad1, nonpast_vowel, rad2, SH)
local imp_c_stem = q(form_i_imp_stem_through_rad1(base, nonpast_vowel, rad1), rad2, nonpast_vowel, rad2)
-- make parts
make_hollow_geminate_verb(base, "geminate", past_v_stem, past_c_stem, past_pass_v_stem,
past_pass_c_stem, nonpast_v_stem, nonpast_c_stem, nonpast_pass_v_stem,
nonpast_pass_c_stem, imp_v_stem, imp_c_stem, "a")
-- Active participle.
insert_form_or_forms(base, "ap1", q(rad1, AA, rad2, SH))
-- Active participle, stative type I فَعِيع (++). FIXME: Any examples of this to verify it's correct?
insert_ap2_pp2(base, q(rad1, A, rad2, II, rad2))
-- Active participle, stative type II فَعّ (+++). Example: بَرَّ "to be pious", active participle بَرّ
insert_form_or_forms(base, "ap3", q(rad1, A, rad2, SH))
-- Active participle, color/defect أَفَعّ (+cd).
-- Example: لَصَّ "to be thievish, to steal repeatedly", active participle أَلَصّ.
insert_form_or_forms(base, "apcd", q(HAMZA, A, rad1, A, rad2, SH))
-- Active participle, -ān فَعَّان (+an). FIXME: Any examples of this to verify it's correct?
insert_form_or_forms(base, "apan", q(rad1, A, rad2, SH, AAN))
-- Passive participle.
insert_form_or_forms(base, "pp", q(MA, rad1, SK, rad2, UU, rad2))
end
-- Return the ta- (active, past and non-past) and tu- (passive past) prefixes for a form II/III/V/VI verb.
-- Form V and VI verbs normally use ta- and tu-, but reduced (base.reduced) verbs use different prefixes. Form II
-- and III verbs have no prefix.
local function form_ii_iii_v_vi_ta_tu_prefix(base, rad1)
local vform = base.verb_form
if vform == "V" or vform == "VI" then
if base.reduced then
-- To simplify the code, we generate two rad1's with a sukūn between them, which is cleaned up in
-- postprocessing.
return q(_I, rad1, SK), q(rad1, SK), q(_U, rad1, SK)
else
return TA, TA, TU
end
else
return "", "", ""
end
end
-- Make form II or V sound or final-weak verb.
local function make_form_ii_v_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local final_weak = is_final_weak(base, vowel_spec)
local vform = base.verb_form
local ta_past_prefix, ta_nonpast_prefix, tu_past_prefix = form_ii_iii_v_vi_ta_tu_prefix(base, rad1)
local vn = vform == "V" and
q(ta_past_prefix, rad1, A, rad2, SH, final_weak and IN or q(U, rad3)) or
q(TA, rad1, SK, rad2, II, final_weak and AH or rad3)
-- various stem bases
local past_stem_base = q(ta_past_prefix, rad1, A, rad2, SH)
local nonpast_stem_base = q(ta_nonpast_prefix, rad1, A, rad2, SH)
local past_pass_stem_base = q(tu_past_prefix, rad1, U, rad2, SH)
-- make parts
make_augmented_sound_final_weak_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base,
vn)
end
conjugations["II-sound"] = function(base, vowel_spec)
make_form_ii_v_sound_final_weak_verb(base, vowel_spec)
end
conjugations["II-final-weak"] = function(base, vowel_spec)
make_form_ii_v_sound_final_weak_verb(base, vowel_spec)
end
local function make_form_iii_alt_vn(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local final_weak = is_final_weak(base, vowel_spec)
-- Insert alternative verbal noun فِعَال. Since not all verbs have this, we require that verbs that do have it
-- specify it explicitly; a shortcut ++ is provided to make this easier (e.g. <vn:+,++> to indicate that
-- both the normal verbal noun مُفَاعَلَة and secondary verbal noun فِعَال are available).
insert_form_or_forms(base, "vn2", q(rad1, I, rad2, AA, final_weak and HAMZA or rad3))
end
-- Make form III or VI sound or final-weak verb.
local function make_form_iii_vi_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local final_weak = is_final_weak(base, vowel_spec)
local vform = base.verb_form
local ta_past_prefix, ta_nonpast_prefix, tu_past_prefix = form_ii_iii_v_vi_ta_tu_prefix(base, rad1)
local vn = vform == "VI" and
q(ta_past_prefix, rad1, AA, rad2, final_weak and IN or q(U, rad3)) or
q(MU, rad1, AA, rad2, final_weak and AAH or q(A, rad3, AH))
-- various stem bases
local past_stem_base = q(ta_past_prefix, rad1, AA, rad2)
local nonpast_stem_base = q(ta_nonpast_prefix, rad1, AA, rad2)
local past_pass_stem_base = q(tu_past_prefix, rad1, UU, rad2)
-- make parts
make_augmented_sound_final_weak_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base,
vn)
if vform == "III" then
make_form_iii_alt_vn(base, vowel_spec)
end
end
conjugations["III-sound"] = function(base, vowel_spec)
make_form_iii_vi_sound_final_weak_verb(base, vowel_spec)
end
conjugations["III-final-weak"] = function(base, vowel_spec)
make_form_iii_vi_sound_final_weak_verb(base, vowel_spec)
end
-- Make form III or VI geminate verb.
local function make_form_iii_vi_geminate_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vform = base.verb_form
local ta_past_prefix, ta_nonpast_prefix, tu_past_prefix = form_ii_iii_v_vi_ta_tu_prefix(base, rad1)
-- Alternative verbal noun فِعَال will be inserted when we add sound parts below.
local vn = vform == "VI" and q(ta_past_prefix, rad1, AA, rad2, SH) or q(MU, rad1, AA, rad2, SH, AH)
-- Various stem bases.
local past_stem_base = q(ta_past_prefix, rad1, AA)
local nonpast_stem_base = q(ta_nonpast_prefix, rad1, AA)
local past_pass_stem_base = q(tu_past_prefix, rad1, UU)
-- Make parts.
local variant = vowel_spec.variant or "short"
if variant == "short" or variant == "both" then
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
-- Also add alternative sound (non-compressed) parts. This will lead to some duplicate entries, but they are
-- removed during addition.
if variant == "long" or variant == "both" then
make_form_iii_vi_sound_final_weak_verb(base, vowel_spec)
elseif vform == "III" then
-- Still need to add the alternative form-III verbal noun.
make_form_iii_alt_vn(base, vowel_spec)
end
end
conjugations["III-geminate"] = function(base, vowel_spec)
make_form_iii_vi_geminate_verb(base, vowel_spec)
end
-- Make form IV sound or final-weak verb.
local function make_form_iv_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local final_weak = is_final_weak(base, vowel_spec)
-- core of stem base, minus stem prefixes
local stem_core
-- check for irregular verb أَرَى
local is_raa = raa_radicals(rad1, rad2, rad3)
if is_raa then
base.irregular = true
stem_core = rad1
else
stem_core = q(rad1, SK, rad2)
end
-- verbal noun
local vn = is_raa and
q(HAMZA, I, stem_core, AA, HAMZA, AH) or
q(HAMZA, I, stem_core, AA, final_weak and HAMZA or rad3)
-- various stem bases
local past_stem_base = q(HAMZA, A, stem_core)
local nonpast_stem_base = stem_core
local past_pass_stem_base = q(HAMZA, U, stem_core)
-- make parts
make_augmented_sound_final_weak_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base,
vn)
end
conjugations["IV-sound"] = function(base, vowel_spec)
make_form_iv_sound_final_weak_verb(base, vowel_spec)
end
conjugations["IV-final-weak"] = function(base, vowel_spec)
make_form_iv_sound_final_weak_verb(base, vowel_spec)
end
conjugations["IV-hollow"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
-- verbal noun
local vn = q(HAMZA, I, rad1, AA, rad3, AH)
-- various stem bases
local past_stem_base = q(HAMZA, A, rad1)
local nonpast_stem_base = rad1
local past_pass_stem_base = q(HAMZA, U, rad1)
-- make parts
make_augmented_hollow_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["IV-geminate"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = q(HAMZA, I, rad1, SK, rad2, AA, rad2)
-- various stem bases
local past_stem_base = q(HAMZA, A, rad1)
local nonpast_stem_base = rad1
local past_pass_stem_base = q(HAMZA, U, rad1)
-- make parts
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["V-sound"] = function(base, vowel_spec)
make_form_ii_v_sound_final_weak_verb(base, vowel_spec)
end
conjugations["V-final-weak"] = function(base, vowel_spec)
make_form_ii_v_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VI-sound"] = function(base, vowel_spec)
make_form_iii_vi_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VI-final-weak"] = function(base, vowel_spec)
make_form_iii_vi_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VI-geminate"] = function(base, vowel_spec)
make_form_iii_vi_geminate_verb(base, vowel_spec)
end
-- Make a verbal noun of the general form that applies to forms VII and above. RAD12 is the first consonant cluster
-- (after initial اِ) and RAD34 is the second consonant cluster. RAD5 is the final consonant.
local function high_form_verbal_noun(rad12, rad34, rad5)
return q(_I, rad12, I, rad34, AA, rad5)
end
-- Populate a sound or final-weak verb for any of the various high-numbered augmented forms (form VII and up) that
-- have up to 5 consonants in two clusters in the stem and the same pattern of vowels between. Some of these
-- consonants in certain verb parts are w's, which leads to apparent anomalies in certain stems of these parts, but
-- these anomalies are handled automatically in postprocessing, where we resolve sequences of iwC -> īC, uwC -> ūC,
-- w + sukūn + w -> w + shadda.
-- RAD12 is the first consonant cluster (after initial اِ) and RAD34 is the second consonant cluster. RAD5 is the
-- final consonant.
local function make_high_form_sound_final_weak_verb(base, vowel_spec, rad12, rad34, rad5)
local final_weak = is_final_weak(base, vowel_spec)
local vn = high_form_verbal_noun(rad12, rad34, final_weak and HAMZA or rad5)
-- various stem bases
local nonpast_stem_base = q(rad12, A, rad34)
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, rad12, U, rad34)
-- make parts
make_augmented_sound_final_weak_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base,
vn)
end
local function form_vii_nrad1(base, rad1)
if base.reduced then
if not req(rad1, M) then
error(("Internal error: Form VII first radical %s is not م but .reduced specified; should have been caught earlier"):
format(rget(rad1)))
end
return M .. SH
else
return q("نْ", rad1)
end
end
-- Make form VII sound or final-weak verb.
local function make_form_vii_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
make_high_form_sound_final_weak_verb(base, vowel_spec, form_vii_nrad1(base, rad1), rad2, rad3)
end
conjugations["VII-sound"] = function(base, vowel_spec)
make_form_vii_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VII-final-weak"] = function(base, vowel_spec)
make_form_vii_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VII-hollow"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local nrad1 = form_vii_nrad1(base, rad1)
local vn = high_form_verbal_noun(nrad1, Y, rad3)
-- various stem bases
local nonpast_stem_base = nrad1
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, nrad1)
-- make parts
make_augmented_hollow_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["VII-geminate"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local nrad1 = form_vii_nrad1(base, rad1)
local vn = high_form_verbal_noun(nrad1, rad2, rad2)
-- various stem bases
local nonpast_stem_base = q(nrad1, A)
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, nrad1, U)
-- make parts
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
-- Return Form VIII verbal noun.
local function form_viii_verbal_noun(base, vowel_spec, rad1, rad2, rad3)
local final_weak = is_final_weak(base, vowel_spec)
rad3 = final_weak and HAMZA or rad3
return {high_form_verbal_noun(vowel_spec.form_viii_assim, rad2, rad3)}
end
-- Make form VIII sound or final-weak verb.
local function make_form_viii_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
-- check for irregular verb اِتَّخَذَ
if axadh_radicals(rad1, rad2, rad3) then
base.irregular = true
rad1 = T
end
make_high_form_sound_final_weak_verb(base, vowel_spec, vowel_spec.form_viii_assim, rad2, rad3)
end
conjugations["VIII-sound"] = function(base, vowel_spec)
make_form_viii_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VIII-final-weak"] = function(base, vowel_spec)
make_form_viii_sound_final_weak_verb(base, vowel_spec)
end
conjugations["VIII-hollow"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = form_viii_verbal_noun(base, vowel_spec, rad1, Y, rad3)
-- various stem bases
local nonpast_stem_base = vowel_spec.form_viii_assim
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, nonpast_stem_base)
-- make parts
make_augmented_hollow_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["VIII-geminate"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = form_viii_verbal_noun(base, vowel_spec, rad1, rad2, rad2)
-- various stem bases
local nonpast_stem_base = q(vowel_spec.form_viii_assim, A)
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, vowel_spec.form_viii_assim, U)
-- make parts
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["IX-sound"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = q(_I, rad1, SK, rad2, I, rad3, AA, rad3)
-- various stem bases
local nonpast_stem_base = q(rad1, SK, rad2, A)
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, rad1, SK, rad2, U)
-- make parts
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["IX-final-weak"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
make_high_form_sound_final_weak_verb(base, vowel_spec, q(rad1, SK, rad2), rad3, rad3)
end
-- Populate a sound or final-weak verb for any of the various high-numbered
-- augmented forms that have 5 consonants in the stem and the same pattern of
-- vowels. Some of these consonants in certain verb parts are w's, which leads to
-- apparent anomalies in certain stems of these parts, but these anomalies
-- are handled automatically in postprocessing, where we resolve sequences of
-- iwC -> īC, uwC -> ūC, w + sukūn + w -> w + shadda.
local function make_high5_form_sound_final_weak_verb(base, vowel_spec, rad1, rad2, rad3, rad4, rad5)
make_high_form_sound_final_weak_verb(base, vowel_spec, q(rad1, SK, rad2), q(rad3, SK, rad4), rad5)
end
-- Make form X sound or final-weak verb.
local function make_form_x_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
-- check for irregular verb اِسْتَحْيَا (also اِسْتَحَى)
local is_hayy = hayy_radicals(rad1, rad2, rad3)
local variant = vowel_spec.variant or "both"
if not is_hayy or variant == "long" or variant == "both" then
make_high5_form_sound_final_weak_verb(base, vowel_spec, S, T, rad1, rad2, rad3)
end
if is_hayy and (variant == "short" or variant == "both") then
base.irregular = true
-- Add alternative entries to the verbal paradigms. Any duplicates are removed during addition.
make_high_form_sound_final_weak_verb(base, vowel_spec, S .. SK .. T, rad1, rad3)
end
end
conjugations["X-sound"] = function(base, vowel_spec)
make_form_x_sound_final_weak_verb(base, vowel_spec)
end
conjugations["X-final-weak"] = function(base, vowel_spec)
make_form_x_sound_final_weak_verb(base, vowel_spec)
end
conjugations["X-hollow"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = q(base.reduced and "اِسْ" or "اِسْتِ", rad1, AA, rad3, AH)
-- various stem bases
local past_stem_base = q(base.reduced and "اِسْ" or "اِسْتَ", rad1)
local nonpast_stem_base = q(base.reduced and "سْ" or "سْتَ", rad1)
local past_pass_stem_base = q(base.reduced and "اُسْ" or "اُسْتُ", rad1)
-- make parts
make_augmented_hollow_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
conjugations["X-geminate"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = q("اِسْتِ", rad1, SK, rad2, AA, rad2)
-- various stem bases
local past_stem_base = q("اِسْتَ", rad1)
local nonpast_stem_base = q("سْتَ", rad1)
local past_pass_stem_base = q("اُسْتُ", rad1)
-- make parts
if base.altgem then
inflect_tense(base, "past", "", {q(past_stem_base, A, rad2, SH), all_same = 1},
past_endings_ay_12_person_only)
end
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn,
base.altgem and "[uncommon]" or nil)
end
conjugations["XI-sound"] = function(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local vn = q(_I, rad1, SK, rad2, II, rad3, AA, rad3)
-- various stem bases
local nonpast_stem_base = q(rad1, SK, rad2, AA)
local past_stem_base = q(_I, nonpast_stem_base)
local past_pass_stem_base = q(_U, rad1, SK, rad2, UU)
-- make parts
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
-- Probably no form XI final-weak, since already geminate in form; would behave as XI-sound.
-- Make form XII sound or final-weak verb.
local function make_form_xii_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
make_high5_form_sound_final_weak_verb(base, vowel_spec, rad1, rad2, W, rad2, rad3)
end
conjugations["XII-sound"] = function(base, vowel_spec)
make_form_xii_sound_final_weak_verb(base, vowel_spec)
end
conjugations["XII-final-weak"] = function(base, vowel_spec)
make_form_xii_sound_final_weak_verb(base, vowel_spec)
end
-- Make form XIII sound or final-weak verb.
local function make_form_xiii_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
make_high5_form_sound_final_weak_verb(base, vowel_spec, rad1, rad2, W, W, rad3)
end
conjugations["XIII-sound"] = function(base, vowel_spec)
make_form_xiii_sound_final_weak_verb(base, vowel_spec)
end
conjugations["XIII-final-weak"] = function(base, vowel_spec)
make_form_xiii_sound_final_weak_verb(base, vowel_spec)
end
-- Make a form XIV or XV sound or final-weak verb. Last radical appears twice (if`anlala / yaf`anlilu) so if it were
-- w or y you'd get if`anwā / yaf`anwī or if`anyā / yaf`anyī, i.e. unlike for most augmented verbs, the identity of
-- the radical matters.
local function make_form_xiv_xv_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3 = get_radicals_3(vowel_spec)
local lastrad = base.verb_form == "XV" and Y or rad3
make_high5_form_sound_final_weak_verb(base, vowel_spec, rad1, rad2, N, rad3, lastrad)
end
conjugations["XIV-sound"] = function(base, vowel_spec)
make_form_xiv_xv_sound_final_weak_verb(base, vowel_spec)
end
conjugations["XIV-final-weak"] = function(base, vowel_spec)
make_form_xiv_xv_sound_final_weak_verb(base, vowel_spec)
end
conjugations["XV-sound"] = function(base, vowel_spec)
make_form_xiv_xv_sound_final_weak_verb(base, vowel_spec)
end
-- Probably no form XV final-weak, since already final-weak in form; would behave as XV-sound.
-- Make form Iq or IIq sound or final-weak verb.
local function make_form_iq_iiq_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3, rad4 = get_radicals_4(vowel_spec)
local final_weak = is_final_weak(base, vowel_spec)
local vform = base.verb_form
local vn = vform == "IIq" and
q(TA, rad1, A, rad2, SK, rad3, (final_weak and IN or q(U, rad4))) or
q(rad1, A, rad2, SK, rad3, (final_weak and AAH or q(A, rad4, AH)))
local ta_pref = vform == "IIq" and TA or ""
local tu_pref = vform == "IIq" and TU or ""
-- various stem bases
local past_stem_base = q(ta_pref, rad1, A, rad2, SK, rad3)
local nonpast_stem_base = past_stem_base
local past_pass_stem_base = q(tu_pref, rad1, U, rad2, SK, rad3)
-- make parts
make_augmented_sound_final_weak_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base,
vn)
end
conjugations["Iq-sound"] = function(base, vowel_spec)
make_form_iq_iiq_sound_final_weak_verb(base, vowel_spec)
end
conjugations["Iq-final-weak"] = function(base, vowel_spec)
make_form_iq_iiq_sound_final_weak_verb(base, vowel_spec)
end
conjugations["IIq-sound"] = function(base, vowel_spec)
make_form_iq_iiq_sound_final_weak_verb(base, vowel_spec)
end
conjugations["IIq-final-weak"] = function(base, vowel_spec)
make_form_iq_iiq_sound_final_weak_verb(base, vowel_spec)
end
-- The نون of اِفْعَنْلَلَ, or the إدغام that replaces it. Where ل1 is weak the reference
-- prints the نون assimilated into it: model 427 (p.415) sets اِهْبَنْيَخَ as اِهْبَيَّخَ,
-- and its own footnote gives the root as أصْلُهُ هَبْيَخَ, so the ي is ل1 and the نون is
-- the wazn's. Emitting ل1 twice with a sukūn between them is how reduced forms V/VI
-- write their تاء التفعّل too -- postprocess_subs' "same letter separated by sukūn"
-- rule turns the pair into the šadda, and the مضارع and أمر come out اِهْبَيِّخْ /
-- يَهْبَيِّخُ, which is what the page prints.
--
-- Requested with |مدغم=, never inferred from the radical -- the same call forms V/VI,
-- VII and X already make. p.415 is the only افعنلل paradigm in the corpus with a weak
-- ل1 (the other five, اِفْعَنْلَلَ اِحْوَنْصَلَ اِحْرَنْجَمَ اِفْرَنْقَعَ اِسْلَنْطَأَ
-- اِطْلَنْفَأَ, are all sound there), and one attestation is not enough to make every
-- root of the shape assimilate for every caller on ar.wiktionary.
local function form_iiiq_n_augment(base, rad3)
if not base.reduced then
return N
end
if not (req(rad3, W) or req(rad3, Y)) then
error(("Form IIIq .reduced assimilates the نون into ل1, which must be و or ي, but saw %s"):
format(rget(rad3)))
end
return rad3
end
-- Make form IIIq sound or final-weak verb.
local function make_form_iiiq_sound_final_weak_verb(base, vowel_spec)
local rad1, rad2, rad3, rad4 = get_radicals_4(vowel_spec)
make_high5_form_sound_final_weak_verb(base, vowel_spec, rad1, rad2,
form_iiiq_n_augment(base, rad3), rad3, rad4)
end
conjugations["IIIq-sound"] = function(base, vowel_spec)
make_form_iiiq_sound_final_weak_verb(base, vowel_spec)
end
conjugations["IIIq-final-weak"] = function(base, vowel_spec)
make_form_iiiq_sound_final_weak_verb(base, vowel_spec)
end
conjugations["IVq-sound"] = function(base, vowel_spec)
local rad1, rad2, rad3, rad4 = get_radicals_4(vowel_spec)
local vn = q(_I, rad1, SK, rad2, I, rad3, SK, rad4, AA, rad4)
-- various stem bases
local past_stem_base = q(_I, rad1, SK, rad2, A, rad3)
local nonpast_stem_base = q(rad1, SK, rad2, A, rad3)
local past_pass_stem_base = q(_U, rad1, SK, rad2, U, rad3)
-- make parts
make_augmented_geminate_verb(base, vowel_spec, past_stem_base, nonpast_stem_base, past_pass_stem_base, vn)
end
-- Probably no form IVq final-weak, since already geminate in form; would behave as IVq-sound.
end
create_conjugations()
-------------------------------------------------------------------------------
-- Guts of main conjugation function --
-------------------------------------------------------------------------------
--W: Lexical exceptions — roots the sources conjugate SOUND in a form whose general
-- rule would not. Two rules are overridden here, and both are regular enough that the
-- exceptions have to be listed rather than derived:
--
-- * إعلال — a wāw or yāʾ second radical contracting to a long vowel (أَفَالَ,
-- اِسْتَجَابَ). The listed roots keep the consonant: أَفْيَلَ, اِسْتَجْوَبَ.
-- * إدغام — a geminate root assimilating rad2 into rad3 (عَالَّ, تَعَاثَّ). The listed
-- roots print the فكّ instead: عالَلَ, تَعاثَثَ.
--
-- Keyed by verb form .. ":" .. rad1..rad2..rad3, with the radicals as normalize_root()
-- leaves them (every hamza seat folded to bare ء). The form belongs in the key because
-- soundness is a fact about the lexeme *in that form*, not about the root: جوب is sound
-- in form X (اِسْتَجْوَبَ) and hollow in form I (جَابَ), and the source prints both.
--
-- Upstream's own commentary names several such verbs — izdawaja, istaḥwana, istajwaba,
-- ʕawira — and observes that a caller supplying a *lemma* needs no table, because the
-- lemma spells the soundness out. This repo's callers supply a root and a وزن, which do
-- not, so this is what carries it.
local SOUND_ROOTS = {
-- Form IV keeping a yāʾ middle radical (أَفْيَلَ). Attested verbs, not the صفة مشبهة
-- like أَخْيَف/خَيْفاء; each is sourced. Forms VII/VIII/X of these roots stay hollow.
["IV:خيل"] = true, -- أَخْيَلَ: أخيلت السماءُ تهيأت للمطر — المعجم الوسيط ج1 ص266 (وبه أَخالت أيضًا)
["IV:غيل"] = true, -- أَغْيَلَ: أغيلته فهي مُغْيِل، سقته الغَيْل — لسان العرب ج11 ص111 (وبه أغالت أيضًا)
["IV:حيج"] = true, -- أَحْيَجَ: أحيجت الأرضُ، على خلاف القياس — تاج العروس ج5 ص500
["IV:حين"] = true, -- أَحْيَنَ: أحين القومُ آن لهم أن يبلغوا ما أملوه — المعجم الوسيط ج1 ص212
["IV:خيف"] = true, -- أَخْيَفَ: أخيف الحاجُّ نزلوا خيف منى — كتاب الأفعال لابن القوطية ص35
["IV:ريف"] = true, -- أَرْيَفَ: أريفت الأرضُ إريافًا (خصبت) — المحيط في اللغة ج10 ص256
["IV:زين"] = true, -- أَزْيَنَ: أزينت الأرضُ، حسّنها عشبها — مقاييس اللغة ج3 ص41
-- أنطوان الدحداح، معجم تصريف الأفعال العربية. Each of these is a printed paradigm in
-- its own right under the model number given — the number on the page's own disk — and
-- is in fixtures/ as a whole page rather than as a single cited form.
["IV:ثوب"] = true, -- أَثْوَبَ / يُثْوِبُ، نموذج 226 (beside أَثَابَ from the same root)
["IV:نيء"] = true, -- أَنْيَأَ / يُنْيِئُ، نموذج 226 (أنيأ اللحمَ، من النِّيء)
["VII:سيء"] = true, -- اِنْسَيَأَ / يَنْسَيِئُ، نموذج 256
["VIII:عول"] = true, -- اِعْتَوَلَ / يَعْتَوِلُ، نموذج 266
["X:جوب"] = true, -- اِسْتَجْوَبَ / يَسْتَجْوِبُ، نموذج 286
["III:علل"] = true, -- عالَلَ / يُعالِلُ، نموذج 211
["III:فرر"] = true, -- فارَرَ / يُفارِرُ، نموذج 211
["VI:عثث"] = true, -- تَعاثَثَ / يَتَعاثَثُ، نموذج 241
["VI:غضض"] = true, -- تَغاضَضَ / يَتَغاضَضُ، نموذج 241
}
-- Given form, weakness and radicals, check to make sure the radicals present are allowable for the weakness. Hamzas on
-- alif/wāw/yāʾ seats are never allowed (should always appear as hamza-on-the-line), and various weaknesses have various
-- strictures on allowable consonants.
local function check_radicals(form, weakness, rad1, rad2, rad3, rad4)
local function hamza_check(index, rad)
if rad == HAMZA_ON_ALIF or rad == HAMZA_UNDER_ALIF or
rad == HAMZA_ON_W or rad == HAMZA_ON_Y then
error("Radical " .. index .. " is " .. rad .. " but should be ء (hamza on the line)")
end
end
local function check_waw_ya(index, rad)
if not is_waw_ya(rad) then
error("Radical " .. index .. " is " .. rad .. " but should be و or ي")
end
end
local function check_not_waw_ya(index, rad)
if is_waw_ya(rad) then
error("In a sound verb, radical " .. index .. " should not be و or ي")
end
end
hamza_check(rad1)
hamza_check(rad2)
hamza_check(rad3)
hamza_check(rad4)
if weakness == "assimilated" or weakness == "assimilated+final-weak" then
if rad1 ~= W then
error("Radical 1 is " .. rad1 .. " but should be و")
end
-- don't check that non-assimilated form I verbs don't have wāw as their
-- first radical because some form-I verbs exist where a first-radical wāw
-- behaves as sound, e.g. wajuha yawjuhu "to be distinguished".
end
if weakness == "final-weak" or weakness == "assimilated+final-weak" then
if rad4 then
check_waw_ya(4, rad4)
else
check_waw_ya(3, rad3)
end
elseif vform_supports_final_weak(form) then
-- non-final-weak verbs cannot have weak final radical if there's a corresponding
-- final-weak verb category. I think this is safe. We may have problems with
-- ḥayya/ḥayiya yaḥyā if we treat it as a geminate verb.
if rad4 then
check_not_waw_ya(4, rad4)
else
check_not_waw_ya(3, rad3)
end
end
if weakness == "hollow" then
check_waw_ya(2, rad2)
-- don't check that non-hollow verbs in forms that support hollow verbs
-- don't have wāw or yāʾ as their second radical because some verbs exist
-- where a middle-radical wāw/yāʾ behaves as sound, e.g. form-VIII izdawaja
-- "to be in pairs".
end
if weakness == "geminate" then
if rad4 then
error("Internal error: No geminate quadrilaterals, should not be seen")
end
if rad2 ~= rad3 then
error("Weakness is geminate; radical 3 is " .. rad3 .. " but should be same as radical 2 " .. rad2)
end
elseif vform_supports_geminate(form) then
-- non-geminate verbs cannot have second and third radical same if there's
-- a corresponding geminate verb category. I think this is safe. We
-- don't fuss over double wāw or double yāʾ because this could legitimately
-- be a final-weak verb with middle wāw/yāʾ, treated as sound.
if rad4 then
error("Internal error: No quadrilaterals should support geminate verbs")
end
if rad2 == rad3 and not is_waw_ya(rad2) and not SOUND_ROOTS[form .. ":" .. rad1 .. rad2 .. rad3] then
error("Weakness is '" .. weakness .. "'; radical 2 and 3 are same at " .. rad2 .. " but should not be; consider making weakness 'geminate'")
end
end
end
-- array of substitutions; each element is a 2-entry array FROM, TO; do it
-- this way so the concatenations only get evaluated once
local postprocess_subs = {
-- reorder short-vowel + shadda -> shadda + short-vowel for easier processing
{"(" .. AIU .. ")" .. SH, SH .. "%1"},
----------same letter separated by sukūn should instead use shadda---------
------------happens e.g. in kun-nā "we were".-----------------
{"(.)" .. SK .. "%1", "%1" .. SH},
---------------------------- assimilated verbs ----------------------------
-- iw, iy -> ī (assimilated verbs)
{I .. W .. SK, II},
{I .. Y .. SK, II},
-- uw, uy -> ū (assimilated verbs)
{U .. W .. SK, UU},
{U .. Y .. SK, UU},
-------------- final -yā uses tall alif not alif maqṣūra ------------------
{"(" .. Y .. SH .. "?" .. A .. ")" .. AMAQ, "%1" .. ALIF},
----------------------- handle hamza assimilation -------------------------
-- initial hamza + short-vowel + hamza + sukūn -> hamza + long vowel
{HAMZA .. A .. HAMZA .. SK, HAMZA .. A .. ALIF},
{HAMZA .. I .. HAMZA .. SK, HAMZA .. I .. Y},
{HAMZA .. U .. HAMZA .. SK, HAMZA .. U .. W}
}
local postprocess_tr_subs = {
{"ī([" .. vowels .. "y*])", "iy%1"},
{"ū([" .. vowels .. "w*])", "uw%1"},
{"(.)%*", "%1%1"}, -- implement shadda
---------------------------- assimilated verbs ----------------------------
-- iw, iy -> ī (assimilated verbs)
{"iw([^" .. vowels .. "w])", "ī%1"},
{"iy([^" .. vowels .. "y])", "ī%1"},
-- uw, uy -> ū (assimilated verbs)
{"uw([^" .. vowels .. "w])", "ū%1"},
{"uy([^" .. vowels .. "y])", "ū%1"},
----------------------- handle hamza assimilation -------------------------
-- initial hamza + short-vowel + hamza + sukūn -> hamza + long vowel
{"ʔaʔ(" .. NV .. ")", "ʔā%1"},
{"ʔiʔ(" .. NV .. ")", "ʔī%1"},
{"ʔuʔ(" .. NV .. ")", "ʔū%1"},
}
-- Post-process verb parts to eliminate phonological anomalies. Many of the changes, particularly the tricky ones,
-- involve converting hamza to have the proper seat. The rules for this are complicated and are documented on the
-- [[w:Hamza]] Wikipedia page. In some cases there are alternatives allowed, and we handle them below by returning
-- multiple possibilities.
--
-- ORTHOGRAPHIC EXEMPTIONS (`orth`, set on `base` by the code that knows the fact)
--
-- postprocess_subs above and ar_utilities.process_hamza apply general Arabic orthography
-- to a finished word. A handful of the reference's verb spellings are decisions neither
-- pass can make, because what settles them is not in the string: that a hamza is a
-- *radical*, that a short vowel is the stem's rather than iʿrāb, that a verb is form VIII
-- rather than form I. Each of the three has both halves in the corpus. Form I أَتَى and
-- form VIII اِئْتَمَنَ reach this function's 1s مضارع as the same ءَ + ءْ + ت, and the book
-- prints آتِي for the one and أَأْتَمِنُ for the other (#14). شَأَى's imperative اُشْؤُ and
-- جَرُؤَ's past both end in hamza + a short vowel, and only the first of the two vowels
-- belongs to the stem (#12).
--
-- module/ar-utilities.lua is byte-identical to module/vendor/ar-utilities.lua, and its
-- other callers are on-wiki nominal templates that cannot be regression-tested from this
-- repo, so none of this is fixed by editing it. Each case is instead handled on the
-- caller's side of the shared passes, in one of three ways:
--
-- * park the sequence on a placeholder so a shared rule cannot see it, and restore it
-- afterwards -- #10's original mechanism, now also #14's;
-- * add a spelling beside whatever the shared code returns, because the reference
-- attests both and this module already carries alternatives elsewhere -- #16, #17; or
-- * rewrite the sequence, either before the shared pass so its rule never matches
-- (#12's past clause writes the ā as an ألف مقصورة, which the madda rule does not
-- look for) or after it, where the shared code has made a decision the caller's fact
-- overrides (#12's seating clause, #18's).
--
-- Adding one is three things: a key in `base.orth` set by the builder that knows the
-- fact, a clause here naming the finding, and the XFAIL entries in tests/run.lua deleted
-- in the same commit.
--
-- Three of the clauses below are unconditional, and deliberately so: they repair a
-- spelling the shared code produces that Arabic does not use (#18), restore one it
-- discards (#17), or extend one of its rules to a seat it never reaches (#15). None of
-- the three needs a fact from the caller -- only a place to live that is not the shared
-- file.
local function postprocess_term(term, orth)
if term == "?" then
return "?"
end
orth = orth or {}
-- Phase 1: the reductions in postprocess_subs, with the parked exemptions held out
-- across them. `park_w` is a parameter rather than read from `orth` because #16 runs
-- this phase both ways -- see below.
local function reduce(t, park_w)
-- Add BORDER at text boundaries.
t = BORDER .. t .. BORDER
-- #10: a word-initial hamzat wasl + wāw + sukūn is how a form-I mithal that keeps
-- its wāw spells its imperative (اِوْنَ، اِوْجَلْ). The iw -> ī reduction is right
-- everywhere else and cannot simply be dropped -- it is what turns the form VIII
-- mithal past اِوْتَعَدَ into اِيتَعَدَ, in the same word-initial position, so position
-- alone doesn't separate the two cases.
if park_w then
t = rsub(t, BORDER .. ALIF .. I .. W .. SK, BORDER .. ALIF .. I .. KEEP_W_PH .. SK)
end
-- #14: the reference spells the 1s مضارع of a hamza-initial form VIII analytically,
-- أَأْتَمِنُ -- the prefix hamza, then the quiescent radical hamza on its own seat --
-- where the أَ + أْ -> آ contraction below and the alif-madda rule in process_hamza
-- between them return آتَمِنُ. Form I of a hamza-initial root arrives here with the
-- identical sequence and *is* printed contracted (آكُلُ، آخُذُ، آتِي), so the string
-- cannot decide this and the flag does.
if orth.analytic_hamza then
t = rsub(t, BORDER .. HAMZA .. A .. HAMZA .. SK,
BORDER .. HAMZA .. A .. KEEP_HAMZA_PH .. SK)
end
-- Do the main post-processing, based on the pattern substitutions in postprocess_subs.
for _, sub in ipairs(postprocess_subs) do
t = rsub(t, sub[1], sub[2])
end
-- #12, the past half: a form-I final-weak verb on a wāw rad3 builds its past 3ms ā
-- as a real alif (دَعَا), and after a hamza rad2 that puts hamza-on-alif + fatḥa +
-- alif in front of process_hamza's madda rule (أَا -> آ), which swallows the seat:
-- شَأَى comes out شَآ. The rule itself is right -- it is what gives قَرَأَ its dual قَرَآ --
-- and it keys on ALIF, not on AMAQ, which is why the module already gets رَأَى and
-- نَأَى right: a yāʾ rad3 never produces the second alif. So the ā is written as an
-- ألف مقصورة here instead, which sidesteps the madda rule rather than suppressing
-- it. Only the past 3ms of an -aw verb reaches this sequence; every derived form
-- already ends its past 3ms in AMAQ.
if orth.hamza_rad2_final_weak then
t = rsub(t, HAMZA .. A .. ALIF .. BORDER, HAMZA .. A .. AMAQ .. BORDER)
end
t = t:gsub(KEEP_W_PH, W)
-- Restored as a plain hamza, not a seat: the seating pass below still has to place it,
-- and gets it right (a quiescent medial hamza after a fatḥa takes the alif).
t = t:gsub(KEEP_HAMZA_PH, HAMZA)
return (t:gsub(BORDER, ""))
end
-- Phase 2: hamza seats. Returns the list of spellings for one reduced term.
local function seat(t)
if not rfind(t, HAMZA) then
return { t }
end
-- #17: after a long ū, process_hamza treats و + ؤُ + و as having no acceptable
-- original spelling and returns only its two alternatives (ئُو، ءُو) -- while the
-- same function keeps the original beside the alternative after a long ā, which is
-- what gives سَاؤُوا. The reference prints the wāw seat after a long ū throughout
-- (يَسُوؤُونَ، تَسُوؤُونَ، سُوؤُوا, against its own تَسُوئِينَ / سُوئِي for the kasra: the
-- seat follows the hamza's own vowel). So the discarded spelling is added back
-- here, after theirs rather than instead of them -- the same order the long-ā
-- branch of that function already uses.
local waw_seat
if rfind(t, W .. HAMZA .. U .. W) then
local parked = t:gsub(W .. HAMZA .. U .. W, W .. WAW_SEAT_PH .. U .. W)
waw_seat = ar_utilities.process_hamza(parked:gsub(HAMZA, HAMZA_PH))[1]
waw_seat = waw_seat:gsub(WAW_SEAT_PH, HAMZA_ON_W)
end
local out = ar_utilities.process_hamza(t:gsub(HAMZA, HAMZA_PH))
if waw_seat then
out[#out + 1] = waw_seat
end
-- #12, the imperative/jussive half: apocopation strands the radical hamza at the
-- end of the word, where process_hamza takes its seat from the *preceding* letter's
-- vowel and, finding a sukūn, drops it on the line -- اُشْءُ, أَفْءِ. That rule is right
-- for a hamza whose own vowel is iʿrāb (جُزْء), and cannot be made position-sensitive
-- inside the shared file: the fatḥa of جَرُؤَ is the ماضٍ ending and the ḍamma before
-- it rightly wins the seat. Here the short vowel left after rad3 goes is the stem's
-- own, which is the fact this flag carries. The reference seats it: اُشْؤُ (p160, شأو,
-- form I) and أَفْإِ (p300, فأو, form IV) -- two roots, two measures, two pages, and
-- the two vowels between them.
--
-- The seat is the wāw for a ḍamma and the alif otherwise; #18's substitution below
-- then writes the alif's hamza underneath when the vowel is a kasra, which is how
-- the alif branch comes out as إ. That is not a third rule invented here: the same
-- إ is what p368's اِرْتَإِ and p182's imperative إ already print, and what the module
-- already produces for both, having reached the alif seat by its own route (a
-- preceding fatḥa, and word-initial position). Only p300 needed the seat itself.
--
-- Gated on a preceding sukūn, which is the whole of what the two pages attest. The
-- hamza after a *long* vowel is left alone (وأي's passive jussive تُوءَ), where the
-- shared code also leaves it on the line and no page here prints the slot; and the
-- pattern wants the vowel directly after the hamza, so a šadda'd seat (p271's رَأِّ)
-- is not matched, the same gate #18 gets for free.
if orth.hamza_rad2_final_weak then
for i, v in ipairs(out) do
v = rsub(BORDER .. v .. BORDER, SK .. HAMZA .. "(" .. AIU .. ")" .. BORDER,
function(vowel)
return SK .. (vowel == U and HAMZA_ON_W or HAMZA_ON_ALIF) .. vowel .. BORDER
end)
out[i] = (v:gsub(BORDER, ""))
end
end
-- #15: a hamza left on the line, carrying a fatḥa, with an alif after it, is
-- printed as a madda -- but not when that would end the word directly after an
-- alif. The reference sets يَداآنِ / تَداآنِ (p201, دوء), يَهاآنِ / تَهاآنِ (p242,
-- هوء) and يَسُوآنِ / تَسُوآنِ (p157, سوء) for the مضارع duals, and سُوآ for p157's
-- imperative dual, while the same three verbs print their *word-final* duals
-- داءا / هاءا / سَاءَا with the hamza on the line -- so the exception is carried by
-- the preceding alif, not by the position alone: سُوآ is word-final too and does
-- contract, after a long ū. Ten cells, three roots, three pages, and the blocked
-- case attested on all three. process_hamza applies this rule only to a hamza it
-- has seated on an alif (which is what gives تَدَرْبَآ); after a long vowel it
-- leaves the seat on the line and the rule never fires, so the extension is here.
--
-- Confined to a hamza after a *long vowel*, which is the whole of what those three
-- pages attest. Written without that gate it also contracts the فَعْلان participle
-- سَوْءَان to سَوْآن -- a hamza after the sukūn of a diphthong, not after a long vowel,
-- in a slot no fixture covers and no page here prints. The mater carries no sukūn
-- in a long vowel as this module builds one, so requiring the two to be adjacent
-- is the gate.
for i, v in ipairs(out) do
v = BORDER .. v .. BORDER
v = rsub(v, ALIF .. HAMZA .. A .. ALIF .. BORDER, ALIF .. NO_MADDA_PH .. A .. ALIF .. BORDER)
v = rsub(v, "([" .. AMAD .. ALIF .. W .. Y .. "])" .. HAMZA .. A .. ALIF, "%1" .. AMAD)
v = v:gsub(NO_MADDA_PH, HAMZA)
out[i] = (v:gsub(BORDER, ""))
end
-- #18: a hamza seated on an alif and carrying a bare kasra is written *below* the
-- alif. The seat is chosen from the preceding letter's vowel, which is right when
-- the hamza's own vowel is iʿrāb (مَلْجَأٍ) and is why the rule lives in the shared
-- code; in a verb there is no iʿrāb, and the kasra that follows an apocopated
-- radical hamza is the stem's own -- so اِرْتَأَى's jussive is اِرْتَإِ.
--
-- Not when the alif also carries a šadda, and the corpus is what says so: رَأَّى
-- (p271, form II of the *same* root رأو as p368's اِرْتَأَى) prints its apocopated
-- imperative رَأِّ, hamza above, where the doubled radical puts a šadda on the seat.
-- Written unconditionally first, this rule broke that cell and nothing else in 379
-- paradigms, which is both the counter-example and its own control: one root, two
-- forms, two pages, and the presence of the šadda the only difference between them.
-- No test for the šadda is needed: postprocess_subs has already reordered it in
-- front of the vowel, so أ + šadda + kasra simply isn't the sequence below.
for i, v in ipairs(out) do
out[i] = v:gsub(HAMZA_ON_ALIF .. I, HAMZA_UNDER_ALIF .. I)
end
return out
end
local out = seat(reduce(term, orth.keep_initial_w))
-- #16: a retained-wāw مثال reduces اِوْ to اِيْ in the imperative on p240 (اِيْجَعْ, all
-- five cells) and does not on p247 (اِوْنَ) -- the book carries both spellings and
-- grammar allows both, so the module carries both too, the way it already carries
-- سَائُوا | سَاؤُوا. #10's park is still right; what was missing is the second form
-- beside the first. Widening loose() instead would retire the suite's only check on
-- the mithal-wāwī / mithal-yāʾī imperative distinction, which is why this is here.
if orth.keep_initial_w then
for _, reduced in ipairs(seat(reduce(term, false))) do
local seen = false
for _, v in ipairs(out) do
if v == reduced then
seen = true
break
end
end
if not seen then
out[#out + 1] = reduced
end
end
end
if #out == 1 then
return out[1]
end
return out
end
local function postprocess_translit(translit)
if translit == "?" then
return "?"
end
-- Add BORDER at text boundaries.
translit = BORDER .. translit .. BORDER
-- Do the main post-processing, based on the pattern substitutions in postprocess_tr_subs.
for _, sub in ipairs(postprocess_tr_subs) do
translit = rsub(translit, sub[1], sub[2])
end
translit = translit:gsub(BORDER, "")
return translit
end
-- #13: نقل الحركة + إدغام in a لفيف مقرون verb outside form I. Where the paradigm brings
-- two vowelled yāʾs together on a *quiescent* radical, the reference moves the first
-- yāʾ's vowel back onto that radical and geminates the pair: أَحْيَيَا -> أَحَيَّا,
-- يُحْيِيَانِ / تُحْيِيَانِ -> يُحِيَّانِ / تُحِيَّانِ, أَحْيِيَا -> أَحِيَّا (p302, form IV on حيي),
-- and the same five slots of اِسْتَحْيَا (p389, form X on the same root).
--
-- Only the نقل is done here. The إدغام is postprocess_subs' own "same letter separated
-- by a sukūn -> šadda" rule, which already puts the šadda in front of the vowel the way
-- the rest of the module writes it -- so this has to run *before* postprocess_forms(),
-- and does, from conjugate_verb().
--
-- The gate is that sukūn, and the reference's pages calibrate it from both sides:
-- * a *long* vowel in front of the first yāʾ can host nothing, and عايا (p287, form
-- III on عيي) prints يُعايِيانِ، تُعايِيانِ and عايِيا with both yāʾs. The pattern below
-- does not match them because there is no consonant + sukūn there to match;
-- * the second yāʾ has to carry a short vowel of its own. The control is in the same
-- columns of the pages that do contract: يُحْيِي (3ms), يُحْيِينَ (3fp) and تُحْيِينَ
-- (2fs), where it is the mater of a long ī, are printed uncontracted, and the
-- pattern does not match those either.
-- Between them the two conditions pick out exactly the five slots of p302 and p389 that
-- contract, against the twenty-odd cells of the same two paradigms that do not.
--
-- Form I is excluded, and by attestation rather than by phonology: حَيِيَ (p229, 017_159)
-- and عَيِيَ (p250, 238_159) put the identical consonant + sukūn + yāʾ sequence in their
-- مضارع and imperative duals and both print them uncontracted -- يَحْيَيانِ، اِحْيَيا،
-- يَعْيَيانِ، اِعْيَيا. Form I has its own version of this alternation, حَيَّ beside حَيِيَ,
-- and it is a different mechanism: the vowel is dropped rather than moved, which is why
-- make_form_i_hayy_verb() spells it out as a stem pair instead.
--
-- Added beside the uncontracted form and never instead of it: both spellings are
-- current, and form X already carries the two the module builds from its own stems
-- (اِسْتَحْيَيَا | اِسْتَحَيَا), so this is a third entry in a slot that already had a choice.
local NAQL_FROM = "(.)" .. SK .. Y .. "(" .. AIU .. ")" .. Y .. "(" .. AIU .. ")"
local NAQL_TO = "%1%2" .. Y .. SK .. Y .. "%3"
local function add_naql_idgham_forms(base)
-- "none" is a user-supplied paradigm with no verb form to reason from; form I is
-- excluded on the evidence above.
if base.verb_form == "I" or base.verb_form == "none" then
return
end
-- Collected first and inserted afterwards: inserting into base.forms while iterating
-- over it would let a contracted form be re-read as a source in the same pass.
local additions
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
local naql, changed = rsubb(form.form, NAQL_FROM, NAQL_TO)
if changed then
additions = additions or {}
additions[#additions + 1] = {slot, {form = naql, footnotes = form.footnotes}}
end
end
end
if additions then
for _, addition in ipairs(additions) do
iut.insert_form(base.forms, addition[1], addition[2])
end
end
end
local function postprocess_forms(base)
local converted_values = {}
for slot, forms in pairs(base.forms) do
local need_dedup = false
for i, form in ipairs(forms) do
local term = postprocess_term(form.form, base.orth)
local translit = form.translit and postprocess_translit(form.translit) or nil
if term ~= form.form or translit ~= form.translit then
need_dedup = true
end
converted_values[i] = {term, translit}
end
if need_dedup then
local temp_dedup = {}
for i = 1, #forms do
local new_term, new_translit = unpack(converted_values[i])
if type(new_term) == "table" then
for _, nt in ipairs(new_term) do
local new_formobj = {
form = nt,
translit = new_translit,
footnotes = forms[i].footnotes,
}
iut.insert_form(temp_dedup, "temp", new_formobj)
end
else
local new_formobj = {
form = new_term,
translit = new_translit,
footnotes = forms[i].footnotes,
}
iut.insert_form(temp_dedup, "temp", new_formobj)
end
end
base.forms[slot] = temp_dedup.temp
end
end
end
local function process_slot_overrides(base)
for slot, forms in pairs(base.slot_overrides) do
local existing_values = base.forms[slot]
base.forms[slot] = nil
for _, form in ipairs(forms) do
-- + in active participle for form I requests slot ap1
if form.form == "+" and (base.verb_form ~= "I" or slot ~= "ap") then
if not existing_values then
error(("Slot '%s' requested the default value but no such value available"):format(slot))
end
-- We maintain an invariant that no two slots share a form object (although they may share the footnote
-- lists inside the form objects). However, there is no need to copy the form objects here because there
-- is a one-to-one correspondence between slots and slot overrides, i.e. you can't have a default value
-- go into two slots.
insert_form_or_forms(base, slot, existing_values, "allow overrides", form.uncertain)
elseif default_indicator_to_active_participle_slot[form.form] then
if form.form == "++" then
if slot ~= "vn" and slot ~= "ap" and slot ~= "pp" then
error(("Secondary default value request '++' only applicable to verbal nouns and pariciples, but found in slot '%s'"):
format(slot))
end
else
if slot ~= "ap" then
error(("Secondary default value request '%s' only applicable to active pariciples, but found in slot '%s'"):
format(form.form, slot))
end
end
local secondary_default_slot =
slot == "vn" and "vn2" or slot == "pp" and "pp2" or
default_indicator_to_active_participle_slot[form.form]
local existing_values = base.forms[secondary_default_slot]
if not existing_values then
error(("Slot '%s' requested a secondary default value using '%s' but no such value available"):
format(slot, form.form))
end
-- See comment above about the lack of need to copy the form objects.
insert_form_or_forms(base, slot, existing_values, "allow overrides", form.uncertain)
-- To make sure there aren't shared form objects.
base.forms[secondary_default_slot] = nil
else
insert_form_or_forms(base, slot, form, "allow overrides", form.uncertain)
end
end
end
-- Now, for non-stative form-I verbs, fill the active participle slot from ap1 unless it should be missing (e.g.
-- passive-only or user specified 'ap:-').
if base.verb_form == "I" and not base.forms.ap and base.forms.ap1 and not skip_slot(base, "ap") then
local saw_non_stative = false
for _, vowel_spec in ipairs(base.conj_vowels) do
if req(vowel_spec.past, A) then
saw_non_stative = true
break
end
end
if saw_non_stative then
base.forms.ap = base.forms.ap1
-- To make sure there aren't shared form objects.
base.forms.ap1 = nil
end
end
end
local function handle_lemma_linked(base)
-- Compute linked versions of potential lemma slots, for use in {{ar-verb}}. We substitute the original lemma
-- (before removing links) for forms that are the same as the lemma, if the original lemma has links.
for _, slot in ipairs(export.potential_lemma_slots) do
if base.forms[slot] then
insert_form_or_forms(base, slot .. "_linked", iut.map_forms(base.forms[slot], function(form)
if form == base.lemma and rfind(base.linked_lemma, "%[%[") then
return base.linked_lemma
else
return form
end
end))
end
end
end
-- Process specs given by the user using 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'.
local function process_addnote_specs(base)
for _, spec in ipairs(base.addnote_specs) do
for _, slot_spec in ipairs(spec.slot_specs) do
slot_spec = "^" .. slot_spec .. "$"
for slot, forms in pairs(base.forms) do
if rfind(slot, slot_spec) then
-- To save on memory, side-effect the existing forms.
for _, form in ipairs(forms) do
form.footnotes = iut.combine_footnotes(form.footnotes, spec.footnotes)
end
end
end
end
end
end
local function add_missing_links_to_forms(base)
-- Any forms without links should get them now. Redundant ones will be stripped later.
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
form.form = "[[" .. form.form .. "]]"
end
end
end
end
local function conjugate_verb(base)
construct_stems(base)
-- Orthographic exemptions the shared hamza/reduction passes can't decide for
-- themselves; see the block comment on postprocess_term(). Most are set by the
-- stem builder that knows the fact, so this table has to exist before dispatch.
base.orth = base.orth or {}
for _, vowel_spec in ipairs(base.conj_vowels) do
-- Reconstruct conjugation type from verb form and (possibly inferred) weakness.
conj_type = base.verb_form .. "-" .. vowel_spec.weakness
-- #14: a hamza-initial form VIII spells its 1s مضارع analytically (أَأْتَمِنُ), where
-- form I of a hamza-initial root contracts to a madda (آتِي) from the identical
-- sequence. Declared here rather than in the four VIII builders because it holds
-- for all of them and depends on nothing else they compute.
if base.verb_form == "VIII" and vowel_spec.rad1 and rfind(rget(vowel_spec.rad1) or "", HAMZA_ANY) then
base.orth.analytic_hamza = true
end
-- #12: a final-weak verb whose rad2 is a hamza. Two of the shared passes read that
-- radical as an ordinary word-final hamza and get it wrong in the two slots where
-- rad3 stops being a consonant -- see the two clauses in postprocess_term(). Like
-- #14 this is declared here rather than in a builder: it holds for every form the
-- root can take (شأو, فأو, رأو, وأي in the corpus, forms I, II, IV and VIII) and
-- depends on nothing else the builders compute.
if rfind(vowel_spec.weakness or "", "final%-weak") and vowel_spec.rad2 and
rfind(rget(vowel_spec.rad2) or "", HAMZA_ANY) then
base.orth.hamza_rad2_final_weak = true
end
-- Check that the conjugation type is recognized.
if not conjugations[conj_type] then
error("Unknown conjugation type '" .. conj_type .. "'")
end
-- The way the conjugation functions work is they always add entries to the appropriate parts of the paradigm
-- (each of which is an array), rather than setting the values. This makes it possible to call more than one
-- conjugation function and essentially get a paradigm of the "either A or B" kind. Doing this may insert
-- duplicate entries into a particular paradigm part, but this is not a problem because we check for duplicate
-- entries when adding them, and don't insert in that case.
conjugations[conj_type](base, vowel_spec)
end
-- #13: before postprocess_forms(), which supplies the إدغام half of the alternation.
add_naql_idgham_forms(base)
postprocess_forms(base)
process_slot_overrides(base)
-- This should happen before add_missing_links_to_forms() so that the comparison `form == base.lemma` in
-- handle_lemma_linked() works correctly and compares unlinked forms to unlinked forms.
handle_lemma_linked(base)
process_addnote_specs(base)
if not base.alternant_multiword_spec.args.noautolinkverb then
add_missing_links_to_forms(base)
end
end
local function parse_indicator_spec(angle_bracket_spec)
-- Store the original angle bracket spec so we can reconstruct the overall conj spec with the lemma(s) in them.
local base = {
angle_bracket_spec = angle_bracket_spec,
conj_vowels = {},
root_consonants = {},
user_stem_overrides = {},
user_slot_overrides = {},
slot_explicitly_missing = {},
slot_uncertain = {},
slot_override_uses_default = {},
addnote_specs = {},
}
local function parse_err(msg)
error(msg .. ": " .. angle_bracket_spec)
end
local function fetch_footnotes(separated_group)
local footnotes
for j = 2, #separated_group - 1, 2 do
if separated_group[j + 1] ~= "" then
parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'")
end
if not footnotes then
footnotes = {}
end
table.insert(footnotes, separated_group[j])
end
return footnotes
end
local inside = angle_bracket_spec:match("^<(.*)>$")
assert(inside)
local segments = put.parse_multi_delimiter_balanced_segment_run(inside, {{"[", "]"}, {"<", ">"}})
local dot_separated_groups = put.split_alternating_runs_and_strip_spaces(segments, "%.")
-- The first dot-separated element must specify the verb form, e.g. IV or IIq. If the form is I, it needs to include
-- the the past and non-past vowels, e.g. I/a~u for kataba ~ yaktubu. More than one vowel can be given,
-- comma-separated, and more than one past~non-past pair can be given, slash-separated, e.g. I/a,u~u/i~a for form I
-- كمل, which can be conjugated as kamala/kamula ~ yakmulu or kamila ~ yakmalu. An individual vowel spec must be one
-- of a, i or u and in general (a) at least one past~non-past pair most be given, and (b) both past and non-past
-- vowels must be given even though sometimes the vowel can be determined from the unvocalized form. An exception is
-- passive-only verbs, where the vowels can't in general be determined (except indirectly in some cases by looking
-- at an associated non-passive verb); in that case, the vowel~vowel spec can left out.
local slash_separated_groups = put.split_alternating_runs_and_strip_spaces(dot_separated_groups[1], "/")
local form_spec = slash_separated_groups[1]
base.form_footnotes = fetch_footnotes(form_spec)
if form_spec[1] == "" then
parse_err("Missing verb form")
end
if not allowed_vforms_with_weakness_set[form_spec[1]] then
parse_err(("Unrecognized verb form '%s', should be one of %s"):format(
form_spec[1], list_to_text(allowed_vforms, nil, " or ")))
end
if form_spec[1]:find("%-") then
base.verb_form, base.explicit_weakness = form_spec[1]:match("^(.-)%-(.*)$")
else
base.verb_form = form_spec[1]
end
if #slash_separated_groups > 1 then
if base.verb_form ~= "I" then
parse_err(("Past~non-past vowels can only be specified when verb form is I, but saw form '%s'"):format(
base.verb_form))
end
for i = 2, #slash_separated_groups do
local slash_separated_group = slash_separated_groups[i]
local tilde_separated_groups = put.split_alternating_runs_and_strip_spaces(slash_separated_group, "~")
if #tilde_separated_groups ~= 2 then
parse_err(("Expected two tilde-separated vowel specs: %s"):format(table.concat(slash_separated_group)))
end
local function parse_conj_vowels(tilde_separated_group, vtype)
local conj_vowel_objects = {}
local comma_separated_groups = put.split_alternating_runs_and_strip_spaces(tilde_separated_group, ",")
for _, comma_separated_group in ipairs(comma_separated_groups) do
local conj_vowel = comma_separated_group[1]
if conj_vowel ~= "a" and conj_vowel ~= "i" and conj_vowel ~= "u" then
parse_err(("Expected %s conjugation vowel '%s' to be one of a, i or u in %s"):format(
vtype, conj_vowel, table.concat(slash_separated_group)))
end
conj_vowel = dia[conj_vowel]
local conj_vowel_footnotes = fetch_footnotes(comma_separated_group)
-- Try to use strings when possible as it makes q() significantly more efficient.
if conj_vowel_footnotes then
table.insert(conj_vowel_objects, {form = conj_vowel, footnotes = conj_vowel_footnotes})
else
table.insert(conj_vowel_objects, conj_vowel)
end
end
return conj_vowel_objects
end
local conj_vowel_spec = {
past = parse_conj_vowels(tilde_separated_groups[1], "past"),
nonpast = parse_conj_vowels(tilde_separated_groups[2], "non-past"),
}
table.insert(base.conj_vowels, conj_vowel_spec)
end
end
for i = 2, #dot_separated_groups do
local dot_separated_group = dot_separated_groups[i]
local first_element = dot_separated_group[1]
if first_element == "addnote" then
local spec_and_footnotes = fetch_footnotes(dot_separated_group)
if #spec_and_footnotes < 2 then
parse_err("Spec with 'addnote' should be of the form 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'")
end
local slot_spec = table.remove(spec_and_footnotes, 1)
local slot_spec_inside = rmatch(slot_spec, "^%[(.*)%]$")
if not slot_spec_inside then
parse_err("Internal error: slot_spec " .. slot_spec .. " should be surrounded with brackets")
end
local slot_specs = rsplit(slot_spec_inside, ",")
-- FIXME: Here, [[Module:it-verb]] called strip_spaces(). Generally we don't do this. Should we?
table.insert(base.addnote_specs, {slot_specs = slot_specs, footnotes = spec_and_footnotes})
elseif first_element:find("^var:") then
if #dot_separated_group > 1 then
parse_err(("Can't attach footnotes to 'var:' spec '%s'"):format(first_element))
end
base.variant = first_element:match("^var:(.*)$")
elseif first_element:find("^I+V?:") then
local root_cons, root_cons_value = first_element:match("^(I+V?):(.*)$")
local root_index
if root_cons == "I" then
root_index = 1
elseif root_cons == "II" then
root_index = 2
elseif root_cons == "III" then
root_index = 3
elseif root_cons == "IV" then
root_index = 4
if not base.verb_form:find("q$") then
parse_err(("Can't specify root consonant IV for non-quadriliteral verb form '%s': %s"):format(
base.verb_form, first_element))
end
end
local cons, translit = root_cons_value:match("^(.*)//(.*)$")
if not cons then
cons = root_cons_value
end
local root_footnotes = fetch_footnotes(dot_separated_group)
if not translit and not root_footnotes then
base.root_consonants[root_index] = cons
else
base.root_consonants[root_index] = {form = cons, translit = translit, footnotes = root_footnotes}
end
elseif first_element:find("^[a-z][a-z0-9_]*:") then
local slot_or_stem, remainder = first_element:match("^(.-):(.*)$")
dot_separated_group[1] = remainder
local comma_separated_groups = put.split_alternating_runs_and_strip_spaces(dot_separated_group, "[,،]")
if overridable_stems[slot_or_stem] then
if base.user_stem_overrides[slot_or_stem] then
parse_err("Overridable stem '" .. slot_or_stem .. "' specified twice")
end
base.user_stem_overrides[slot_or_stem] = overridable_stems[slot_or_stem](comma_separated_groups,
{prefix = slot_or_stem, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
else -- assume a form override; we validate further later when the possible slots are available
if base.user_slot_overrides[slot_or_stem] then
parse_err("Form override '" .. slot_or_stem .. "' specified twice")
end
base.user_slot_overrides[slot_or_stem] = allow_multiple_values_for_override(comma_separated_groups,
{prefix = slot_or_stem, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes},
"is form override")
end
elseif indicator_flags[first_element] then
if #dot_separated_group > 1 then
parse_err("No footnotes allowed with '" .. first_element .. "' spec")
end
if base[first_element] then
parse_err("Spec '" .. first_element .. "' specified twice")
end
base[first_element] = true
else
local passive, uncertain = first_element:match("^(.*)(%?)$")
passive = passive or first_element
uncertain = not not uncertain
if passive_types[passive] then
if #dot_separated_group > 1 then
parse_err("No footnotes allowed with '" .. passive .. "' spec")
end
if base.passive then
parse_err("Value for passive type specified twice")
end
base.passive = passive
base.passive_uncertain = uncertain
else
parse_err("Unrecognized spec '" .. first_element .. "'")
end
end
end
return base
end
-- Normalize all lemmas, substituting the pagename for blank lemmas and adding links to multiword lemmas.
local function normalize_all_lemmas(alternant_multiword_spec, head)
-- (1) Add links to all before and after text. Remember the original text so we can reconstruct the verb spec later.
if not alternant_multiword_spec.args.noautolinktext then
iut.add_links_to_before_and_after_text(alternant_multiword_spec, "remember original")
end
-- (2) Remove any links from the lemma, but remember the original form so we can use it below in the 'lemma_linked'
-- form.
iut.map_word_specs(alternant_multiword_spec, function(base)
if base.lemma == "" then
base.lemma = head
end
base.user_specified_lemma = base.lemma
base.lemma = m_links.remove_links(base.lemma)
base.user_specified_verb = base.lemma
base.verb = base.user_specified_verb
local linked_lemma
if alternant_multiword_spec.args.noautolinkverb or base.user_specified_lemma:find("%[%[") then
linked_lemma = base.user_specified_lemma
else
-- Add links to the lemma so the user doesn't specifically need to, since we preserve
-- links in multiword lemmas and include links in non-lemma forms rather than allowing
-- the entire form to be a link.
linked_lemma = iut.add_links(base.user_specified_lemma)
end
base.linked_lemma = linked_lemma
end)
end
--W: Lexical exceptions — hollow roots in the Form I فَعُلَ pattern (past~non-past u~u)
-- that keep the middle radical SOUND instead of contracting to a long vowel (هَيُؤَ /
-- يَهْيُؤُ, not هَاءَ / يَهُوءُ). This is not the general rule for u~u hollow verbs --
-- طَالَ / يَطُولُ (ط-و-ل) contracts as normal -- so each entry here is a specific
-- attested exception, not a phonological class.
-- Keyed by rad1..rad2..rad3.
-- Keyed with bare hamza (ء) for rad3, matching normalize_root()'s canonicalization of root radicals
-- (HAMZA_ON_ALIF etc. all fold to HAMZA) -- the raw root "هيأ" normalizes to radicals ه, ي, ء.
local SOUND_FORM_I_UU_ROOTS = {
["هي" .. HAMZA] = true, -- هَيُؤَ ـُ: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان، ط2، 1995، ص203
}
-- Determine weakness from radicals. Used when root given in place of lemma (e.g. for {{ar-verb forms}}).
-- `past_vowel`/`nonpast_vowel`, if given, are the past/non-past vowel of a form-I verb (a string or
-- footnote-bearing form object, per `req()`); they let SOUND_FORM_I_UU_ROOTS single out the specific
-- vowel pattern under which a hollow root is attested as sound, without affecting its other patterns
-- (e.g. a root could still contract normally under a different past~non-past pairing).
local function weakness_from_radicals(form, rad1, rad2, rad3, rad4, past_vowel, nonpast_vowel)
local weakness = nil
local quadlit = form:find("q$")
-- If weakness unspecified, derive from radicals.
if not quadlit then
if is_waw_ya(rad3) and rad1 == W and form == "I" then
weakness = form_i_w_assimilated(past_vowel, nonpast_vowel, rad1, rad2, rad3) and "assimilated+final-weak" or
"final-weak"
elseif is_waw_ya(rad3) and vform_supports_final_weak(form) then
weakness = "final-weak"
elseif rad2 == rad3 and vform_supports_geminate(form) then
-- ...unless the source prints the فكّ rather than the إدغام for this
-- lexeme in this form (عالَلَ, تَعاثَثَ); see SOUND_ROOTS.
weakness = SOUND_ROOTS[form .. ":" .. rad1 .. rad2 .. rad3] and "sound" or "geminate"
elseif is_waw_ya(rad2) and vform_supports_hollow(form) then
--W: Both wāw (و) and yāʾ (ي) in the middle position create hollow verbs, in form I
-- (قَالَ from ق-و-ل, بَاعَ from ب-ي-ع) and in the augmented forms IV, VII, VIII, X
-- (أَتَاسَ from ت-ي-س, أَبَانَ from ب-ي-ن, أَطَاحَ from ط-ي-ح — معجم متن اللغة).
if SOUND_ROOTS[form .. ":" .. rad1 .. rad2 .. rad3] then
-- Lexical exceptions that keep the middle radical sound (أَفْيَلَ,
-- اِسْتَجْوَبَ) instead of contracting it; see SOUND_ROOTS.
weakness = "sound"
elseif form == "I" and past_vowel and nonpast_vowel and req(past_vowel, U) and req(nonpast_vowel, U) and
SOUND_FORM_I_UU_ROOTS[rad1 .. rad2 .. rad3] then
-- Lexical exceptions whose Form I فَعُلَ keeps the middle radical sound (هَيُؤَ); see
-- SOUND_FORM_I_UU_ROOTS. Gated to u~u specifically since that's the attested pattern.
weakness = "sound"
else
weakness = "hollow"
end
elseif rad1 == W and form == "I" then
-- Vowel-conditioned, like the lemma path below: a wāw-initial form-I verb only
-- elides its wāw under a kasra (or lowered-kasra) non-past. Before this, the two
-- inference paths in this module disagreed -- infer_radicals() kept the wāw for
-- i~a and u~u while this one dropped it for every vowel pattern.
weakness = form_i_w_assimilated(past_vowel, nonpast_vowel, rad1, rad2, rad3) and "assimilated" or "sound"
else
weakness = "sound"
end
else
if is_waw_ya(rad4) then
weakness = "final-weak"
else
weakness = "sound"
end
end
return weakness
end
-- Join the infixed tāʔ (ت) to the first radical in form VIII verbs. This may cause assimilation of the tāʔ to the
-- radical or in some cases the radical to the tāʔ. Used when a root is supplied instead of a lemma (which already has
-- the appropriate assimilation in it).
--W: `reduced` is |مدغم=. A hamza first radical assimilates into the infixed tāʾ the
-- same way a wāw does -- اِئْتَحَدَ becomes اِتَّحَدَ, اِئْتَزَرَ becomes اِتَّزَرَ, اِئْتَخَذَ
-- becomes اِتَّخَذَ -- but unlike the wāw it is optional, and this book prints the class
-- both ways: p358's اِئْتَمَنَ and اِئْتَشَرَ unassimilated beside p359's اِتَّحَدَ and
-- اِتَّزَرَ, all four under model 262 (افتعل مهموز الفاء). p359 states the derivation in
-- its own footnotes -- «أصلُ الفعلِ اِئْتَحَدَ» and «أصلُ الفعلِ اِئْتَزَرَ وهوَ الأصحُّ» --
-- so the أصل is the module's default and the assimilation is what the caller asks for.
-- Requested, never inferred from the radical: the same rule |مدغم= follows everywhere
-- else, and the reason p358 does not have to be wrong for p359 to be right.
local function form_viii_join_ta(rad, reduced)
if rad == W or rad == Y or rad == "ت" then return "تّ"
elseif rad == HAMZA and reduced then return "تّ"
elseif rad == "د" then return "دّ"
elseif rad == "ث" then return "ثّ"
elseif rad == "ذ" then return "ذّ"
elseif rad == "ز" then return "زْد"
elseif rad == "ص" then return "صْط"
elseif rad == "ض" then return "ضْط"
elseif rad == "ط" then return "طّ"
elseif rad == "ظ" then return "ظّ"
else return rad .. SK .. "ت"
end
end
local function detect_indicator_spec(base)
base.forms = {}
base.stem_overrides = {}
base.slot_overrides = {}
if not base.conj_vowels[1] then
-- These may be converted to inferred vowels. If not, we throw an error if form I and not passive-only.
base.conj_vowels = {{
past = "-",
nonpast = "-",
}}
else
-- If multiple vowels specified for a given vowel type (e.g. a,u~u), expand so that each spec in
local expansion = {}
for _, spec in ipairs(base.conj_vowels) do
for _, past in ipairs(spec.past) do
for _, nonpast in ipairs(spec.nonpast) do
table.insert(expansion, {past = past, nonpast = nonpast})
end
end
end
base.conj_vowels = expansion
end
local vform = base.verb_form
-- check for quadriliteral form (Iq, IIq, IIIq, IVq)
base.quadlit = not not vform:find("q$")
-- Infer radicals as necessary. We infer a separate set of radicals for each past~non-past vowel combination because
-- they may be different (particularly with form-I hollow verbs).
for _, vowel_spec in ipairs(base.conj_vowels) do
-- NOTE: rad1, rad2, etc. refer to user-specified radicals, which are formobj tables that optionally specify an
-- explicit manual translit, whereas ir1, ir2, etc. refer to inferred radicals, which are either strings or
-- lists of possible radicals.
local rads = base.root_consonants
local rad1, rad2, rad3, rad4 = rads[1], rads[2], rads[3], rads[4]
-- Default any unspecified radicals to radicals determined from the headword. The returned radicals may be
-- lists of possible radicals, where the first radical should be chosen if the user didn't explicitly specify a
-- radical but all are allowed. If `ambig = true` is set in the table, the radical is considered ambiguous and
-- categories won't be created for weak radicals.
local weakness, ir1, ir2, ir3, ir4
if vform ~= "none" then
ir1, ir2, ir3 = rmatch(base.lemma, "^([^_])_([^_])_([^_])$")
if not ir1 then
ir1, ir2, ir3, ir4 = rmatch(base.lemma, "^([^_])_([^_])_([^_])_([^_])$")
end
if ir1 then
-- root given instead of lemma
weakness = weakness_from_radicals(vform, ir1, ir2, ir3, ir4, vowel_spec.past, vowel_spec.nonpast)
if vform == "VIII" then
vowel_spec.form_viii_assim = form_viii_join_ta(ir1, base.reduced)
end
else
local ret = export.infer_radicals {
headword = base.lemma,
vform = vform,
passive = base.passive,
past_vowel = vowel_spec.past,
nonpast_vowel = vowel_spec.nonpast,
is_reduced = base.reduced,
}
weakness, ir1, ir2, ir3, ir4 = ret.weakness, ret.rad1, ret.rad2, ret.rad3, ret.rad4
vowel_spec.form_viii_assim = ret.form_viii_assim
vowel_spec.past = ret.past_vowel
vowel_spec.nonpast = ret.nonpast_vowel
vowel_spec.variant = base.variant or ret.variant
end
end
-- For most ambiguous radicals, the choice of radical doesn't matter because it doesn't affect the conjugation
-- one way or another. For form I hollow verbs, however, it definitely does. In fact, the choice of radical is
-- critical even beyond the past and non-past vowels because it affects the form of the passive participle. So,
-- check for this and signal an error if the radical could not be inferred and is not given explicitly.
if vform == "I" and type(ir2) == "table" and ir2.need_radical and not rad2 then
error("Unable to guess middle radical of hollow form I verb; need to specify radical explicitly")
end
if vform == "I" and not is_passive_only(base.passive) and (
rget(vowel_spec.past) == "-" or rget(vowel_spec.nonpast) == "-") then
error("Form I verb that isn't passive-only or final-weak must have past~non-past vowels specified")
end
-- Convert ambiguous radicals.
local function regularize_inferred_radical(rad)
if type(rad) == "table" then
if rad.ambig then
return {form = rad[1], ambig = true}
else
return rad[1]
end
else
return rad
end
end
-- Return the appropriate radical at index `index` (1 through 4), based either on the user-specified radical
-- `user_radical` or (if unspecified) `inferred_radical`, inferred from the unvocalized lemma. Two values are
-- returned, the "regularized" version of the radical (where ambiguous inferred radicals are converted to their
-- most likely actual radical) and the non-regularized version. The returned values are form objects rather than
-- strings.
local function fetch_radical(user_radical, inferred_radical, index)
if not user_radical then
return regularize_inferred_radical(inferred_radical), inferred_radical
else
local rad_formval = rget(user_radical)
if type(inferred_radical) == "table" then
local allowed_radical_set = m_table.listToSet(inferred_radical)
if not allowed_radical_set[rad_formval] then
error(("For lemma %s, radical %s ambiguously inferred as %s but user radical incompatibly given as %s"):
format(base.lemma, index,
list_to_text(inferred_radical, nil, " or "), rad_formval))
end
elseif rad_formval ~= inferred_radical then
error(("For lemma %s, radical %s inferred as %s but user radical incompatibly given as %s"):
format(base.lemma, index, inferred_radical, rad_formval))
end
return user_radical, user_radical
end
end
if vform ~= "none" then
vowel_spec.rad1, vowel_spec.unreg_rad1 = fetch_radical(rad1, ir1, 1)
vowel_spec.rad2, vowel_spec.unreg_rad2 = fetch_radical(rad2, ir2, 2)
vowel_spec.rad3, vowel_spec.unreg_rad3 = fetch_radical(rad3, ir3, 3)
if base.quadlit then
vowel_spec.rad4, vowel_spec.unreg_rad4 = fetch_radical(rad4, ir4, 4)
end
end
if vform == "I" then
-- If explicit weakness given using 'I-sound' or 'I-assimilated', we may need to adjust the inferred weakness.
if base.explicit_weakness == "sound" then
if weakness == "assimilated" then
weakness = "sound"
elseif weakness == "assimilated+final-weak" then
-- Verbs like waniya~yawnā "to be faint; to languish" (although the defaults should handle this
-- correctly)
weakness = "final-weak"
else
error(("Can't specify form 'I-sound' when inferred weakness is '%s' for lemma %s"):format(
weakness, base.lemma))
end
elseif base.explicit_weakness == "assimilated" then
if weakness == "sound" then
-- i~a verbs like waṭiʔa~yaṭaʔu "to tread, to trample"; wasiʕa~yasaʕu "to be spacious; to be well-off";
-- waṯiʔa~yaṯaʔu "to get bruised, to be sprained", which would default to sound.
weakness = "assimilated"
elseif weakness == "final-weak" then
-- For completeness; not clear if any verbs occur where this is needed. (There are plenty of
-- assimilated+final-weak verbs but the defaults should take care of them.)
weakness = "assimilated+final-weak"
else
error(("Can't specify form 'I-assimilated' when inferred weakness is '%s' for lemma %s"):format(
weakness, base.lemma))
end
elseif base.explicit_weakness then
error(("Internal error: Unrecognized value '%s' for base.explicit_weakness"):format(base.explicit_weakness))
end
elseif vform == "none" then
weakness = base.explicit_weakness
elseif base.explicit_weakness then
error(("Internal error: Explicit weakness should not be specifiable except with forms I and none, but saw explicit weakness '%s' with verb form '%s'"):
format(base.explicit_weakness, vform))
end
vowel_spec.weakness = weakness
if vform ~= "none" then
-- Error if radicals are wrong given the weakness. More likely to happen if the weakness is explicitly given
-- rather than inferred. Will also happen if certain incorrect letters are included as radicals e.g. hamza on
-- top of various letters, alif maqṣūra, tā' marbūṭa.
check_radicals(vform, weakness, rget(vowel_spec.rad1), rget(vowel_spec.rad2), rget(vowel_spec.rad3),
base.quadlit and rget(vowel_spec.rad4) or nil)
end
-- Check the variant value.
local form_iii_vi_geminate = (vform == "III" or vform == "VI") and rget(vowel_spec.rad2) == rget(vowel_spec.rad3) and
not req(vowel_spec.rad2, Y)
-- var: selects the short/long alternant. Form I takes it for either listed
-- root; form X only for حيي, which is what passing vform decides.
local hayy_i_x = hayy_radicals(vowel_spec.rad1, vowel_spec.rad2, vowel_spec.rad3, vform) and
(vform == "I" or vform == "X")
if form_iii_vi_geminate or hayy_i_x then
if vowel_spec.variant and vowel_spec.variant ~= "long" and vowel_spec.variant ~= "short" and vowel_spec.variant ~= "both" then
error(("For form-III/VI geminate verb or form-I/X verb with ح-ي-ي radicals, saw unrecognized 'var:%s' value; should be 'var:long', 'var:short' or 'var:both'"):format(
vowel_spec.variant))
end
elseif vowel_spec.variant then
error(("Variant value 'var:%s' not allowed in this context"):format(vowel_spec.variant))
end
end
-- If form I, regroup expanded vowels for display purposes.
if vform == "I" then
local group_by_past = {}
for _, vowel_spec in ipairs(base.conj_vowels) do
m_table.insertIfNot(group_by_past, {
past = undia[rget(vowel_spec.past)],
nonpasts = {undia[rget(vowel_spec.nonpast)]},
}, {
key = function(obj) return obj.past end,
combine = function(obj1, obj2)
for _, nonpast in ipairs(obj2.nonpasts) do
m_table.insertIfNot(obj1.nonpasts, nonpast)
end
end,
})
end
local group_by_nonpast = {}
for _, vowel_spec in ipairs(group_by_past) do
m_table.insertIfNot(group_by_nonpast, {
pasts = {vowel_spec.past},
nonpasts = vowel_spec.nonpasts,
}, {
key = function(obj) return obj.nonpasts end,
combine = function(obj1, obj2)
for _, past in ipairs(obj2.pasts) do
m_table.insertIfNot(obj1.pasts, past)
end
end,
})
end
base.grouped_conj_vowels = group_by_nonpast
end
-- Set value of passive. If not specified, default is yes for forms II, III, IV and Iq; no but uncertainly for
-- forms VII, IX, XI - XV and IIIq - IVq, as well as form I with past vowel u; impersonal but uncertainly for form
-- V, VI, X and IIq, as well as form I with past vowel i; and yes but uncertainly for the remainder (form I with
-- past vowel only a and form VIII).
if not base.passive then
base.passive_defaulted = true
-- Temporary tracking for defaulted passives by verb form, weakness and (for form I) past/non-past vowels.
track_if_ar_conj(base, "passive-defaulted/" .. vform)
for _, vowel_spec in ipairs(base.conj_vowels) do
track_if_ar_conj(base, "passive-defaulted/" .. vform.. "/" .. vowel_spec.weakness)
if vform == "I" then
--W: use rget(); the vowel is a form object when the user attached a footnote
-- (e.g. <I/a[نادر]~u>), and undia[<table>] is nil, which crashes format() on Lua 5.1.
local past_nonpast = ("%s~%s"):format(undia[rget(vowel_spec.past)], undia[rget(vowel_spec.nonpast)])
track_if_ar_conj(base, "passive-defaulted/I/" .. past_nonpast)
track_if_ar_conj(base, "passive-defaulted/I/" .. vowel_spec.weakness .. "/" .. past_nonpast)
end
end
if vform_probably_full_passive(vform) then
base.passive = "pass"
else
base.passive_uncertain = true
for _, vowel_spec in ipairs(base.conj_vowels) do
if vform_probably_no_passive(vform, vowel_spec.weakness, vowel_spec.past, vowel_spec.nonpast) then
base.passive = "nopass"
break
elseif vform_probably_impersonal_passive(vform, vowel_spec.weakness, vowel_spec.past,
vowel_spec.nonpast) then
base.passive = "ipass"
break
end
end
base.passive = base.passive or "pass"
end
end
-- NOTE: Currently there are no built-in stems or form overrides for Arabic; this code is inherited from
-- [[Module:ca-verb]], where such things do exist, and is kept for generality in case we decide in the future to
-- implement such things.
-- Override built-in verb stems and overrides with user-specified ones.
for stem, values in pairs(base.user_stem_overrides) do
base.stem_overrides[stem] = values
end
for slot, values in pairs(base.user_slot_overrides) do
if not base.alternant_multiword_spec.verb_slots_map[slot] then
error("Unrecognized override slot '" .. slot .. "': " .. base.angle_bracket_spec)
end
if export.unsettable_slots_set[slot] then
error("Slot '" .. slot .. "' cannot be set using an override: " .. base.angle_bracket_spec)
end
if skip_slot(base, slot, "allow overrides") then
error("Override slot '" .. slot ..
"' would be skipped based on the passive, 'noimp' and/or 'no_nonpast' settings: " ..
base.angle_bracket_spec)
end
base.slot_overrides[slot] = values
end
if base.verb_form == "none-final-weak" then
for _, stem_type in ipairs { "past", "past_pass", "nonpast", "nonpast_pass" } do
if base.stem_overrides[stem_type .. "_c"] or base.stem_overrides[stem_type .. "_v"] then
error(("Specify past stem for verb type 'none-final-weak' using '%s:...' not '%s_c:...' or '%s_v:...'"):
format(stem_type, stem_type, stem_type))
end
end
for _, stem_type in ipairs { "past", "nonpast" } do
if base.stem_overrides[stem_type] or not base.stem_overrides[stem_type .. "_final_weak_vowel"] then
error(("For verb type 'none-final-weak', if '%s:...' specified, so must '%s_final_weak_vowel:...'"):
format(stem_type, stem_type))
end
end
end
end
local function detect_all_indicator_specs(alternant_multiword_spec)
add_slots(alternant_multiword_spec)
alternant_multiword_spec.verb_forms = {}
-- This means at least one individual base had the slot marked as explicitly missing. Another base (e.g. when
-- there are multiple alternants) might have a value for the slot. In practice, we only respect this when there are
-- no overall values in the slot and `slot_uncertain` isn't set; in this case, we display "no ..." for the slot
-- instead of simply not displaying anything for the slot.
alternant_multiword_spec.slot_explicitly_missing = {}
-- This means at least one individual base had no values for the slot and the slot marked as explicitly uncertain.
-- Note that this is different from a value being present but marked as uncertain (e.g. if an override was given
-- with a ? after it); this causes the form object for the value to have `uncertain = true` set. If there are no
-- overall values in the slot and `slot_uncertain` is set, we display this in the headword.
alternant_multiword_spec.slot_uncertain = {}
iut.map_word_specs(alternant_multiword_spec, function(base)
-- So arguments, etc. can be accessed. WARNING: Creates circular reference.
base.alternant_multiword_spec = alternant_multiword_spec
detect_indicator_spec(base)
if not base.nocat then
m_table.insertIfNot(alternant_multiword_spec.verb_forms, base.verb_form)
end
if base.passive then
alternant_multiword_spec.passive = base.passive
end
if base.passive_uncertain then
alternant_multiword_spec.passive_uncertain = true
end
for slot, _ in pairs(base.slot_explicitly_missing) do
alternant_multiword_spec.slot_explicitly_missing[slot] = true
end
end)
end
local function determine_slot_uncertainty_from_forms(alternant_multiword_spec)
iut.map_word_specs(alternant_multiword_spec, function(base)
-- If no verbal noun and verb form is not 'none' (manually-specified stems) — which currently only happens for
-- form I — and the verbal noun wasn't explicitly indicated as missing using <vn:->, we assume it's just
-- unknown/unspecified rather than missing. Same with active participles.
for uncertain_slot, _ in pairs(slots_that_may_be_uncertain) do
if not base.forms[uncertain_slot] and vform ~= "none" and not skip_slot(base, uncertain_slot) then
base.slot_uncertain[uncertain_slot] = true
end
end
-- Propagate slot uncertainty up. Currently only the verbal noun can have this set but we write the code
-- generally.
for slot, _ in pairs(base.slot_uncertain) do
alternant_multiword_spec.slot_uncertain[slot] = true
end
end)
-- If slot is uncertain and has no value, explicitly set its value to "?".
for uncertain_slot, _ in pairs(slots_that_may_be_uncertain) do
if not alternant_multiword_spec.forms[uncertain_slot] and
alternant_multiword_spec.slot_uncertain[uncertain_slot] then
alternant_multiword_spec.forms[uncertain_slot] = {{form = "?"}}
end
end
end
-- Determine certain properties of the verb from the overall forms, such as whether the verb is active-only or
-- passive-only, is impersonal, lacks an imperative, etc.
local function determine_verb_properties_from_forms(alternant_multiword_spec)
alternant_multiword_spec.has_active = false
alternant_multiword_spec.has_passive = false
alternant_multiword_spec.has_non_impers_active = false
alternant_multiword_spec.has_non_impers_passive = false
alternant_multiword_spec.has_imp = false
alternant_multiword_spec.has_past = false
alternant_multiword_spec.has_nonpast = false
for slot, _ in pairs(alternant_multiword_spec.forms) do
if slot == "ap" or slot:find("[123]") and not slot:find("_pass") then
alternant_multiword_spec.has_active = true
end
if slot == "pp" or slot:find("[123]") and slot:find("_pass") then
alternant_multiword_spec.has_passive = true
end
if slot:find("[123]") and not slot:find("pass_[123]") and not slot:find("3ms") then
alternant_multiword_spec.has_non_impers_active = true
end
if slot:find("pass_[123]") and not slot:find("3ms") then
alternant_multiword_spec.has_non_impers_passive = true
end
if slot:find("^imp_") then
alternant_multiword_spec.has_imp = true
end
if slot:find("^past_") then
alternant_multiword_spec.has_past = true
end
if slot:find("^ind_") or slot:find("^sub_") or slot:find("^juss_") then
alternant_multiword_spec.has_nonpast = true
end
end
end
--W: The categories this used to build alongside the annotation are gone: show()
-- has not emitted them since the format_categories() return was commented out,
-- so every insert_cat() call was building a table nothing read. What is left is
-- the title-bar annotation, which is the half that reaches a reader.
local function add_annotation(alternant_multiword_spec, base, insert_ann)
-- Useful e.g. in constructing suppletive verbs out of parts. For a verb like جاء or أتى whose imperative comes
-- from the unrelated verb تعالى, we don't want the latter verb showing up in annotations.
if base.nocat then
return
end
local vform = base.verb_form
if vform ~= "none" then
insert_ann("form", vform)
--W: Add morphological pattern corresponding to the form
local morph_pattern = FORM_TO_MORPHOLOGICAL_PATTERN[vform]
if morph_pattern then
insert_ann("morph_pattern", morph_pattern)
end
end
if base.reduced then
insert_ann("reduced", "reduced")
end
for _, vowel_spec in ipairs(base.conj_vowels) do
local rad1, rad2, rad3, rad4 = get_radicals_4(vowel_spec)
local final_weak = is_final_weak(base, vowel_spec)
local weakness = vowel_spec.weakness
-- We have to distinguish weakness by form and weakness by conjugation. Weakness by form merely indicates the
-- presence of weak letters in certain positions in the radicals. Weakness by conjugation is related to how the
-- verbs are conjugated. For example, form-II verbs that are "hollow by form" (middle radical is wāw or yāʾ) are
-- conjugated as sound verbs. Another example: form-I verbs with initial wāw are "assimilated by form" and most
-- are assimilated by conjugation as well, but a few are sound by conjugation, e.g. wajuha yawjuhu "to be
-- distinguished" (rather than wajuha yajuhu); similarly for some hollow-by-form verbs in various forms, e.g.
-- form VIII izdawaja yazdawiju "to be in pairs" (rather than izdāja yazdāju). The annotation reports weakness
-- by conjugation; weakness by form was only ever distinguished by the radical categories, which are gone.
insert_ann("weakness", weakness)
end
if vform == "I" and not is_passive_only(base.passive) then
for _, vowel_spec in ipairs(base.grouped_conj_vowels) do
insert_ann("vowels",
("%s ~ %s"):format(table.concat(vowel_spec.pasts, "/"), table.concat(vowel_spec.nonpasts, "/")))
for _, past in ipairs(vowel_spec.pasts) do
for _, nonpast in ipairs(vowel_spec.nonpasts) do
if past == "-" or nonpast == "-" then
error("Internal error: Saw form I past vowel %s and non-past vowel %s but - in place of vowel should have triggered an error earlier")
end
--W: Add morphological pattern for form I based on vowels
local form_i_with_vowels = ("I/%s~%s"):format(past, nonpast)
local morph_pattern = FORM_TO_MORPHOLOGICAL_PATTERN[form_i_with_vowels]
if morph_pattern then
insert_ann("morph_pattern", morph_pattern)
end
end
end
end
end
if base.irregular then
insert_ann("irreg", "irregular")
end
end
--W: Compute the annotation displayed in the conjugation title bar. This used to
-- compute the verb's categories alongside it -- the two carry similar
-- information -- but show() stopped emitting them, so the category half was
-- building a table with no reader and has been removed.
local function compute_annotation(alternant_multiword_spec)
local ann = {}
alternant_multiword_spec.annotation = ann
ann.form = {}
ann.morph_pattern = {} --W: arabic morphological pattern corresponding to the form
ann.weakness = {}
ann.vowels = {}
ann.passive = nil
ann.reduced = {}
ann.irreg = {}
ann.defective = {}
local function insert_ann(anntype, value)
m_table.insertIfNot(alternant_multiword_spec.annotation[anntype], value)
end
iut.map_word_specs(alternant_multiword_spec, function(base)
add_annotation(alternant_multiword_spec, base, insert_ann)
end)
if alternant_multiword_spec.has_active then
if alternant_multiword_spec.has_passive and alternant_multiword_spec.has_non_impers_passive then
ann.passive = "full passive"
elseif alternant_multiword_spec.has_passive then
ann.passive = "impersonal passive"
else
ann.passive = "no passive"
end
else
if alternant_multiword_spec.has_non_impers_passive then
ann.passive = "passive-only"
else
ann.passive = "impersonal (passive-only)"
end
end
if alternant_multiword_spec.passive_uncertain then
ann.passive = ann.passive .. ' <abbr title="passive status uncertain">(?)</abbr>'
end
if alternant_multiword_spec.has_active and not alternant_multiword_spec.has_imp then
insert_ann("defective", "no imperative")
end
if not alternant_multiword_spec.has_past then
insert_ann("defective", "no past")
end
if not alternant_multiword_spec.has_nonpast then
insert_ann("defective", "no non-past")
end
local ann_parts = {}
local function insert_ann_part(part, conj)
local val = table.concat(ann[part], conj or " or ")
if val ~= "" and val ~= "regular" then
table.insert(ann_parts, val)
end
end
insert_ann_part("form")
insert_ann_part("weakness")
insert_ann_part("reduced")
insert_ann_part("vowels")
if ann.passive then
table.insert(ann_parts, ann.passive)
end
insert_ann_part("irreg")
insert_ann_part("defective", "، ")
--W: Save morph_pattern before overwriting annotation with string
alternant_multiword_spec.morph_pattern = ann.morph_pattern
alternant_multiword_spec.annotation = table.concat(ann_parts, "، ")
end
local function show_forms(alternant_multiword_spec)
local lemmas = {}
for _, slot in ipairs(export.potential_lemma_slots) do
if alternant_multiword_spec.forms[slot] then
for _, formobj in ipairs(alternant_multiword_spec.forms[slot]) do
table.insert(lemmas, formobj)
end
break
end
end
alternant_multiword_spec.lemmas = lemmas -- save for later use in make_table()
alternant_multiword_spec.vn = alternant_multiword_spec.forms.vn -- save for later use in make_table()
-- Reconstruct the original verb spec without overrides for verbal nouns and participles, since those specific slots
-- are ignored by {{ar-verb form}}. Compute this once beforehand; `transform_accel_obj` is called repeatedly on each
-- form and we don't want to compute this repeatedly.
local reconstructed_verb_spec = iut.reconstruct_original_spec(alternant_multiword_spec, {
preprocess_angle_bracket_spec = function(spec)
spec = spec:match("^<(.*)>$")
assert(spec)
local segments = put.parse_multi_delimiter_balanced_segment_run(spec, {{"[", "]"}, {"<", ">"}})
local dot_separated_groups = put.split_alternating_runs_and_strip_spaces(segments, "%.")
-- Rejoin each dot-separated group into a single string, since we aren't actually going to do any parsing
-- of bracket-bounded textual runs; then filter out overrides for verbal nouns and participles.
local filtered_indicators = {}
for _, dot_separated_group in ipairs(dot_separated_groups) do
local indicator = table.concat(dot_separated_group)
-- FIXME: Do we want to filter out any other indicators?
if not (indicator:find("^vn:") or indicator:find("^[ap]p:")) then
table.insert(filtered_indicators, indicator)
end
end
return ("<%s>"):format(table.concat(filtered_indicators, "."))
end,
})
-- If we're dealing with a single word, no alternants and a single verb form, use the auto-conjugation-fetching
-- variant.
local reconstructed_lemma, inside = reconstructed_verb_spec:match("^([^ <>()]+)(%b<>)$")
if inside and alternant_multiword_spec.verb_forms[1] and not alternant_multiword_spec.verb_forms[2] then
reconstructed_verb_spec = ("+%s<%s>"):format(reconstructed_lemma, alternant_multiword_spec.verb_forms[1])
end
local function transform_accel_obj(slot, formobj, accel_obj)
if not accel_obj then
return accel_obj
end
if slot == "ap" or slot == "pp" or slot == "vn" then
-- FIXME: [[Module:accel]] can't correctly handle more than one verb form for participles and verbal nouns
accel_obj.form = slot .. "-" .. table.concat(alternant_multiword_spec.verb_forms, "،")
else
accel_obj.form = "verb-form-" .. reconstructed_verb_spec
end
return accel_obj
end
local function generate_link(data)
local form = data.form
local term = form.formval_for_link
local alt = form.alt
if term == "?" then
term = nil
alt = "?"
end
--W: Create simple link for verb forms without #Arabic anchor
local display = alt or term
local link
if display then
link = link_term_simple(display)
else
link = ""
end
link = link .. iut.get_footnote_text(form.footnotes, data.footnote_obj)
--W: qualifier/label rendering removed along with the q/qq/l/ll modifiers;
-- it required [[Module:pron qualifier]], absent on ar.wiktionary.
return link
end
local props = {
lang = lang,
lemmas = lemmas,
transform_accel_obj = transform_accel_obj,
generate_link = generate_link,
slot_list = alternant_multiword_spec.verb_slots,
include_translit = false,
}
iut.show_forms(alternant_multiword_spec.forms, props)
end
--W: Tatweel and the invisible direction/joining marks survive copy-paste and
-- MediaWiki keeps them in page titles, so strip them from both sides before
-- comparing a |بؤرة= value against a generated form.
local FOCUS_IGNORE = "[" .. u(0x0640) .. u(0x061C) .. u(0x200B) .. "-" .. u(0x200F)
.. u(0x202A) .. "-" .. u(0x202E) .. u(0xFEFF) .. "]"
local function normalize_for_focus(s)
return (rsub(s, FOCUS_IGNORE, ""))
end
--W: Which slots hold `focus`? Must run before show_forms() turns the form
-- lists into rendered wikitext.
local function find_focus_slots(alternant_multiword_spec, focus)
if not focus or focus == "" then
return nil
end
local target = normalize_for_focus(focus)
local slots = {}
for slot, forms in pairs(alternant_multiword_spec.forms) do
if type(forms) == "table" then
for _, formobj in ipairs(forms) do
if type(formobj) == "table" and formobj.form
and normalize_for_focus(formobj.form) == target then
slots[slot] = true
break
end
end
end
end
return slots
end
--W: 'yes' unless |موسع= asked for the table open. [[Template:inflection-table-top]]
-- turns any non-empty |tall= into the mw-collapsed class.
local function collapsed_arg(alternant_multiword_spec)
if alternant_multiword_spec.expanded then
return nil
end
return 'yes'
end
--W: Put the marker class on the cell itself rather than on a span around its
-- contents, so the highlight covers the whole cell instead of hugging the word.
-- Runs on the table wikitext below, before m_string_utilities.format() fills the
-- {slot} placeholders in. Every form cell in either table has one of two shapes:
--
-- | {past_1s} -> | class="avf-focus" | {past_1s}
-- | rowspan="2" | {past_1s} -> | rowspan="2" class="avf-focus" | {past_1s}
--
-- Styled by [[Template:ar-verb-form/style.css]] (.inflection-table td.avf-focus).
local function mark_focus_cells(text, focus_slots)
if not focus_slots then
return text
end
return (rsub(text, "\n(|[^\n]*)", function(cell)
local slot = rmatch(cell, "^|%s*{([%w_]+)}%s*$")
if slot then
if focus_slots[slot] then
return '\n| class="avf-focus" | {' .. slot .. "}"
end
return nil
end
local attrs
attrs, slot = rmatch(cell, "^|%s*(.-)%s*|%s*{([%w_]+)}%s*$")
if slot and focus_slots[slot] then
return "\n| " .. attrs .. ' class="avf-focus" | {' .. slot .. "}"
end
return nil
end))
end
-------------------------------------------------------------------------------
-- Functions to create inflection tables --
-------------------------------------------------------------------------------
-- Make the conjugation table. Called from export.show().
local function make_table(alternant_multiword_spec)
local text = mw.getCurrentFrame():expandTemplate{
title = 'inflection-table-top',
args = {
title = 'تصريف {title}',
--W: |tall= is what puts mw-collapsed on the wrapper. |موسع= drops it.
-- (Not `expanded and nil or 'yes'` — in Lua that is always 'yes'.)
tall = collapsed_arg(alternant_multiword_spec),
palette = 'green',
category = 'conjugation',
class = 'tr-alongside', -- temp hack to prevent extra line break
}
}
text = text .. [=[
! colspan="6" | <<الْمَصْدَر>>
| colspan="7" | {vn}
]=]
if alternant_multiword_spec.has_active then
text = text .. [=[
|-
! colspan="6" | <<اِسْم الْفَاعِل>>
| colspan="7" | {ap}
]=]
end
if alternant_multiword_spec.has_passive then
text = text .. [=[
|-
! colspan="6" | <<اِسْم الْمَفْعُول>>
| colspan="7" | {pp}
]=]
end
text = text .. [=[
|-
! colspan="999" class="separator" |
]=]
if alternant_multiword_spec.has_active then
text = text .. [=[
|-
! colspan="12" class="outer" | <<الْفِعْل الْمَعْلُوم>>
|-
! colspan="2" |
! colspan="3" | <<الْمُفْرَد>>
! rowspan="12" class="separator" |
! colspan="2" | <<الْمُثَنَّى>>
! rowspan="12" class="separator" |
! colspan="3"| <<الْجَمْع>>
|-
! colspan="2"|
! <<الْمُتَكَلِّم>>
! <<الْمُخَاطَب>>
! <<الْغَائِب>>
! <<الْمُخَاطَب>>
! <<الْغَائِب>>
! <<الْمُتَكَلِّم>>
! <<الْمُخَاطَب>>
! <<الْغَائِب>>
|-
! rowspan="2" | <<الْمَاضِي>>
! class="secondary" | المذكر
| rowspan="2" | {past_1s}
| {past_2ms}
| {past_3ms}
| rowspan="2" | {past_2d}
| {past_3md}
| rowspan="2" | {past_1p}
| {past_2mp}
| {past_3mp}
|-
! class="secondary" | المؤنث
| {past_2fs}
| {past_3fs}
| {past_3fd}
| {past_2fp}
| {past_3fp}
|-
! rowspan="2" | <<الْمُضَارِع الْمَرْفُوع>>
! class="secondary" | المذكر
| rowspan="2" | {ind_1s}
| {ind_2ms}
| {ind_3ms}
| rowspan="2" | {ind_2d}
| {ind_3md}
| rowspan="2" | {ind_1p}
| {ind_2mp}
| {ind_3mp}
|-
! class="secondary" | المؤنث
| {ind_2fs}
| {ind_3fs}
| {ind_3fd}
| {ind_2fp}
| {ind_3fp}
|-
! rowspan="2" | <<الْمُضَارِع الْمَنْصُوب>>
! class="secondary" | المذكر
| rowspan="2" | {sub_1s}
| {sub_2ms}
| {sub_3ms}
| rowspan="2" | {sub_2d}
| {sub_3md}
| rowspan="2" | {sub_1p}
| {sub_2mp}
| {sub_3mp}
|-
! class="secondary" | المؤنث
| {sub_2fs}
| {sub_3fs}
| {sub_3fd}
| {sub_2fp}
| {sub_3fp}
|-
! rowspan="2" | <<الْمُضَارِع الْمَجْزُوم>>
! class="secondary" | المذكر
| rowspan="2" | {juss_1s}
| {juss_2ms}
| {juss_3ms}
| rowspan="2" | {juss_2d}
| {juss_3md}
| rowspan="2" | {juss_1p}
| {juss_2mp}
| {juss_3mp}
|-
! class="secondary" | المؤنث
| {juss_2fs}
| {juss_3fs}
| {juss_3fd}
| {juss_2fp}
| {juss_3fp}
|-
! rowspan="2" | <<الْأَمْر>>
! class="secondary" | المذكر
| rowspan="2" |
| {imp_2ms}
| rowspan="2" |
| rowspan="2" | {imp_2d}
| rowspan="2" |
| rowspan="2" |
| {imp_2mp}
| rowspan="2" |
|-
! class="secondary" | المؤنث
| {imp_2fs}
| {imp_2fp}
]=]
end
if alternant_multiword_spec.has_passive then
text = text .. [=[
|-
! colspan="999" class="separator" |
|-
! colspan="12" class="outer" | <<الْفِعْل الْمَجْهُول>>
|-
! colspan="2" |
! colspan="3" | <<الْمُفْرَد>>
! rowspan="10" class="separator" |
! colspan="2" | <<الْمُثَنَّى>>
! rowspan="10" class="separator" |
! colspan="3" | <<الْجَمْع>>
|-
! colspan="2" |
! <<الْمُتَكَلِّم>>
! <<الْمُخَاطَب>>
! <<الْغَائِب>>
! <<الْمُخَاطَب>>
! <<الْغَائِب>>
! <<الْمُتَكَلِّم>>
! <<الْمُخَاطَب>>
! <<الْغَائِب>>
|-
! rowspan="2" | <<الْمَاضِي>>
! class="secondary" | المذكر
| rowspan="2" | {past_pass_1s}
| {past_pass_2ms}
| {past_pass_3ms}
| rowspan="2" | {past_pass_2d}
| {past_pass_3md}
| rowspan="2" | {past_pass_1p}
| {past_pass_2mp}
| {past_pass_3mp}
|-
! class="secondary" | المؤنث
| {past_pass_2fs}
| {past_pass_3fs}
| {past_pass_3fd}
| {past_pass_2fp}
| {past_pass_3fp}
|-
! rowspan="2" | <<الْمُضَارِع الْمَرْفُوع>>
! class="secondary" | المذكر
| rowspan="2" | {ind_pass_1s}
| {ind_pass_2ms}
| {ind_pass_3ms}
| rowspan="2" | {ind_pass_2d}
| {ind_pass_3md}
| rowspan="2" | {ind_pass_1p}
| {ind_pass_2mp}
| {ind_pass_3mp}
|-
! class="secondary" | المؤنث
| {ind_pass_2fs}
| {ind_pass_3fs}
| {ind_pass_3fd}
| {ind_pass_2fp}
| {ind_pass_3fp}
|-
! rowspan="2" | <<الْمُضَارِع الْمَنْصُوب>>
! class="secondary" | المذكر
| rowspan="2" | {sub_pass_1s}
| {sub_pass_2ms}
| {sub_pass_3ms}
| rowspan="2" | {sub_pass_2d}
| {sub_pass_3md}
| rowspan="2" | {sub_pass_1p}
| {sub_pass_2mp}
| {sub_pass_3mp}
|-
! class="secondary" | المؤنث
| {sub_pass_2fs}
| {sub_pass_3fs}
| {sub_pass_3fd}
| {sub_pass_2fp}
| {sub_pass_3fp}
|-
! rowspan="2" | <<الْمُضَارِع الْمَجْزُوم>>
! class="secondary" | المذكر
| rowspan="2" | {juss_pass_1s}
| {juss_pass_2ms}
| {juss_pass_3ms}
| rowspan="2" | {juss_pass_2d}
| {juss_pass_3md}
| rowspan="2" | {juss_pass_1p}
| {juss_pass_2mp}
| {juss_pass_3mp}
|-
! class="secondary" | المؤنث
| {juss_pass_2fs}
| {juss_pass_3fs}
| {juss_pass_3fd}
| {juss_pass_2fp}
| {juss_pass_3fp}
]=]
end
text = text .. mw.getCurrentFrame():expandTemplate{
title = 'inflection-table-bottom',
args = {
notes = '{footnote}',
}
}
local forms = alternant_multiword_spec.forms
if not alternant_multiword_spec.lemmas then
forms.title = "—"
else
local linked_lemmas = {}
for _, form in ipairs(alternant_multiword_spec.lemmas) do
--W: Create simple link for lemmas without #Arabic anchor
-- table.insert(linked_lemmas, link_term(form.form, "term"))
table.insert(linked_lemmas, link_term_simple(form.form))
end
forms.title = table.concat(linked_lemmas, "، ")
end
local ann_parts = {}
if alternant_multiword_spec.annotation ~= "" then
table.insert(ann_parts, alternant_multiword_spec.annotation)
end
if alternant_multiword_spec.vn then
local linked_vns = {}
for _, form in ipairs(alternant_multiword_spec.vn) do
table.insert(linked_vns, link_term(form.form, "term"))
end
table.insert(ann_parts, (#linked_vns > 1 and "verbal nouns" or "verbal noun") .. " " ..
table.concat(linked_vns, "، "))
end
local annotation = table.concat(ann_parts, "، ")
--W: use only arabic morphological pattern in title annotation
local morph_patterns = alternant_multiword_spec.morph_pattern
if morph_patterns and #morph_patterns > 0 then
annotation = table.concat(morph_patterns, "، ")
forms.title = forms.title .. " (" .. annotation .. ")"
end
-- Format the table.
text = mark_focus_cells(text, alternant_multiword_spec.focus_slots)
local tagged_table = rsub(text, "<<(.-)>>", tag_text)
return m_string_utilities.format(tagged_table, forms)
end
-- Helper function to get root letters and verb classification for simplified table header
-- Returns: root_display (e.g., "ح س ب"), verb_type (e.g., "فعل ثلاثي صحيح سالم")
local function get_verb_info(alternant_multiword_spec)
local root_display = ""
local verb_type = "فعل"
local rad1, rad2, rad3, rad4
-- Extract radicals from the base word spec using iut.map_word_specs
-- This accesses the radicals directly from the parsed verb specification
iut.map_word_specs(alternant_multiword_spec, function(base)
-- Get radicals from the first conjugation vowel spec
if base.conj_vowels and #base.conj_vowels > 0 then
local vowel_spec = base.conj_vowels[1]
-- Extract radicals, handling both table and string types
local function extract_radical(rad)
if type(rad) == "table" then
-- If it's a table, get the first element or the string representation
return rad[1] or rget(rad)
else
return rad
end
end
rad1 = extract_radical(vowel_spec.rad1)
rad2 = extract_radical(vowel_spec.rad2)
rad3 = extract_radical(vowel_spec.rad3)
rad4 = vowel_spec.rad4 and extract_radical(vowel_spec.rad4)
end
end)
-- Get basic/derived classification from morphological pattern
local basic_deriv
if alternant_multiword_spec.morph_pattern and #alternant_multiword_spec.morph_pattern > 0 then
local morph_pattern = alternant_multiword_spec.morph_pattern[1]
basic_deriv = MORPHOLOGICAL_PATTERN_TO_BASIC_DERIV[morph_pattern]
end
-- Format root display with spaces between letters
if rad1 and rad2 and rad3 then
if rad4 then
-- Quadrilateral
root_display = rad1 .. " " .. rad2 .. " " .. rad3 .. " " .. rad4
verb_type = "فعل رباعي"
if basic_deriv then
verb_type = verb_type .. " " .. basic_deriv
end
else
-- triliteral
root_display = rad1 .. " " .. rad2 .. " " .. rad3
verb_type = "فعل ثلاثي"
if basic_deriv then
verb_type = verb_type .. " " .. basic_deriv
if basic_deriv == "مُجرَّد" then
--W: the classification concerns only triliteral basic verbs (الثلاثي المُجرَّد)
local classification = export.classify_triliteral_verb(rad1, rad2, rad3)
verb_type = verb_type .. " " .. classification
end
end
end
end
return root_display, verb_type
end
-- Make simplified conjugation table for ar.wiktionary. Called from export.show().
-- This table shows only past, present indicative, and imperative forms.
-- No passive voice, no participles, no verbal nouns.
local function make_table_ar(alternant_multiword_spec)
local text = mw.getCurrentFrame():expandTemplate{
title = 'inflection-table-top',
args = {
title = 'تصريف {title}',
--W: |tall= is what puts mw-collapsed on the wrapper. |موسع= drops it.
-- (Not `expanded and nil or 'yes'` — in Lua that is always 'yes'.)
tall = collapsed_arg(alternant_multiword_spec),
palette = 'green',
category = 'conjugation',
class = 'tr-alongside', -- temp hack to prevent extra line break
}
}
-- Get verb root and classification
local root_display, verb_type = get_verb_info(alternant_multiword_spec)
-- First row: Root and verb type spanning all columns
text = text .. "! colspan=\"2\" | <<الجذر>>: " .. root_display .. "\n"
text = text .. "| colspan=\"3\" | <<'''" .. verb_type .. "'''>>\n"
text = text .. [=[
|-
! colspan="2" | <<الضمائر>>
! <<الماضي>>
! <<المضارع>>
! <<الأمر>>
|-
! rowspan="2" | <<المتكلّم>>
| <<أنا>>
| {past_1s}
| {ind_1s}
|
|-
| <<نحن>>
| {past_1p}
| {ind_1p}
|
|-
! rowspan="5" | <<المخاطب>>
| <<أنتَ>>
| {past_2ms}
| {ind_2ms}
| {imp_2ms}
|-
| <<أنتِ>>
| {past_2fs}
| {ind_2fs}
| {imp_2fs}
|-
| <<أنتما>>
| {past_2d}
| {ind_2d}
| {imp_2d}
|-
| <<أنتم>>
| {past_2mp}
| {ind_2mp}
| {imp_2mp}
|-
| <<أنتنّ>>
| {past_2fp}
| {ind_2fp}
| {imp_2fp}
|-
! rowspan="6" | <<الغائب>>
| <<هو>>
| {past_3ms}
| {ind_3ms}
|
|-
| <<هي>>
| {past_3fs}
| {ind_3fs}
|
|-
| <<هما>>
| {past_3md}
| {ind_3md}
|
|-
| <<هما>>
| {past_3fd}
| {ind_3fd}
|
|-
| <<هم>>
| {past_3mp}
| {ind_3mp}
|
|-
| <<هنّ>>
| {past_3fp}
| {ind_3fp}
|
]=]
text = text .. mw.getCurrentFrame():expandTemplate{
title = 'inflection-table-bottom',
args = {
notes = '{footnote}',
}
}
local forms = alternant_multiword_spec.forms
if not alternant_multiword_spec.lemmas then
forms.title = "—"
else
local linked_lemmas = {}
for _, form in ipairs(alternant_multiword_spec.lemmas) do
--W: Create simple link for lemmas without #Arabic anchor
-- table.insert(linked_lemmas, link_term(form.form, "term"))
table.insert(linked_lemmas, link_term_simple(form.form))
end
forms.title = table.concat(linked_lemmas, "، ")
end
local ann_parts = {}
if alternant_multiword_spec.annotation ~= "" then
table.insert(ann_parts, alternant_multiword_spec.annotation)
end
local annotation = table.concat(ann_parts, "، ")
--W: use only arabic morphological pattern in title annotation
local morph_patterns = alternant_multiword_spec.morph_pattern
if morph_patterns and #morph_patterns > 0 then
annotation = table.concat(morph_patterns, "، ")
forms.title = forms.title .. " (" .. annotation .. ")"
end
-- Format the table.
text = mark_focus_cells(text, alternant_multiword_spec.focus_slots)
local tagged_table = rsub(text, "<<(.-)>>", tag_text)
return m_string_utilities.format(tagged_table, forms)
end
-------------------------------------------------------------------------------
-- Verb classification functions --
-------------------------------------------------------------------------------
--[=[
تصنيف الفعل الثلاثي المُجرَّد حسب نوعه
Classify an Arabic triliteral basic verb root based on its three letters.
@param r1 الحرف الأول (first root letter - الفاء)
@param r2 الحرف الثاني (second root letter - العين)
@param r3 الحرف الثالث (third root letter - اللام)
@return str: نوع الفعل (verb type classification in Arabic)
Examples:
classify_triliteral_verb('ك', 'ت', 'ب') --> 'صحيح سالم'
classify_triliteral_verb('أ', 'ت', 'ي') --> 'معتل ناقص يائي مهموز الفاء'
classify_triliteral_verb('ق', 'ل', 'و') --> 'معتل ناقص واوي'
]=]
function export.classify_triliteral_verb(r1, r2, r3)
-- تعريف أحرف العلة والهمزة
-- الحروف الضعيفة (أحرف العلة): واو وياء فقط
local weak_letters = {[W] = true, [Y] = true}
-- الهمزة: جميع أشكال الهمزة (ء، أ، إ، ؤ، ئ)
local hamza_letters = {
[HAMZA] = true, -- ء
[HAMZA_ON_ALIF] = true, -- أ
[HAMZA_UNDER_ALIF] = true, -- إ
[HAMZA_ON_W] = true, -- ؤ
[HAMZA_ON_Y] = true -- ئ
}
-- فحص كل حرف
local is_hamza = {hamza_letters[r1] or false, hamza_letters[r2] or false, hamza_letters[r3] or false}
local is_weak = {weak_letters[r1] or false, weak_letters[r2] or false, weak_letters[r3] or false}
-- عدد أحرف العلة
local weak_count = (is_weak[1] and 1 or 0) + (is_weak[2] and 1 or 0) + (is_weak[3] and 1 or 0)
-- فحص التضعيف (الحرف الثاني = الثالث)
local is_doubled = (r2 == r3)
-- ═══════════════════════════════════════════════════════════
-- المُعتل: الفعل الذي يحتوي على حرف أو أكثر من أحرف العلة
-- ═══════════════════════════════════════════════════════════
if weak_count > 0 then
-- ─────────────────────────────────────────────────────
-- لفيف: يحتوي على حرفين أو أكثر من أحرف العلة
-- ─────────────────────────────────────────────────────
if weak_count >= 2 then
-- مقرون: حرفا العلة متجاوران
if is_weak[2] and is_weak[3] then -- الثاني والثالث
--W: المُضعَّف يُفحَص أولا: جذر مثل حيي حرفا علته متماثلان، فهو لفيف
-- مقرون مُضعَّف، وهذا أخصُّ من المقرون المُجرَّد. Paper 1's ids 38
-- and 39. This test used to be missing altogether, so حيي and عيي
-- came back as plain conjoined and tests/classify_test.lua carried
-- a GEMINATED_CONJOINED_IDS exemption to say so.
if is_doubled then
if r2 == W then
return "معتل لفيف مقرون مُضعَّف واوي"
end
return "معتل لفيف مقرون مُضعَّف يائي"
end
if is_hamza[1] then
return "معتل لفيف مقرون مهموز الفاء"
end
return "معتل لفيف مقرون"
elseif is_weak[1] and is_weak[2] then -- الأول والثاني
return "معتل لفيف مقرون"
-- مفروق: الأول والثالث حرفا علة
elseif is_weak[1] and is_weak[3] then
if is_hamza[2] then
return "معتل لفيف مفروق مهموز العين"
end
return "معتل لفيف مفروق"
end
-- ─────────────────────────────────────────────────────
-- مثال: الحرف الأول حرف علة
-- ─────────────────────────────────────────────────────
elseif is_weak[1] then
if r1 == W then -- واوي
if is_hamza[3] then
return "معتل مثال واوي مهموز اللام"
elseif is_doubled then
return "معتل مثال واوي مُضعَّف"
elseif is_hamza[2] then
return "معتل مثال واوي مهموز العين"
end
return "معتل مثال واوي"
else -- يائي (ي)
if is_doubled then
return "معتل مثال يائي مُضعَّف"
elseif is_hamza[2] then
return "معتل مثال يائي مهموز العين"
end
return "معتل مثال يائي"
end
-- ─────────────────────────────────────────────────────
-- أجوف: الحرف الثاني حرف علة
-- ─────────────────────────────────────────────────────
elseif is_weak[2] then
if r2 == W then -- واوي
if is_hamza[3] then
return "معتل أجوف واوي مهموز اللام"
elseif is_hamza[1] then
return "معتل أجوف واوي مهموز الفاء"
end
return "معتل أجوف واوي"
else -- يائي (ي)
if is_hamza[3] then
return "معتل أجوف يائي مهموز اللام"
elseif is_hamza[1] then
return "معتل أجوف يائي مهموز الفاء"
end
return "معتل أجوف يائي"
end
-- ─────────────────────────────────────────────────────
-- ناقص: الحرف الثالث حرف علة
-- ─────────────────────────────────────────────────────
elseif is_weak[3] then
if r3 == W then -- واوي
if is_hamza[1] then
return "معتل ناقص واوي مهموز الفاء"
elseif is_hamza[2] then
return "معتل ناقص واوي مهموز العين"
end
return "معتل ناقص واوي"
else -- يائي (ي)
if is_hamza[1] then
return "معتل ناقص يائي مهموز الفاء"
elseif is_hamza[2] then
return "معتل ناقص يائي مهموز العين"
end
return "معتل ناقص يائي"
end
end
-- ═══════════════════════════════════════════════════════════
-- الصحيح: الفعل الذي لا يحتوي على أحرف العلة
-- ═══════════════════════════════════════════════════════════
else
-- ─────────────────────────────────────────────────────
-- مهموز: يحتوي على همزة
-- ─────────────────────────────────────────────────────
if is_hamza[1] or is_hamza[2] or is_hamza[3] then
-- مهموز الفاء واللام: الأول والثالث همزة
if is_hamza[1] and is_hamza[3] then
return "صحيح مهموز الفاء واللام"
-- مهموز الفاء
elseif is_hamza[1] then
if is_doubled then
return "صحيح مُضعَّف مهموز الفاء"
end
return "صحيح مهموز الفاء"
-- مهموز العين
elseif is_hamza[2] then
return "صحيح مهموز العين"
-- مهموز اللام
elseif is_hamza[3] then
return "صحيح مهموز اللام"
end
-- ─────────────────────────────────────────────────────
-- مُضعَّف: الحرف الثاني = الثالث
-- ─────────────────────────────────────────────────────
elseif is_doubled then
return "صحيح مُضعَّف"
-- ─────────────────────────────────────────────────────
-- سالم: لا همزة، لا حرف علة، لا تضعيف
-- ─────────────────────────────────────────────────────
else
return "صحيح سالم"
end
end
return "غير معروف"
end
-------------------------------------------------------------------------------
-- External entry points --
-------------------------------------------------------------------------------
--W: Normalize root to use underscores as separators
-- Accepts: "كتب", "ك_ت_ب", or "ك ت ب"
-- Returns: "ك_ت_ب"
local function normalize_root(root)
if not root then
return nil
end
-- Helper function to normalize a single character/radical
local function normalize_char(char)
-- Convert all hamza variants to canonical bare hamza
if char == HAMZA_ON_ALIF or char == HAMZA_UNDER_ALIF or
char == HAMZA_ON_W or char == HAMZA_ON_Y then
return HAMZA
-- Convert alif maqṣūra to yaa (ى → ي)
elseif char == AMAQ then
return Y
-- Reject alif - it's not a root radical
elseif char == ALIF then
error("Root contains alif (ا) which is not a valid root radical. For weak verbs, use و (waw) or ي (yaa) instead.")
end
return char
end
-- Convert alif madda to hamza + alif for processing (will be caught as error below)
root = root:gsub(AMAD, HAMZA .. ALIF)
-- Replace spaces with underscores
root = root:gsub(" ", "_")
-- If no underscores yet, insert them between each character
if not root:find("_") then
-- Extract only Arabic letters (excluding diacritics)
-- Arabic letter range: U+0621 to U+064A (basic letters)
local chars = {}
for char in mw.ustring.gmatch(root, "[ء-ي]") do
table.insert(chars, normalize_char(char))
end
root = table.concat(chars, "_")
else
-- Root already has underscores (e.g., "أ_م_ن"), normalize each radical
local parts = mw.text.split(root, "_")
for i, part in ipairs(parts) do
parts[i] = normalize_char(part)
end
root = table.concat(parts, "_")
end
return root
end
--W: Construct the [1] parameter from root (جذر) and morphological pattern (وزن)
-- Example:
-- input: root="كتب", pattern="فعَل يفعُل"
-- output: "ك_ت_ب<I/a~u>"
-- `force_full_passive`, if true, appends ".pass" so the verb gets a full personal
-- passive paradigm instead of the module's default impersonal-passive guess for
-- vforms like I (past vowel i), V, VI, X and IIq (see |مبني للمجهول= on {{ar-conj}}).
-- `reduced`, if true, appends ".reduced" so an affix consonant assimilates into the
-- radical beside it: forms V/VI use the assimilated تاء التفعّل prefix (اِسَّمَّعَ)
-- instead of the default تَ- prefix (تَسَمَّعَ), and form IIIq assimilates اِفْعَنْلَلَ's
-- نون into a weak ل1 (اِهْبَيَّخَ for اِهْبَنْيَخَ) -- see |مدغم= on {{ar-conj}}. Not every
-- root with an assimilable radical is necessarily attested with the assimilated form, so
-- this isn't inferred automatically from the root; it must be requested.
local function construct_verb_spec(root, pattern, force_full_passive, reduced)
if not root or not pattern then
return nil
end
local normalized_root = normalize_root(root)
local form_code = MORPHOLOGICAL_PATTERN_TO_FORM[pattern]
if not form_code then
error("Unknown morphological pattern (وزن صرفي): " .. pattern)
end
if force_full_passive then
form_code = form_code .. ".pass"
end
if reduced then
form_code = form_code .. ".reduced"
end
return normalized_root .. "<" .. form_code .. ">"
end
-- Wrapper function that accepts جذر (root) and وزن (pattern) as parameters
-- Returns: verb_type (e.g., "فعل ثلاثي مُجرَّد صحيح سالم")
-- Example: export.get_verb_type({["جذر"] = "كتب", ["وزن"] = "فعَل يفعُل"})
function export.get_verb_type(args)
local verb_spec
if args["جذر"] and args["وزن"] then
verb_spec = construct_verb_spec(args["جذر"], args["وزن"])
elseif args[1] then
verb_spec = args[1]
else
error("Must provide either جذر and وزن, or a verb specification in args[1]")
end
local alternant_multiword_spec = export.do_generate_forms({[1] = verb_spec})
local _, verb_type = get_verb_info(alternant_multiword_spec)
return verb_type
end
-- Append two lists `l1` and `l2`, removing duplicates. If either is {nil}, just return the other.
local function combine_lists(l1, l2)
-- combine_footnotes() does exactly what we want.
return iut.combine_footnotes(l1, l2)
end
local function combine_metadata(data)
local src1 = data.form1
local src2 = data.form2
local dest = data.dest_form
dest.uncertain = src1.uncertain or src2.uncertain
if src1.genders and src2.genders and not m_table.deepEquals(src1.genders, src2.genders) then
-- do nothing
else
dest.genders = src1.genders or src2.genders
end
if src1.pos and src2.pos and src1.pos ~= src2.pos then
-- do nothing
else
dest.pos = src1.pos or src2.pos
end
-- Don't copy .alt, .gloss, .lit, .id, which describe a single term and don't extend to multiword terms.
dest.q = combine_lists(src1.q, src2.q)
dest.qq = combine_lists(src1.qq, src2.qq)
dest.l = combine_lists(src1.l, src2.l)
dest.ll = combine_lists(src1.ll, src2.ll)
end
-- Externally callable function to parse and conjugate a verb given user-specified arguments.
-- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms`
-- for each slot. If there are no values for a slot, the slot key will be missing. The value
-- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms(args, source_template, headword_head)
local PAGENAME = mw.loadData("Module:headword/data").pagename
local function in_template_space()
local nsText = mw.title.getCurrentTitle().nsText
return nsText == "Template" or nsText == "قالب"
end
-- Determine the verb spec we're being asked to generate the conjugation of. This may be taken from the current page
-- title or the value of |pagename=; but not when called from {{ar-verb form}}, where the page title is a
-- non-lemma form. Note that the verb spec may omit the lemma; e.g. it may be "<II>". For this reason, we use the
-- value of `pagename` computed here down below, when calling normalize_all_lemmas().
local pagename = source_template ~= "ar-verb form" and args.pagename or PAGENAME
local head = headword_head or pagename
--W: If both root (جذر) and morphological pattern (وزن) are provided, construct [1]
if args["جذر"] and args["جذر"] ~= "" and args["وزن"] and args["وزن"] ~= "" then
local constructed = construct_verb_spec(args["جذر"], args["وزن"], args["مبني للمجهول"], args["مدغم"])
if constructed and constructed ~= "" then
args[1] = constructed
end
end
local arg1 = args[1]
if not arg1 then
if (pagename == "ar-conj" or pagename == "ar-verb" or pagename == "ar-verb form" or pagename == "تصريف") and in_template_space() then
arg1 = "كتب<I/a~u.pass>"
else
arg1 = "<>"
end
end
-- When called from {{ar-verb form}}, determine the non-lemma form whose inflections we're being asked to
-- determine. This normally comes from the page title or the value of |pagename=.
local verb_form_of_form
if source_template == "ar-verb form" then
verb_form_of_form = args.pagename
if not verb_form_of_form then
if PAGENAME == "ar-verb form" and in_template_space() then
verb_form_of_form = "كتبت"
else
verb_form_of_form = PAGENAME
end
end
end
local incorporated_headword_head_into_lemma = false
if arg1:find("^<.*>$") then -- missing lemma
if head:find(" ") then
-- If multiword lemma, try to add arg spec after the first word.
-- Try to preserve the brackets in the part after the verb, but don't do it
-- if there aren't the same number of left and right brackets in the verb
-- (which means the verb was linked as part of a larger expression).
local first_word, post = rmatch(head, "^(.-)( .*)$")
local left_brackets = rsub(first_word, "[^%[]", "")
local right_brackets = rsub(first_word, "[^%]]", "")
if #left_brackets == #right_brackets then
arg1 = iut.remove_redundant_links(first_word) .. arg1 .. post
incorporated_headword_head_into_lemma = true
else
-- Try again using the form without links.
local linkless_head = m_links.remove_links(head)
if linkless_head:find(" ") then
first_word, post = rmatch(linkless_head, "^(.-)( .*)$")
arg1 = first_word .. arg1 .. post
else
error("Unable to incorporate <...> spec into explicit head due to a multiword linked verb or " ..
"unbalanced brackets; please include <> explicitly: " .. arg1)
end
end
else
-- Will be incorporated through `head` below in the call to normalize_all_lemmas().
incorporated_headword_head_into_lemma = true
end
end
local parse_props = {
parse_indicator_spec = parse_indicator_spec,
angle_brackets_omittable = true,
allow_blank_lemma = true,
}
local alternant_multiword_spec = iut.parse_inflected_text(arg1, parse_props)
alternant_multiword_spec.pos = pos or "verbs"
alternant_multiword_spec.args = args
alternant_multiword_spec.source_template = source_template
alternant_multiword_spec.verb_form_of_form = verb_form_of_form
alternant_multiword_spec.incorporated_headword_head_into_lemma = incorporated_headword_head_into_lemma
normalize_all_lemmas(alternant_multiword_spec, head)
detect_all_indicator_specs(alternant_multiword_spec)
local inflect_props = {
lang = lang,
slot_list = alternant_multiword_spec.verb_slots,
inflect_word_spec = conjugate_verb,
combine_metadata = combine_metadata,
-- We add links around the generated verbal forms rather than allow the entire multiword
-- expression to be a link, so ensure that user-specified links get included as well.
include_user_specified_links = true,
}
iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props)
if debug_translit then
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
if form.translit then
local full_form_translit = (lang:transliterate(m_links.remove_links(form.form)))
if full_form_translit ~= form.translit then
error(("Internal error: For slot '%s', form '%s' incremental translit '%s' not same as full translit '%s'"):
format(slot, form.form, form.translit, full_form_translit))
end
end
form.form = iut.remove_redundant_links(form.form)
end
end
end
-- Remove redundant brackets around entire forms.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = iut.remove_redundant_links(form.form)
end
end
-- Apply NFC-style normalization: reorder shadda+vowel to vowel+shadda
-- to match MediaWiki's automatic NFC normalization (which is applied on enwiktionary
-- but not in local Lua environments). This reverses the postprocessing step.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = apply_nfc_shadda(form.form)
end
end
determine_slot_uncertainty_from_forms(alternant_multiword_spec)
determine_verb_properties_from_forms(alternant_multiword_spec)
compute_annotation(alternant_multiword_spec)
if args.json and source_template == "ar-conj" then
-- There is a circular reference in `base.alternant_multiword_spec`, which points back to top level.
iut.map_word_specs(alternant_multiword_spec, function(base)
base.alternant_multiword_spec = nil
end)
return require("Module:JSON").toJSON(alternant_multiword_spec)
end
return alternant_multiword_spec
end
-- Entry point for {{ar-conj}}. Template-callable function to parse and conjugate a verb given
-- user-specified arguments and generate a displayable table of the conjugated forms.
function export.show(frame)
local parent_args = frame:getParent() and frame:getParent().args or frame.args --W
local params = {
[1] = {},
["noautolinktext"] = {type = "boolean"},
["noautolinkverb"] = {type = "boolean"},
["t"] = {}, -- for use by {{ar-verb form}}; otherwise ignored
["id"] = {}, -- for use by {{ar-verb form}}; otherwise ignored
["pagename"] = {}, -- for testing/documentation pages
["json"] = {type = "boolean"}, -- for bot use
--W: additional parameters for ar.wiktionary.org
["جذر"] = {type = "string"}, --W: الجذر اللغوي, root
["وزن"] = {type = "string"}, --W: الوزن الصرفي, morphological pattern
["مبني للمجهول"] = {type = "boolean"}, --W: force a full personal passive paradigm,
-- overriding the default impersonal-passive guess for vforms like I (past vowel
-- i), V, VI, X and IIq
["مدغم"] = {type = "boolean"}, --W: assimilate the affix into the radical beside it:
-- forms V/VI's تاء التفعّل into the first radical (اِسَّمَّعَ instead of
-- تَسَمَّعَ), or form IIIq's نون into a weak ل1 (اِهْبَيَّخَ for اِهْبَنْيَخَ)
["كامل"] = {type = "boolean"}, --W: show full table (default is simplified table)
["بؤرة"] = {type = "string"}, --W: highlight the cells holding this form
["موسع"] = {type = "boolean"}, --W: show the table expanded (default: collapsed)
}
local args = require("Module:parameters").process(parent_args, params)
--W: If both root (جذر) and morphological pattern (وزن) are provided, construct [1]
if args["جذر"] and args["جذر"] ~= "" and args["وزن"] and args["وزن"] ~= "" then
local constructed = construct_verb_spec(args["جذر"], args["وزن"], args["مبني للمجهول"], args["مدغم"])
if constructed and constructed ~= "" then
args[1] = constructed
end
end
local alternant_multiword_spec = export.do_generate_forms(args, "ar-conj")
if type(alternant_multiword_spec) == "string" then
-- JSON return value
return alternant_multiword_spec
end
--W: |بؤرة= marks the cells holding a given form, so that a conjugated-form
-- page ([[Module:ar-verb-form]]) can show the reader where in the paradigm
-- the word they looked up actually sits. The slots have to be found before
-- show_forms(), which replaces each form list with rendered wikitext.
alternant_multiword_spec.focus_slots =
find_focus_slots(alternant_multiword_spec, args["بؤرة"])
--W: A table whose one relevant cell is highlighted is no use folded away, so
-- [[Module:ar-verb-form]] asks for it open. Lemma pages keep it collapsed.
alternant_multiword_spec.expanded = args["موسع"] or false
show_forms(alternant_multiword_spec)
--W: Choose table type: simplified (default) or full (comprehensive)
local table_html
if args["كامل"] then
table_html = make_table(alternant_multiword_spec)
else
table_html = make_table_ar(alternant_multiword_spec)
end
--W: No categories. ar.wiktionary does not carry the enwiktionary category
-- tree this module was written against, so format_categories() was commented
-- out here; the insert_cat() calls that fed it are now gone too, and with
-- them alternant_multiword_spec.categories.
return table_html
end
function export.verb_forms(frame)
local parargs = frame:getParent().args
local params = {
[1] = {},
[2] = {},
[3] = {},
[4] = {},
[5] = {},
pagename = {},
}
for _, form in ipairs(allowed_vforms) do
-- FIXME: We go up to 5 here. The code supports unlimited variants but it's unlikely we will ever see more than
-- 2.
for index = 1, 5 do
local prefix = index == 1 and form or form .. index
params[prefix .. "-pv"] = {}
for _, extn in ipairs { "", "-vn", "-ap", "-pp" } do
params[prefix .. extn] = {}
params[prefix .. extn .. "-head"] = {}
-- FIXME: No -tr?
params[prefix .. extn .. "-gloss"] = {}
end
end
end
local args = require("Module:parameters").process(parargs, params)
local i = 1
local past_vowel_re = "^[aui,]*$"
local combined_root = nil
if not args[i] or rfind(args[i], past_vowel_re) then
combined_root = args.pagename or mw.loadData("Module:headword/data").pagename
if not rfind(combined_root, "^([^ ]) ([^ ]) ([^ ])$") and not
rfind(combined_root, "^([^ ]) ([^ ]) ([^ ]) ([^ ])$") then
error("When inferring roots from page title, need three or four space-separated radicals: " .. combined_root)
end
elseif rfind(args[i], " ") then
combined_root = args[i]
i = i + 1
else
local separate_roots = {}
while args[i] and not rfind(args[i], past_vowel_re) do
table.insert(separate_roots, args[i])
i = i + 1
end
combined_root = table.concat(separate_roots, " ")
end
local past_vowel = args[i]
i = i + 1
if past_vowel and not rfind(past_vowel, past_vowel_re) then
error("Unrecognized past vowel, should be 'a', 'i', 'u', 'a,u', etc. or empty: " .. past_vowel)
end
-- Spaces interfere with parsing as a unit in [[Module:inflection utilities]], so replace with underscore.
combined_root = combined_root:gsub(" ", "_")
local split_root = rsplit(combined_root, "_")
-- Map from verb forms (I, II, etc.) to a table of verb properties,
-- which has entries e.g. for "verb" (either true to autogenerate the verb
-- head, or an explicitly specified verb head using e.g. argument "I-head"),
-- and for "verb-gloss" (which comes from e.g. the argument "I" or "I-gloss"),
-- and for "vn" and "vn-gloss", "ap" and "ap-gloss", "pp" and "pp-gloss".
local verb_properties = {}
for _, form in ipairs(allowed_vforms) do
local formpropslist = {}
local derivs = {{"verb", ""}, {"vn", "-vn"}, {"ap", "-ap"}, {"pp", "-pp"}}
local index = 1
while true do
local formprops = {}
local prefix = index == 1 and form or form .. index
if prefix == "I" then
formprops.pv = past_vowel
end
if args[prefix .. "-pv"] then
formprops.pv = args[prefix .. "-pv"]
end
for _, deriv in ipairs(derivs) do
local prop = deriv[1]
local extn = deriv[2]
if args[prefix .. extn] == "+" then
formprops[prop] = true
elseif args[prefix .. extn] == "-" then
formprops[prop] = false
elseif args[prefix .. extn] then
formprops[prop] = true
formprops[prop .. "-gloss"] = args[prefix .. extn]
end
if args[prefix .. extn .. "-head"] then
if formprops[prop] == nil then
formprops[prop] = true
end
formprops[prop] = args[prefix .. extn .. "-head"]
end
if args[prefix .. extn .. "-gloss"] then
if formprops[prop] == nil then
formprops[prop] = true
end
formprops[prop .. "-gloss"] = args[prefix .. extn .. "-gloss"]
end
end
if formprops.verb then
-- If a verb form specified, also turn on vn (unless form I, with
-- unpredictable vn) and ap, and maybe pp, according to form,
-- weakness and past vowel. But don't turn these on if there's
-- an explicit on/off specification for them (e.g. I-pp=-).
if form ~= "I" and formprops.vn == nil then
formprops.vn = true
end
if formprops.ap == nil then
formprops.ap = true
end
local weakness = weakness_from_radicals(form, split_root[1], split_root[2], split_root[3],
split_root[4])
if formprops.pp == nil and not vform_probably_no_passive(form,
weakness, rsplit(formprops.pv or "", ","), {}) then
formprops.pp = true
end
if formprops.verb == true or formprops.vn == true or formprops.ap == true or formprops.pp == true then
formprops.need_autogen = true
end
table.insert(formpropslist, formprops)
index = index + 1
else
break
end
end
table.insert(verb_properties, {form, formpropslist})
end
-- Go through and create the verb form derivations as necessary, when they haven't been explicitly given.
for _, vplist in ipairs(verb_properties) do
local vform = vplist[1]
for _, props in ipairs(vplist[2]) do
if props.need_autogen then
local form_with_vowels
if vform == "I" then
local pv = props.pv
if not pv then
-- Make up likely past vowels based on weakness and actual radical.
if split_root[3] == W then -- final-weak
form_with_vowels = "I/a~u"
elseif split_root[3] == Y then
form_with_vowels = "I/a~i"
elseif split_root[2] == W then --hollow
form_with_vowels = "I/u~u"
elseif split_root[2] == Y then
form_with_vowels = "I/i~i"
else
-- most common; doesn't matter so much since we're not displaying the non-past
form_with_vowels = "I/a~u"
end
else
local pvs = rsplit(pv, ",")
local vowel_sufs = {}
for _, pv in ipairs(pvs) do
local vowel_spec
if pv == "a" then
-- Make up likely past vowels based on weakness and actual radical.
if split_root[3] == W then -- final-weak
vowel_spec = "a~u"
elseif split_root[3] == Y then
vowel_spec = "a~i"
elseif split_root[2] == W then --hollow
vowel_spec = "a~u"
elseif split_root[2] == Y then
vowel_spec = "a~i"
else
-- most common; doesn't matter so much since we're not displaying the non-past
vowel_spec = "a~u"
end
elseif pv == "i" then
-- most common; doesn't matter so much since we're not displaying the non-past
vowel_spec = "i~a"
elseif pv == "u" then
-- most common; doesn't matter so much since we're not displaying the non-past
vowel_spec = "u~u"
else
error(("Internal error: Bad past vowel '%s' in {{ar-verb forms}}"):format(pv))
end
table.insert(vowel_sufs, vowel_spec)
end
form_with_vowels = "I/" .. table.concat(vowel_sufs, "/")
end
else
form_with_vowels = vform
end
local angle_bracket_spec = ("%s<%s.pass>"):format(combined_root, form_with_vowels)
local alternant_multiword_spec = export.do_generate_forms({angle_bracket_spec}, "ar-verb forms")
local function format_forms(forms)
if not forms then
return "-" -- FIXME: Throw an error?
end
local formatted = {}
for _, form in ipairs(forms) do
if form.translit then
table.insert(formatted, ("%s//%s"):format(form.form, form.translit))
else
table.insert(formatted, form.form)
end
end
return table.concat(formatted, "،")
end
if props.verb == true then
props.verb = format_forms(alternant_multiword_spec.forms.past_3ms)
end
for _, deriv in ipairs({"vn", "ap", "pp"}) do
if props[deriv] == true then
props[deriv] = format_forms(alternant_multiword_spec.forms[deriv])
end
end
end
end
end
-- Go through and output the result
local formtextarr = {}
for _, vplist in ipairs(verb_properties) do
local form = vplist[1]
for _, props in ipairs(vplist[2]) do
local textarr = {}
if props.verb then
local text = "* '''[[Appendix:Arabic verbs#Form " .. form .. "|Form " .. form .. "]]''': "
local linktext = {}
local splitheads = rsplit(props.verb, "[,،]")
for _, head in ipairs(splitheads) do
table.insert(linktext, m_links.full_link({lang = lang, term = head, gloss = props["verb-gloss"]}))
end
text = text .. table.concat(linktext, "، ")
table.insert(textarr, text)
for _, derivengl in ipairs({{"vn", "Verbal noun"}, {"ap", "Active participle"}, {"pp", "Passive participle"}}) do
local deriv = derivengl[1]
local engl = derivengl[2]
if props[deriv] then
local text = "** " .. engl .. ": "
local linktext = {}
local splitheads = rsplit(props[deriv], "[,،]")
for _, head in ipairs(splitheads) do
local ar, translit = head:match("^(.*)//(.-)$")
if not ar then
ar = head
end
table.insert(linktext, m_links.full_link {lang = lang, term = ar, tr = translit,
gloss = props[deriv .. "-gloss"]} )
end
text = text .. table.concat(linktext, "، ")
table.insert(textarr, text)
end
end
table.insert(formtextarr, table.concat(textarr, "\n"))
end
end
end
return table.concat(formtextarr, "\n")
end
-- Infer radicals from lemma headword (i.e. 3rd masculine singular past) and verb form (I, II, etc.). Throw an error if
-- headword is malformed. A given returned radical may be actually be a list of possible radicals, where the first one
-- should be used if the user didn't explicitly give the radical. If the list contains a field `ambig = true`, the
-- radical is considered ambiguous and should not be categorized. `is_reduced` indicates that the user specified
-- `.reduced` to indicate that the verb form is reduced by assimilation and/or haplology (typically archaic Koranic
-- forms such as اِدَّارَأَ instead of تَدَارَأَ; or اِسْطَاعَ instead of اِسْتِطَاعَ; etc.
function export.infer_radicals(data)
local headword, vform, passive, past_vowel, nonpast_vowel, is_reduced =
data.headword, data.vform, data.passive, data.past_vowel, data.nonpast_vowel, data.is_reduced
past_vowel = past_vowel or "-"
nonpast_vowel = nonpast_vowel or "-"
local function verify_vowel(vowel, param)
--W: A past/non-past vowel may legitimately be a form object {form=..., footnotes=...}
-- when the user attaches a footnote, e.g. <I/a[نادر]~u>, so compare the formval.
-- Comparing the raw value crashed on Lua 5.1 ("bad argument #2 to 'format'").
local formval = rget(vowel)
if formval ~= A and formval ~= I and formval ~= U and formval ~= "-" then
error(("Internal error: Bad value for %s: %s (should be Arabic diacritic vowel or '-')"):format(
param, dump(vowel)))
end
end
verify_vowel(past_vowel, "past_vowel")
verify_vowel(nonpast_vowel, "nonpast_vowel")
local ch = {}
local form_viii_assim, variant
-- sub out alif-madda for easier processing
headword = rsub(headword, AMAD, HAMZA .. ALIF)
local function infer_err(msg, noann)
local anns = {}
local nohead, novform
if noann == "nohead" then
nohead = true
elseif noann == "novform" then
novform = true
elseif noann == "nohead-vform" then
nohead = true
novform = true
elseif noann then
error(("Internal error: Unrecognized value for 'noann': %s"):format(dump(noann)))
end
if not nohead then
table.insert(anns, ("headword=%s"):format(data.headword))
end
if not novform then
table.insert(anns, ("verb form=%s"):format(data.vform))
end
anns = table.concat(anns, "، ")
if anns ~= "" then
anns = ": " .. anns
end
error(msg .. anns)
end
local len = ulen(headword)
local expected_length
-- extract the headword letters into an array
for i = 1, len do
table.insert(ch, usub(headword, i, i))
end
-- check that the letter at the given index is the given string, or
-- is one of the members of the given array
local function check(index, must)
local letter = ch[index]
if type(must) == "string" then
if not letter then
infer_err("Letter " .. index .. " is nil")
end
if letter ~= must then
infer_err(("For verb form %s, letter %s must be %s, not %s"):format(vform, index, must, letter),
"novform")
end
elseif not m_table.contains(must, letter) then
infer_err("For verb form " .. vform .. ", radical " .. index ..
" must be one of " .. table.concat(must, " ") .. ", not " .. letter, "novform")
end
end
-- Check that length of headword is within [min, max]
local function check_len(min, max)
if min and len < min then
infer_err(("Not enough letters for verb form %s, expected at least %s"):format(vform, min), "novform")
end
if max and len > max then
infer_err(("Too many letters for verb form %s, expected at most %s"):format(vform, max), "novform")
end
end
-- A form I verb beginning with w- keeps the w in the non-past unless the non-past vowel is a kasra or a
-- lowered kasra; see form_i_w_assimilated(), which the radicals path uses too. This used to be spelt out
-- here as "i~a or u~u", which missed a~u (وَجَلَ يَوْجُلُ).
local function form_I_w_non_assimilated()
return not form_i_w_assimilated(past_vowel, nonpast_vowel)
end
-- Convert radicals to canonical form (handle various hamza varieties and check for misplaced alif or alif maqṣūra;
-- legitimate cases of these letters are handled above).
local function convert(rad, index)
if type(rad) == "table" then
for i, r in ipairs(rad) do
rad[i] = convert(r, index)
end
return rad
elseif rad == HAMZA_ON_ALIF or rad == HAMZA_UNDER_ALIF or
rad == HAMZA_ON_W or rad == HAMZA_ON_Y then
return HAMZA
elseif rad == AMAQ then
infer_err("Radical " .. index .. " must not be alif maqṣūra")
elseif rad == ALIF then
infer_err("Radical " .. index .. " must not be alif")
else
return rad
end
end
local quadlit = vform:find("q$")
-- find first radical, start of second/third radicals, check for
-- required letters
local radstart, rad1, rad2, rad3, rad4
local weakness
if vform == "I" or vform == "II" then
rad1 = ch[1]
radstart = 2
elseif vform == "III" then
rad1 = ch[1]
check(2, {ALIF, W}) -- W occurs in passive-only verbs
radstart = 3
elseif vform == "IV" then
-- this would be alif-madda but we replaced it with hamza-alif above.
if ch[1] == HAMZA and ch[2] == ALIF then
rad1 = HAMZA
else
check(1, HAMZA_ON_ALIF)
rad1 = ch[2]
end
radstart = 3
elseif vform == "V" then
check(1, is_reduced and ALIF or T)
rad1 = ch[2]
radstart = 3
elseif vform == "VI" then
check(1, is_reduced and ALIF or T)
if ch[2] == AMAD then
rad1 = HAMZA
radstart = 3
else
rad1 = ch[2]
check(3, {ALIF, W}) -- W occurs in passive-only verbs
radstart = 4
end
elseif vform == "VII" then
check(1, ALIF)
if is_reduced then
check(2, M)
rad1 = M
radstart = 3
else
check(2, N)
rad1 = ch[3]
radstart = 4
end
elseif vform == "VIII" then
check(1, ALIF)
rad1 = ch[2]
if rad1 == "د" then
rad1 = {"د", "ذ"} -- not considered ambiguous since it's usually د
radstart = 3
form_viii_assim = "دّ"
elseif rad1 == "ظ" and ch[3] == "ط" and len >= 5 then
-- [[اظطلم]], variant of [[اظلم]]
radstart = 4
form_viii_assim = "ظْط"
elseif rad1 == "ذ" and ch[3] == "د" and len >= 5 then
-- [[اذدكر]], variant of [[اذكر]]
radstart = 4
form_viii_assim = "ذْد"
elseif rad1 == T or rad1 == "ث" or rad1 == "ذ" or rad1 == "ط" or rad1 == "ظ" then
radstart = 3
form_viii_assim = rad1 .. SH
elseif rad1 == "ز" then
check(3, "د")
radstart = 4
form_viii_assim = "زْد"
elseif rad1 == "ص" or rad1 == "ض" then
check(3, "ط")
radstart = 4
form_viii_assim = rad1 .. SK .. "ط"
else
check(3, T)
radstart = 4
rad1 = convert(rad1, 1)
form_viii_assim = rad1 .. SK .. "ت"
end
if rad1 == T then
-- Radical is ambiguous, might be ت or و or ي but doesn't affect conjugation. Note that there are no
-- form-VIII verbs with initial radical ي given in Hans Wehr but Lane mentions at least:
-- - (page 2973) اِتَّأَسَ, with assimilation of the ي to ت, from root ي ء س;
-- - (page 2975) اِتَّبَسَ non-past يَتَّبِسُ and alternative اِيتَبَسَ non-past يَاتَبِسُ from the root ي ب س;
-- - (page 2976) اِتَّسَرَ non-past يَتَّسِرُ or alternatively يَأْتَسِرُ with hamza preserved from the root ي س ر.
-- These alternative forms seem very rare and probably not worth worrying about, but if we want to handle
-- them, we can do it when the time comes.
rad1 = {T, W, Y, ambig = true}
-- اِتَّخَذَ irregularly has hamza as the radical but assimilates like و
if ch[3] == "خ" and ch[4] == "ذ" then
rad1[4] = HAMZA
end
end
elseif vform == "IX" then
check(1, ALIF)
rad1 = ch[2]
radstart = 3
elseif vform == "X" then
check(1, ALIF)
check(2, S)
if is_reduced then
rad1 = ch[3]
radstart = 4
else
check(3, T)
rad1 = ch[4]
radstart = 5
end
elseif vform == "Iq" then
rad1 = ch[1]
rad2 = ch[2]
radstart = 3
elseif vform == "IIq" then
check(1, T)
rad1 = ch[2]
rad2 = ch[3]
radstart = 4
elseif vform == "IIIq" then
check(1, ALIF)
rad1 = ch[2]
rad2 = ch[3]
check(4, N)
radstart = 5
elseif vform == "IVq" then
check(1, ALIF)
rad1 = ch[2]
rad2 = ch[3]
radstart = 4
elseif vform == "XI" then
check_len(5, 5)
check(1, ALIF)
rad1 = ch[2]
rad2 = ch[3]
check(4, ALIF)
rad3 = ch[5]
weakness = "sound"
elseif vform == "XII" then
check(1, ALIF)
rad1 = ch[2]
if ch[3] ~= ch[5] then
infer_err("For verb form XII, letters 3 and 5 should be the same", "novform")
end
check(4, W)
radstart = 5
elseif vform == "XIII" then
check_len(5, 5)
check(1, ALIF)
rad1 = ch[2]
rad2 = ch[3]
check(4, W)
rad3 = ch[5]
if rad3 == AMAQ then
weakness = "final-weak"
else
weakness = "sound"
end
elseif vform == "XIV" then
check_len(6, 6)
check(1, ALIF)
rad1 = ch[2]
rad2 = ch[3]
check(4, N)
rad3 = ch[5]
if ch[6] == AMAQ then
check_waw_ya(rad3)
weakness = "final-weak"
else
if ch[5] ~= ch[6] then
infer_err("For verb form XIV, letters 5 and 6 should be the same", "novform")
end
weakness = "sound"
end
elseif vform == "XV" then
check_len(6, 6)
check(1, ALIF)
rad1 = ch[2]
rad2 = ch[3]
check(4, N)
rad3 = ch[5]
if rad3 == Y then
check(6, ALIF)
else
check(6, AMAQ)
end
weakness = "sound"
else
error("Internal error: Unrecognized verb form " .. vform)
end
-- Process the last two radicals. RADSTART is the index of the first of the two. If it's nil then all radicals have
-- already been processed above, and we don't do anything.
if radstart then
-- There must (normally) be one or two letters left.
if len == radstart then
if vform == "I" and ch[len] == Y then
-- short form حَيَّ
weakness = "final-weak"
rad2 = Y
rad3 = Y
variant = "short"
elseif vform == "IV" and rad1 == "ر" and ch[len] == AMAQ then
-- irregular verb أَرَى
weakness = "final-weak"
rad2 = HAMZA
rad3 = Y
elseif vform == "X" and rad1 == "ح" and ch[len] == AMAQ then
-- irregular verb اِسْتَحَى
weakness = "final-weak"
rad2 = Y
rad3 = Y
variant = "short"
else
-- If one letter left, then it's a geminate verb. If the letter is alif or alif maqṣūra, it will trigger
-- an error down the line.
if vform_supports_geminate(vform) then
weakness = "geminate"
rad2 = ch[len]
rad3 = ch[len]
if vform == "III" or vform == "VI" then
variant = "short"
end
else
infer_err("Apparent geminate verb, but geminate verbs not allowed for this verb form")
end
end
elseif quadlit then
-- Process last two radicals of a quadriliteral verb form.
rad3 = ch[radstart]
rad4 = ch[radstart + 1]
expected_length = radstart + 1
check_len(expected_length)
if rad4 == AMAQ or rad4 == ALIF and rad3 == Y or rad4 == Y then
-- rad4 can be Y in passive-only verbs.
if vform_supports_final_weak(vform) then
weakness = "final-weak"
-- Ambiguous radical; randomly pick wāw as radical (but avoid two wāws in a row); it could be wāw or
-- yāʾ, but doesn't affect the conjugation.
rad4 = rad3 == W and {Y, W, ambig = true} or {W, Y, ambig = true}
else
infer_err("Last radical is " .. rad4 .. " but verb form " .. vform ..
" doesn't support final-weak verbs", "novform")
end
else
weakness = "sound"
end
else
-- Process last two radicals of a triliteral verb form.
rad2 = ch[radstart]
rad3 = ch[radstart + 1]
expected_length = radstart + 1
check_len(expected_length)
if vform == "I" and (is_waw_ya(rad3) or rad3 == ALIF or rad3 == AMAQ) then
local inferred_past_vowel, inferred_nonpast_vowel
-- Check for final-weak form I verb. It can end in tall alif (rad3 = wāw) or alif maqṣūra (rad3 = yāʾ)
-- or a wāw or yāʾ (with a past vowel of i or u, e.g. nasiya/yansā "forget" or with a passive-only
-- verb).
if rad1 == W and not form_I_w_non_assimilated() then
weakness = "assimilated+final-weak"
else
weakness = "final-weak"
end
if rad3 == ALIF then
rad3 = W
inferred_past_vowel = A
inferred_nonpast_vowel = U
if is_passive_only(passive) then
infer_err("Final-weak form-I passive verbs should end in yāʔ (ي), not tall alif (ا)", "novform")
end
elseif rad3 == AMAQ then
rad3 = Y
inferred_past_vowel = A
inferred_nonpast_vowel = I
if is_passive_only(passive) then
infer_err("Final-weak form-I passive verbs should end in yāʔ (ي), not alif maqṣūra (ى)",
"novform")
end
elseif rad1 == "ح" and rad2 == Y and rad3 == Y then
-- Long variant حَيِيَ.
inferred_past_vowel = I
inferred_nonpast_vowel = A
variant = "long"
else
if not is_passive_only(passive) then
-- does a non-passive final-weak verb in -uwa ever happen? (YES: e.g. [[رجو]] "to be slack")
inferred_past_vowel = rad3 == Y and I or U
inferred_nonpast_vowel = A
end
-- Ambiguous radical; randomly pick wāw as radical (but avoid two wāws); it could be wāw or yāʾ, but
-- doesn't affect the conjugation.
rad3 = (rad1 == W or rad2 == W) and {Y, W, ambig = true} or {W, Y, ambig = true} -- ambiguous
end
if inferred_past_vowel then
local raw_past_vowel = rget(past_vowel)
local raw_nonpast_vowel = rget(nonpast_vowel)
if raw_past_vowel ~= "-" then
if raw_past_vowel ~= inferred_past_vowel then
infer_err(("Final-weak form-I verb inferred past vowel %s, which disagrees with " ..
"explicitly specified %s"):format(undia[inferred_past_vowel], undia[raw_past_vowel]), "novform")
else
-- in case of footnote in past_vowel
inferred_past_vowel = past_vowel
end
end
if raw_nonpast_vowel ~= "-" and raw_nonpast_vowel ~= A and inferred_nonpast_vowel == U then
-- if inferred as I or A, the reality can be the reverse; form-I final-weak verbs with a~a and
-- i~i exist, e.g. سَعَى/يَسْعَى, وَلِيَ/يَلِي. Weird verb [[صها]] (also written [[صهى]]) has non-past
-- يصهى so we can't throw an error in this situation.
if raw_nonpast_vowel ~= inferred_nonpast_vowel then
infer_err(("Final-weak form-I verb inferred non-past vowel %s, which disagrees with " ..
"explicitly specified %s"):format(undia[inferred_nonpast_vowel], undia[raw_nonpast_vowel]), "novform")
else
-- in case of footnote in nonpast_vowel
inferred_nonpast_vowel = nonpast_vowel
end
end
end
if not is_passive_only(passive) then
if rget(past_vowel) == "-" then
past_vowel = inferred_past_vowel
end
if rget(nonpast_vowel) == "-" then
nonpast_vowel = inferred_nonpast_vowel
end
end
elseif vform == "IX" and is_waw_ya(rad3) and len == radstart + 2 and ch[len] == AMAQ then
-- Final-weak form IX verbs like اِرْعَوَى "to desist, to repent, to see the light".
weakness = "final-weak"
expected_length = radstart + 2
elseif vform == "X" and rad1 == "ح" and rad2 == Y and rad3 == ALIF then
-- Long variant اِسْتَحْيَا.
weakness = "final-weak"
rad3 = Y
variant = "long"
elseif rad3 == AMAQ or rad2 == Y and rad3 == ALIF or rad3 == Y then
-- rad3 == Y happens in passive-only verbs.
if vform_supports_final_weak(vform) then
weakness = "final-weak"
else
infer_err("Last radical is " .. rad3 .. " but verb form doesn't support final-weak verbs")
end
-- Ambiguous radical; randomly pick wāw as radical (but avoid two wāws); it could be wāw or yāʾ, but
-- doesn't affect the conjugation.
rad3 = (rad1 == W or rad2 == W) and {Y, W, ambig = true} or {W, Y, ambig = true}
elseif rad2 == ALIF then
if vform_supports_hollow(vform) then
weakness = "hollow"
local function set_past_to_a()
if req(past_vowel, A) then
-- already set
elseif req(past_vowel, "-") or req(past_vowel, rget(nonpast_vowel)) then
past_vowel = A
else
infer_err(("Form I hollow verb with nonpast vowel set to '%s' must have past vowel set to 'a' or the same value, not %s"):
format(undia[rget(nonpast_vowel)], undia[rget(past_vowel)]), "novform")
end
end
if vform == "I" and req(nonpast_vowel, U) then
rad2 = W
set_past_to_a()
elseif vform == "I" and req(nonpast_vowel, I) then
rad2 = Y
set_past_to_a()
else
if req(nonpast_vowel, A) and not req(past_vowel, I) then
infer_err(("Form I hollow verb with nonpast vowel set to 'a' must have past vowel set to 'i', not %s"):
format(undia[rget(past_vowel)]), "novform")
end
-- Ambiguous radical; could be wāw or yāʾ; if verb form I, it's critical to get this right, and
-- the caller checks for this situation and throws an error if non-past vowel is "a" and second
-- radical isn't explicitly given.
rad2 = {W, Y, ambig = true, need_radical = true}
end
else
infer_err("Second radical is alif but verb form doesn't support hollow verbs")
end
elseif vform == "I" and rad1 == W and not form_I_w_non_assimilated() then
weakness = "assimilated"
elseif rad2 == rad3 and (vform == "III" or vform == "VI") then
weakness = "geminate"
variant = "long"
else
weakness = "sound"
end
end
if expected_length then
check_len(expected_length, expected_length)
end
end
rad1 = convert(rad1, 1)
rad2 = convert(rad2, 2)
rad3 = convert(rad3, 3)
rad4 = convert(rad4, 4)
if not weakness then
error("Internal error: Returned weakness from infer_radicals() is nil")
end
return {
weakness = weakness,
rad1 = rad1,
rad2 = rad2,
rad3 = rad3,
rad4 = rad4,
past_vowel = past_vowel,
nonpast_vowel = nonpast_vowel,
form_viii_assim = form_viii_assim,
variant = variant,
}
end
-- bot interface to infer_radicals()
function export.infer_radicals_json(frame)
local iparams = {
headword = {},
vform = {},
passive = {},
past_vowel = {},
nonpast_vowel = {},
is_reduced = {type = "boolean"},
}
local iargs = require("Module:parameters").process(frame.args, iparams)
return require("Module:JSON").toJSON(export.infer_radicals(iargs))
end
-- Infer vocalization from participle headword (active or passive), verb form (I, II, etc.) and whether the headword is
-- active or passive. Throw an error if headword is malformed. Returned radicals may contain Latin letters "t", "w" or "y"
-- indicating ambiguous radicals guessed to be tāʾ, wāw or yāʾ respectively.
function export.infer_participle_vocalization(headword, vform, weakness, is_active)
local chars = {}
local orig_headword = headword
-- Sub out alif-madda for easier processing.
headword = rsub(headword, AMAD, HAMZA .. ALIF)
local len = ulen(headword)
-- Extract the headword letters into an array.
for i = 1, len do
table.insert(chars, usub(headword, i, i))
end
local function form_intro_error_msg()
return ("For verb form %s %s%s participle %s, "):format(vform, orig_headword ~= headword and "normalized " or
"", is_active and "active" or "passive", headword)
end
local function err(msg)
error(form_intro_error_msg() .. msg, 1)
end
-- Check that length of headword is within [min, max].
local function check_len(min, max)
if min and len < min then
err(("expected at least %s letters but saw %s"):format(min, len))
elseif max and len > max then
err(("expected at most %s letters but saw %s"):format(max, len))
end
end
-- Get the character at `ind`, making sure it exists.
local function c(ind)
check_len(ind)
return chars[ind]
end
-- Check that the letter at the given index is the given string, or is one of the members of the given array
local function check(index, must)
local letter = chars[index]
local function make_possible_values()
if type(must) == "string" then
return must
else
return list_to_text(must, nil, " or ")
end
end
if not letter then
err(("expected a letter (specifically %s) at position %s, but participle is too short"):format(
make_possible_values(), index))
end
local matches
if type(must) == "string" then
matches = letter == must
else
matches = m_table.contains(must, letter)
end
if not matches then
err(("letter %s at index %s must be %s"):format(letter, index, make_possible_values()))
end
end
local function check_weakness(values, allow_missing, invert_condition)
local function make_possible_weaknesses()
for i, val in ipairs(values) do
values[i] = "'" .. val .. "'"
end
return list_to_text(values, nil, " or ")
end
if allow_missing and invert_condition then
error("Internal error: Can't specify both allow_missing and invert_condition")
end
if not weakness then
if allow_missing or invert_condition then
return
else
err(("weakness is unspecified but must be %s"):format(make_possible_weaknesses()))
end
else
local matches = m_table.contains(values, weakness)
if invert_condition and matches then
err(("weakness '%s' must not be %s"):format(weakness, make_possible_weaknesses()))
elseif not invert_condition and not matches then
err(("weakness '%s' must be %s"):format(weakness, make_possible_weaknesses()))
end
end
end
local vocalized
local function handle_possibly_final_weak(sound_prefix, expected_length)
check_len(expected_length, expected_length)
if c(expected_length) == AMAQ then
-- passive final-weak
if is_active then
err("participle in -ِى only allowed for passive participles")
end
check_weakness({"final-weak", "assimilated+final-weak"}, "allow missing")
vocalized = sound_prefix .. AN .. AMAQ
else
-- all others behave as if sound
check_weakness({"final-weak", "assimilated+final-weak"}, nil, "invert condition")
vocalized = sound_prefix .. (is_active and I or A) .. c(expected_length)
end
end
if not (vform == "I" and is_active) then
-- all participles except verb form I active begin in م-.
check(1, M)
end
if vform == "I" then
if is_active then
check(2, ALIF)
local sound_prefix = c(1) .. AA .. c(3)
if len == 3 then
if c(3) == HAMZA then
-- Either hollow with hamzated third radical, e.g. [[شاء]] active participle 'شَاءٍ', or final-weak
-- with hamzated second radical, e.g. [[رأى]] active participle 'رَاءٍ'. Theoretically (?), also
-- geminate with hamzated second/third radical, but I don't know if any such verbs exist.
if weakness == "geminate" then
vocalized = sound_prefix .. SH
else
check_weakness({"hollow", "final-weak"}, "allow missing")
vocalized = sound_prefix .. IN
end
else
check_weakness({"final-weak", "geminate"})
if weakness == "geminate" then
vocalized = sound_prefix .. SH
else
vocalized = sound_prefix .. IN
end
end
else
check_len(4, 4)
-- we will convert back to alif maqṣūra below as needed
vocalized = sound_prefix .. I .. c(4)
end
else
-- assimilated verbs: regular, e.g. مَوْزُون "weighed"
-- geminate verbs: regular, e.g. مَبْلُول "moistened"
-- third-hamzated verbs: مَبْرُوء
-- hollow verbs: مَقُود "led, driven"; مَزِيد "added, increased"
-- hollow first-hamzated verbs: مَئِيض "returned, reverted"; مَأْيُوس "despaired" (NOTE: formation is sound);
-- مَأُود or مَؤُود "bent; depleted"
-- hollow third-hamzated verbs: مَشِيء "willed, intended", مَضُوء "glittered?"
-- final-weak: مَلْقِيّ "found, encountered"; مَصْغُوّ "inclined"
-- hollow + final-weak: مَشْوِيّ "fried, grilled", مَهْوِيّ "loved"
-- first-hamzated + hollow + final-weak: مَأْوِيّ "received hospitably"
local sound_prefix = MA .. c(2) .. SK .. c(3)
if len == 5 then
-- sound, assimilated or geminate
check(4, W)
vocalized = sound_prefix .. UU .. c(5)
else
check_len(4, 4)
if c(4) == W then
-- final-weak third-wāw
vocalized = sound_prefix .. U .. W .. SH
elseif c(4) == Y then
-- final-weak third-yāʾ
vocalized = sound_prefix .. I .. Y .. SH
else
-- hollow
check(3, {W, Y})
if c(3) == W then
vocalized = MA .. c(2) .. UU .. c(4)
else
vocalized = MA .. c(2) .. II .. c(4)
end
end
end
end
elseif vform == "II" or vform == "V" or vform == "XII" or vform == "XIII" or vform == "Iq" or vform == "IIq" or
vform == "IIIq" then
local sound_prefix, expected_length
if vform == "II" then
sound_prefix = MU .. c(2) .. A .. c(3) .. SH
expected_length = 4
elseif vform == "V" then
check(2, T)
sound_prefix = MU .. T .. A .. c(3) .. A .. c(4) .. SH
expected_length = 5
elseif vform == "XII" then
-- e.g. [[احدودب]] "to be or become convex or humpbacked", مُحْدَوْدِب (active);
-- [[اثنونى]] "to be bent; to be doubled up", مُثْنَوْنٍ (active)
check(4, W)
if c(3) ~= c(5) then
err(("third letter %s should be the same as the fifth letter %s"):format(c(3), c(5)))
end
sound_prefix = MU .. c(2) .. SK .. c(3) .. A .. W .. SK .. c(5)
expected_length = 6
elseif vform == "XIII" then
-- e.g. [[اخروط]] "to get entangled; to extend", مُخْرَوِّط (active), مُخْرَوَّط (passive)
check(4, W)
sound_prefix = MU .. c(2) .. SK .. c(3) .. A .. W .. SH
expected_length = 5
elseif vform == "Iq" then
sound_prefix = MU .. c(2) .. A .. c(3) .. SK .. c(4)
expected_length = 5
elseif vform == "IIq" then
check(2, T)
sound_prefix = MU .. T .. A .. c(3) .. A .. c(4) .. SK .. c(5)
expected_length = 6
elseif vform == "IIIq" then
-- e.g. [[اخرنطم]] "to be proud and angry"
check(4, T)
sound_prefix = MU .. c(2) .. SK .. c(3) .. A .. N .. SK .. c(5)
expected_length = 6
else
error("Internal error: Unhandled verb form " .. vform)
end
if len == expected_length - 1 then
-- active final-weak
if not is_active then
err(("length-%s participle only allowed for active participles"):format(len))
end
check_weakness({"final-weak", "assimilated+final-weak"}, "allow missing")
vocalized = sound_prefix .. IN
else
handle_possibly_final_weak(sound_prefix, expected_length)
end
elseif vform == "III" or vform == "VI" then
local sound_prefix, expected_length
if vform == "VI" then
check(2, T)
check(4, ALIF)
sound_prefix = MU .. T .. A .. c(3) .. AA .. c(5)
expected_length = 6
else
sound_prefix = MU .. c(2) .. AA .. c(4)
expected_length = 5
end
if len == expected_length - 1 then
-- active final-weak or active or passive geminate
if is_active then
check_weakness({"geminate", "final-weak", "assimilated+final-weak"})
if weakness == "geminate" then
vocalized = sound_prefix .. SH
else
vocalized = sound_prefix .. IN
end
else
check_weakness({"geminate"}, "allow missing")
vocalized = sound_prefix .. SH
end
else
handle_possibly_final_weak(sound_prefix, expected_length)
end
elseif vform == "IV" or vform == "X" then
-- form IV:
-- sound: مُرْسِخ (active, "entrenching"), مُرْسَخ (passive, "entrenched")
-- first-hamzated (like sound): مُؤْيِس (active, "causing to despair"), مُؤْيَس (passive, "caused to despair")
-- final-weak: مُكْرٍ (active, "renting out"), مُكْرًى (passive, "rented out")
-- assimilated: مُورِد (active, "transferring"), مُورَد (passive, "transferred"); same when first-Y, e.g.
-- أَيْقَنَ "to be certain of": مُوقِن (active), مُوقَن (passive)
-- assimilated + final-weak: مُورٍ (active, "setting fire, kindling"), مُورًى (passive, "set fire, kindled")
-- geminate: مُمِدّ (active, "granting, helping"), مُمَدّ (passive, "granted, helped")
-- hollow: مُزِيل (active, "eliminating"), مُزَال (passive, "eliminated")
-- hollow + final-weak: مُعْيٍ (active, "tiring"), مُعْيًى (passive, "tired")
local sound_prefix, expected_length
if vform == "X" then
check(2, S)
check(3, T)
sound_prefix = MU .. S .. SK .. T .. A .. c(4)
expected_length = 6
else
sound_prefix = MU .. c(2)
expected_length = 4
end
if len == expected_length and c(len - 1) == Y and c(len) ~= AMAQ then
-- active hollow
if not is_active then
err("this shape only allowed for active participles")
end
check_weakness({"hollow"}, "allow missing")
vocalized = sound_prefix .. II .. c(len)
elseif len == expected_length and c(len - 1) == ALIF then
-- passive hollow
if is_active then
err("this shape only allowed for passive participles")
end
check_weakness({"hollow"}, "allow missing")
vocalized = sound_prefix .. AA .. c(len)
elseif len == expected_length - 1 then
-- active final-weak or active or passive geminate
if is_active then
check_weakness({"geminate", "final-weak", "assimilated+final-weak"})
if weakness == "geminate" then
vocalized = sound_prefix .. I .. c(len) .. SH
elseif vform == "IV" and c(2) == W then
-- assimilated final-weak
vocalized = sound_prefix .. c(len) .. IN
else
vocalized = sound_prefix .. SK .. c(len) .. IN
end
else
check_weakness({"geminate"}, "allow missing")
vocalized = sound_prefix .. A .. c(len) .. SH
end
else
if vform == "IV" and c(2) == W then
-- assimilated, possibly final-weak
sound_prefix = sound_prefix .. c(expected_length - 1)
else
sound_prefix = sound_prefix .. SK .. c(expected_length - 1)
end
handle_possibly_final_weak(sound_prefix, expected_length)
end
elseif vform == "VII" or vform == "VIII" then
-- form VII (passive participles are fairly rare but do exist):
-- sound: مُنْكَتِب (active "subscribing"), مُنْكَتَب (passive "subscribed")
-- geminate: مُنْضَمّ (both active "joining, containing" and passive "joined, contained")
-- final-weak: مُنْطَلٍ (active "fooling (someone)"), مُنْطَلًى (passive "fooled")
-- final-weak with medial wāw: مُنْطَوٍ (active "involving"), مُنْطَوًى (passive "involved")
-- hollow: مُنْقَاد (both active "complying with" and passive "complied with")
--
-- for form VIII, the same variants exist but things are complicated by assimilations involving the template T.
-- sound third-hamzated no assimilation: مُبْتَدِئ (active "beginning"), مُبْتَدَأ (passive "begun")
-- geminate no assimilation: مُبْتَزّ (both active "robbing" and passive "robbed")
-- final-weak no assimilation: مُبْتَنٍ (active "building"), مُبْتَنًى (passive "built")
-- final-weak with medial wāw no assimilation: مُحْتَوٍ (active "containing"), مُحْتَوًى (passive "contained")
-- hollow no assimilation: مُخْتَار (both active "choosing" and passive "chosen")
--
-- sound with total assimilation: مُتَّبِع (active "following"), مُتَّبَع (passive "followed")
-- sound with total assimilation, assimilating wāw: مُتَّعِد (active "threatening"), مُتَّعَد (passive "threatened")
-- sound with total assimilation, irregularly assimilating hamza: مُتَّخِذ (active "taking"), مُتَّخَذ (passive "taken")
-- sound with total assimilation (to ḏāl, producing dāl): مُدَّخِر (active "reserving"), مُدَّخَر (passive "reserved")
-- sound with total assimilation (to ḏāl): مُذَّكِر (active "remembering"), مُذَّكَر (passive "remembered")
-- sound with total assimilation (to ṭāʔ): مُطَّرِح (active "discarding"), مُطَّرَح (passive "discarded")
-- sound with total assimilation (to ẓāʔ): مُظَّلِم (active "tolerating"), مُظَّلَم (passive "tolerated")
-- final-weak with total assimilation, assimilating wāw: مُتَّقٍ (active "guarding against"), مُتَّقًى (passive "guarded against")
-- final-weak with total assimilation (to ṯāʔ): مُثَّنٍ (active "undulating"), مُثَّنًى (passive "undulated")
-- final-weak with total assimilation (to dāl): مُدَّعٍ (active "claiming"), مُدَّعًى (passive "claimed")
-- sound with partial assimilation (to zayn): مُزْدَهِر (active "thriving"), مُزْدَهَر (passive "thrived")
-- sound with medial wāw with partial assimilation (to zayn): مُزْدَوِج (active "appearing twice")
-- sound with partial assimilation (to ṣād): مُصْطَبِح (active "illuminating"), مُصْطَبَح (passive, "illuminated")
-- sound with partial assimilation (to ḍād): مُضْطَرِب (active "to be disturbed"; no passive)
-- geminate with partial assimilation (to ṣād): مُصْطَبّ (both active "effusing" and passive "effused")
-- geminate with partial assimilation (to ḍād): مُضْطَرّ (both active "forcing" and passive "forced")
-- final-weak with partial assimilation (to ṣād): مُصْطَلٍ (active "warming"), مُصْطَلًى (passive "warmed")
-- hollow with partial assimilation (to zayn): مُزْدَاد (both active "increasing" and passive "increased")
-- hollow with partial assimilation (to ṣad): مُصْطَاد (both active "hunting" and passive "hunted")
local sound_prefix, sufind
if vform == "VII" then
check(2, N)
sound_prefix = MU .. N .. SK .. c(3)
sufind = 4
else
local c2 = c(2)
if c2 == T or c2 == "د" or c2 == "ث" or c2 == "ذ" or c2 == "ط" or c2 == "ظ" then
-- full assimilation
sound_prefix = MU .. c2 .. SH
sufind = 3
else
-- partial or no assimilation
if c2 == "ز" then
check(3, "د")
elseif c2 == "ص" or c2 == "ض" then
check(3, "ط")
else
check(3, T)
end
sound_prefix = MU .. c2 .. SK .. c(3)
sufind = 4
end
end
if c(sufind) == ALIF then
-- hollow, active or passive
check_len(sufind + 1, sufind + 1)
check_weakness({"hollow"}, "allow missing")
vocalized = sound_prefix .. AA .. c(sufind + 1)
elseif len == sufind then
-- active final-weak or active or passive geminate
if is_active then
check_weakness({"geminate", "final-weak", "assimilated+final-weak"})
if weakness == "geminate" then
vocalized = sound_prefix .. A .. c(len) .. SH
else
vocalized = sound_prefix .. A .. c(len) .. IN
end
else
check_weakness({"geminate"}, "allow missing")
vocalized = sound_prefix .. A .. c(len) .. SH
end
else
sound_prefix = sound_prefix .. A .. c(sufind)
handle_possibly_final_weak(sound_prefix, sufind + 1)
end
elseif vform == "IX" then
check_len(4, 4)
vocalized = MU .. c(2) .. SK .. c(3) .. A .. c(4) .. SH
elseif vform == "IVq" then
-- e.g. [[اذلعب]] "to scamper away", مُذْلَعِبّ (active), مُذْلَعَبّ (passive);
-- [[اطمأن]] "to remain quietly; to be certain", مُطْمَئِنّ (active), مُطْمَأَنّ (passive)
check_len(5, 5)
local sound_prefix = MU .. c(2) .. SK .. c(3) .. A .. c(4)
if is_active then
vocalized = sound_prefix .. I .. c(5) .. SH
else
vocalized = sound_prefix .. A .. c(5) .. SH
end
elseif vform == "XI" then
check_len(5, 5)
check(4, ALIF)
vocalized = MU .. c(2) .. SK .. c(3) .. AA .. c(5) .. SH
-- e.g. [[احمار]] "to turn red, to blush", مُحْمَارّ (active)
elseif vform == "XIV" or vform == "XV" then
-- FIXME: Implement. No examples in Wiktionary currently; need to look up in a grammar.
error("Support for verb form " .. vform .. " not implemented yet")
else
error("Don't recognize verb form " .. vform)
end
vocalized = rsub(vocalized, HAMZA .. AA, AMAD)
local reconstructed_headword = lang:makeEntryName(vocalized)
if reconstructed_headword ~= orig_headword then
error(("Internal error: Vocalized participle %s doesn't match original participle %s"):format(
vocalized, orig_headword))
end
-- Apply NFC-style normalization to match MediaWiki's automatic normalization
return apply_nfc_shadda(vocalized)
end
function export.infer_participle_vocalization_json(frame)
local iparams = {
[1] = {required = true},
[2] = {required = true},
["weakness"] = {},
["passive"] = {type = "boolean"}
}
local iargs = require("Module:parameters").process(frame.args, iparams)
return export.infer_participle_vocalization(iargs[1], iargs[2], iargs.weakness, not iargs.passive)
end
return export
rmvm7057fo1gecgegz0hunv9ud3hneq
نقاش المستخدم:ابن إبراهيم القرطبي
3
200180
1159139
944256
2026-09-11T09:48:36Z
Gerges
33730
نقل Gerges صفحة [[نقاش المستخدم:א. א. אינסטלציה]] إلى [[نقاش المستخدم:ابن إبراهيم القرطبي]]: نُقِلت الصفحة آليا عند إعادة تسمية المستخدم «[[Special:CentralAuth/א. א. אינסטלציה|א. א. אינסטלציה]]» إلى «[[Special:CentralAuth/ابن إبراهيم القرطبي|ابن إبراهيم القرطبي]]».
944256
wikitext
text/x-wiki
<div style="width:auto" style="margin-bottom:1.25em;border:1px solid #{{#switch:bleu|bleu=8898BF|vert=97BF87|jaune=AAAA66|or=777777|orange=AA8833|violet=7755AA|saumon=AA8866|sable=AA9955|vertmoyen=88BB55|bleufoncé=1144AA|rouge=AA8866|écarlate=AAAAAA|#default=AAAAAA}}; background:white;padding:0">
<div style="height:8px;margin:0;border:0;border-bottom:1px solid #{{#switch:bleu|bleu=8898BF|vert=97BF87|jaune=AAAA66|or=777777|orange=AA8833|violet=7755AA|saumon=AA8866|sable=AA9955|vertmoyen=88BB55|bleufoncé=1144AA|rouge=AA8866|écarlate=AAAAAA|#default=AAAAAA}};background: #{{#switch:bleu|bleu=C8D8FF|vert=D7FFC7|jaune=FFFFB9|or=FFE040|orange=FFDD88|violet=C9AEF1|saumon=FBDFBE|sable=F1E2AE|vertmoyen=99CC66|bleufoncé=003399|rouge=FFDAB9|écarlate=FF3333|#default=E0E0E0}};font-size:1px"></div>
<div style="padding:5px;font-size:small"><center style="word-spacing:1ex"><small>[[ويكاموس:سفارة|Welcome!]] [[ويكاموس:سفارة|Bienvenue!]] [[ويكاموس:سفارة|Willkommen!]] [[ويكاموس:سفارة|Benvenuti]] [[ويكاموس:سفارة|¡Bienvenido!]] [[ويكاموس:سفارة|ようこそ]] [[ويكاموس:سفارة|Dobrodosli]] [[ويكاموس:سفارة|환영합니다]] [[ويكاموس:سفارة|Добро пожаловать]] [[ويكاموس:سفارة|Bem-vindo!]] [[ويكاموس:سفارة|欢迎]] [[ويكاموس:سفارة|Bonvenon]] [[ويكاموس:سفارة|Welkom]]</small></center></div>
<center><big>'''[[ويكاموس:ترحيب بالقادمين الجدد|مرحبا بك]] في [[ويكاموس]]، א. א. אינסטלציה !'''</big></center>
{|
|[[ملف:WiktionaryAr.svg|يمين|40بك]]
|
[[ويكاموس]] هو <u>مشروع تحرير جماعي لـ'''قاموس علمي وثقافي''' '''بمختلف اللغات'''</u>. لطلب المساعدة في أي وقت تجد وصلة ([[مساعدة:محتويات|'''مساعدة''']]) في هامش كل صفحة على اليمين.
لا تتردد في قراءة '''الوصايا الأولى''' [[ويكاموس:دروس (التحرير)|للتحرير]] و[[ويكاموس:دليل سريع|التعديل]] و[[مساعدة:إنشاء صفحة جديدة|إنشاء المفردات الجديدة]] و[[ويكاموس:دليل سريع|تنسيقها]] وفقا [[ويكاموس:الركائز الخمس|لمعايير ويكاموس]]. تم تخصيص '''[[ويكاموس:ساحة التجربة|ساحة التجربة]]''' لاحتواء تجاربك وخطواتك الأولى في التحرير والتعديل.
|--
|[[ملف:Presa de decissions.png|يمين|40بك]]
|
يمكنك الاستفسار و[[ويكاموس:أسئلة|طرح الأسئلة]] المتعلقة بطبيعة العمل في ويكاموس.
يمكنك أيضا [{{fullurl:مستخدم:א. א. אינסטלציה|action=edit}} التعريف] بنفسك في [[مستخدم:א. א. אינסטלציה|'''صفحتك الشخصية''']]، بكتابة معلومات عنك: [[ويكاموس:بابل|اللغات التي تتكلمها]]، [[ويكاموس:صناديق المستخدم|من أي بلد أنت، ما هي محاور اهتمامك]]...
|---
|[[ملف:Crystal Clear app ktip.png|يمين|40بك]]
|
لا تنس [[ويكاموس:توقيع|'''التوقيع''']] في [[مساعدة:صفحة النقاش|'''صفحات النقاش''']] بكتابة أربع مدّات، هكذا (<nowiki>~~~~</nowiki>). ولكن يجب <u>'''عدم التوقيع في صفحات المقالات القاموسية'''</u>، لأنها تصبح ملكًا للجميع لحظة إنشائها.
نرجو منك ألاّ تنسى [[ويكاموس:حقوق التأليف والنشر|<u>'''عدم النسخ من الإنترنت'''</u>]] لأسباب [[ويكاموس:حقوق التأليف والنشر|<u>'''حقوق التأليف والنشر'''</u>]].
|--
|[[ملف:Crystal Clear app amor.png|يمين|40بك]]
|
أخيرا، وهو أهم شيء، نتمى لك أن [[ويكاموس:كن جريئا|'''تتمتع''']] بالمساهمة [[ويكاموس:بوابة المجتمع|'''معنا''']] في هذا المشروع!
إذا كانت لديك أي استفسارات أو أسئلة أخرى، يمكنك طرحها في [[ويكاموس:أسئلة|هذه الصفحة]] أو في صفحة نقاشي.
|}
</div></div> --[[مستخدم:Meno25|Meno25]] ([[نقاش المستخدم:Meno25|نقاش]] • [[خاص:مساهمات/Meno25|مساهمات]]) 17:21، 18 يوليو 2018 (ت ع م)
6f82t7zg64ija2c4ml0cxldivi18im9
قالب:استشهاد بويكي بيانات/مختبر
10
231222
1158973
1158970
2026-09-10T12:01:24Z
حبيشان
31560
1158973
wikitext
text/x-wiki
{{تفضيلات مقالة|استشهاد بويكي بيانات:سنة النشر الأصلية=unset}}
* {{استشهاد بويكي بيانات/ملعب|Q115727209|مرجع=أبو السعود|سنة النشر الأصلية=unset}}
* {{استشهاد بويكي بيانات|Q115727209|مرجع=أبو السعود}}
* {{استشهاد بويكي بيانات/ملعب|Q115641715|مرجع=الشربيني1868}}
* {{استشهاد بويكي بيانات|Q115641715|مرجع=الشربيني1868|سنة النشر الأصلية=unset}}
* {{استشهاد بويكي بيانات/ملعب|Q115683910|مرجع=القرطبي1935}}
* {{استشهاد بويكي بيانات|Q115683910|مرجع=القرطبي1935}}
* {{استشهاد بويكي بيانات/ملعب|Q115728353|مرجع=السيوطي1974}}
* {{استشهاد بويكي بيانات|Q115728353|مرجع=السيوطي1974}}
* {{استشهاد بويكي بيانات/ملعب|Q115732199|مرجع=السيوطي1978}}
* {{استشهاد بويكي بيانات|Q115732199|مرجع=السيوطي1978}}
* {{استشهاد بويكي بيانات/ملعب|Q115641917|مرجع=القاضي1981}}
* {{استشهاد بويكي بيانات|Q115641917|مرجع=القاضي1981}}
* {{استشهاد بويكي بيانات/ملعب|Q115641984|مرجع=ابن عاشور1984}}
* {{استشهاد بويكي بيانات|Q115641984|مرجع=ابن عاشور1984}}
* {{استشهاد بويكي بيانات/ملعب|Q115683837}}
* {{استشهاد بويكي بيانات|Q115683837}}
* {{استشهاد بويكي بيانات/ملعب|Q115782668|مرجع=النحاس1985|سنة النشر الأصلية=unset}}
* {{استشهاد بويكي بيانات|Q115782668|مرجع=النحاس1985}}
* {{استشهاد بويكي بيانات/ملعب|Q115746114|مرجع=القحطاني1989}}
* {{استشهاد بويكي بيانات|Q115746114|مرجع=القحطاني1989}}
* {{استشهاد بويكي بيانات/ملعب|Q19443162}}
* {{استشهاد بويكي بيانات|Q19443162}}
* {{استشهاد بويكي بيانات/ملعب|Q115640897|مرجع=درويش1992}}
* {{استشهاد بويكي بيانات|Q115640897|مرجع=درويش1992}}
* {{استشهاد بويكي بيانات/ملعب|Q115754123|مرجع=الواحدي1992}}
* {{استشهاد بويكي بيانات|Q115754123|مرجع=الواحدي1992}}
* {{استشهاد بويكي بيانات/ملعب|Q115651867|مرجع=الداني1994}}
* {{استشهاد بويكي بيانات|Q115651867|مرجع=الداني1994}}
* {{استشهاد بويكي بيانات/ملعب|Q115756452|مرجع=عطية1995}}
* {{استشهاد بويكي بيانات|Q115756452|مرجع=عطية1995}}
* {{استشهاد بويكي بيانات/ملعب|Q115701544|مرجع=ابن كثير1998}}
* {{استشهاد بويكي بيانات|Q115701544|مرجع=ابن كثير1998}}
* {{استشهاد بويكي بيانات/ملعب|Q115730072|مرجع=ابن عادل1998}}
* {{استشهاد بويكي بيانات|Q115730072|مرجع=ابن عادل1998}}
* {{استشهاد بويكي بيانات/ملعب|Q115730115|مرجع=الرازي2000}}
* {{استشهاد بويكي بيانات|Q115730115|مرجع=الرازي2000}}
* {{استشهاد بويكي بيانات/ملعب|Q97221368|مرجع=الطبري2001}}
* {{استشهاد بويكي بيانات|Q97221368|مرجع=الطبري2001}}
* {{استشهاد بويكي بيانات/ملعب|Q115484580|مرجع=أحمد2001}}
* {{استشهاد بويكي بيانات|Q115484580|مرجع=أحمد2001}}
* {{استشهاد بويكي بيانات/ملعب|Q115683684}}
* {{استشهاد بويكي بيانات|Q115683684}}
* {{استشهاد بويكي بيانات/ملعب|Q115640158|مرجع=الدعاس2004}}
* {{استشهاد بويكي بيانات|Q115640158|مرجع=الدعاس2004}}
* {{استشهاد بويكي بيانات/ملعب|Q115683765|مرجع=سلامة2006}}
* {{استشهاد بويكي بيانات|Q115683765|مرجع=سلامة2006}}
* {{استشهاد بويكي بيانات/ملعب|Q115701920|مرجع=ابن القيم2007}}
* {{استشهاد بويكي بيانات|Q115701920|مرجع=ابن القيم2007}}
* {{استشهاد بويكي بيانات/ملعب|Q115743500}}
* {{استشهاد بويكي بيانات|Q115743500}}
* {{استشهاد بويكي بيانات/ملعب|Q115615370|مرجع=الشايع2011}}
* {{استشهاد بويكي بيانات|Q115615370|مرجع=الشايع2011}}
* {{استشهاد بويكي بيانات/ملعب|Q140501357}}
* {{استشهاد بويكي بيانات|Q140501357}}
* {{استشهاد بويكي بيانات/ملعب|Q136804563|ج=2|ص=442}}
* {{استشهاد بويكي بيانات|Q136804563|ج=2|ص=442}}
* {{استشهاد بويكي بيانات/ملعب|Q115796840|ج=2|ص=100}}
* {{استشهاد بويكي بيانات|Q115796840|ج=2|ص=100}}
* {{استشهاد بويكي بيانات/ملعب|Q114810954|ص=100}}
* {{استشهاد بويكي بيانات|Q114810954|ص=100}}
<div dir="ltr">
* {{استشهاد بويكي بيانات/ملعب|Q115917529|مرجع=Dyson1999}}
* {{استشهاد بويكي بيانات|Q115917529|مرجع=Dyson1999}}
* {{استشهاد بويكي بيانات/ملعب|Q118316084|مرجع=Javvin2005}}
* {{استشهاد بويكي بيانات|Q118316084|مرجع=Javvin2005}}
* {{استشهاد بويكي بيانات/ملعب|Q115917346|مرجع=Kozierok2005}}
* {{استشهاد بويكي بيانات|Q115917346|مرجع=Kozierok2005}}
* {{استشهاد بويكي بيانات/ملعب|Q115922106|مرجع=Fall2012}}
* {{استشهاد بويكي بيانات|Q115922106|مرجع=Fall2012}}
* {{استشهاد بويكي بيانات/ملعب|Q115919723|مرجع=Odom2013}}
* {{استشهاد بويكي بيانات|Q115919723|مرجع=Odom2013}}
* {{استشهاد بويكي بيانات/ملعب|Q9065143}}
</div>
e57fb4myaa8q5976cpwtgjsv411wwu3
1158975
1158973
2026-09-10T12:04:57Z
حبيشان
31560
1158975
wikitext
text/x-wiki
{{تفضيلات مقالة|استشهاد بويكي بيانات:orig-date=unset}}
* {{استشهاد بويكي بيانات/ملعب|Q115727209|مرجع=أبو السعود|سنة النشر الأصلية=unset}}
* {{استشهاد بويكي بيانات|Q115727209|مرجع=أبو السعود}}
* {{استشهاد بويكي بيانات/ملعب|Q115641715|مرجع=الشربيني1868}}
* {{استشهاد بويكي بيانات|Q115641715|مرجع=الشربيني1868|سنة النشر الأصلية=unset}}
* {{استشهاد بويكي بيانات/ملعب|Q115683910|مرجع=القرطبي1935}}
* {{استشهاد بويكي بيانات|Q115683910|مرجع=القرطبي1935}}
* {{استشهاد بويكي بيانات/ملعب|Q115728353|مرجع=السيوطي1974}}
* {{استشهاد بويكي بيانات|Q115728353|مرجع=السيوطي1974}}
* {{استشهاد بويكي بيانات/ملعب|Q115732199|مرجع=السيوطي1978}}
* {{استشهاد بويكي بيانات|Q115732199|مرجع=السيوطي1978}}
* {{استشهاد بويكي بيانات/ملعب|Q115641917|مرجع=القاضي1981}}
* {{استشهاد بويكي بيانات|Q115641917|مرجع=القاضي1981}}
* {{استشهاد بويكي بيانات/ملعب|Q115641984|مرجع=ابن عاشور1984}}
* {{استشهاد بويكي بيانات|Q115641984|مرجع=ابن عاشور1984}}
* {{استشهاد بويكي بيانات/ملعب|Q115683837}}
* {{استشهاد بويكي بيانات|Q115683837}}
* {{استشهاد بويكي بيانات/ملعب|Q115782668|مرجع=النحاس1985|سنة النشر الأصلية=unset}}
* {{استشهاد بويكي بيانات|Q115782668|مرجع=النحاس1985}}
* {{استشهاد بويكي بيانات/ملعب|Q115746114|مرجع=القحطاني1989}}
* {{استشهاد بويكي بيانات|Q115746114|مرجع=القحطاني1989}}
* {{استشهاد بويكي بيانات/ملعب|Q19443162}}
* {{استشهاد بويكي بيانات|Q19443162}}
* {{استشهاد بويكي بيانات/ملعب|Q115640897|مرجع=درويش1992}}
* {{استشهاد بويكي بيانات|Q115640897|مرجع=درويش1992}}
* {{استشهاد بويكي بيانات/ملعب|Q115754123|مرجع=الواحدي1992}}
* {{استشهاد بويكي بيانات|Q115754123|مرجع=الواحدي1992}}
* {{استشهاد بويكي بيانات/ملعب|Q115651867|مرجع=الداني1994}}
* {{استشهاد بويكي بيانات|Q115651867|مرجع=الداني1994}}
* {{استشهاد بويكي بيانات/ملعب|Q115756452|مرجع=عطية1995}}
* {{استشهاد بويكي بيانات|Q115756452|مرجع=عطية1995}}
* {{استشهاد بويكي بيانات/ملعب|Q115701544|مرجع=ابن كثير1998}}
* {{استشهاد بويكي بيانات|Q115701544|مرجع=ابن كثير1998}}
* {{استشهاد بويكي بيانات/ملعب|Q115730072|مرجع=ابن عادل1998}}
* {{استشهاد بويكي بيانات|Q115730072|مرجع=ابن عادل1998}}
* {{استشهاد بويكي بيانات/ملعب|Q115730115|مرجع=الرازي2000}}
* {{استشهاد بويكي بيانات|Q115730115|مرجع=الرازي2000}}
* {{استشهاد بويكي بيانات/ملعب|Q97221368|مرجع=الطبري2001}}
* {{استشهاد بويكي بيانات|Q97221368|مرجع=الطبري2001}}
* {{استشهاد بويكي بيانات/ملعب|Q115484580|مرجع=أحمد2001}}
* {{استشهاد بويكي بيانات|Q115484580|مرجع=أحمد2001}}
* {{استشهاد بويكي بيانات/ملعب|Q115683684}}
* {{استشهاد بويكي بيانات|Q115683684}}
* {{استشهاد بويكي بيانات/ملعب|Q115640158|مرجع=الدعاس2004}}
* {{استشهاد بويكي بيانات|Q115640158|مرجع=الدعاس2004}}
* {{استشهاد بويكي بيانات/ملعب|Q115683765|مرجع=سلامة2006}}
* {{استشهاد بويكي بيانات|Q115683765|مرجع=سلامة2006}}
* {{استشهاد بويكي بيانات/ملعب|Q115701920|مرجع=ابن القيم2007}}
* {{استشهاد بويكي بيانات|Q115701920|مرجع=ابن القيم2007}}
* {{استشهاد بويكي بيانات/ملعب|Q115743500}}
* {{استشهاد بويكي بيانات|Q115743500}}
* {{استشهاد بويكي بيانات/ملعب|Q115615370|مرجع=الشايع2011}}
* {{استشهاد بويكي بيانات|Q115615370|مرجع=الشايع2011}}
* {{استشهاد بويكي بيانات/ملعب|Q140501357}}
* {{استشهاد بويكي بيانات|Q140501357}}
* {{استشهاد بويكي بيانات/ملعب|Q136804563|ج=2|ص=442}}
* {{استشهاد بويكي بيانات|Q136804563|ج=2|ص=442}}
* {{استشهاد بويكي بيانات/ملعب|Q115796840|ج=2|ص=100}}
* {{استشهاد بويكي بيانات|Q115796840|ج=2|ص=100}}
* {{استشهاد بويكي بيانات/ملعب|Q114810954|ص=100}}
* {{استشهاد بويكي بيانات|Q114810954|ص=100}}
<div dir="ltr">
* {{استشهاد بويكي بيانات/ملعب|Q115917529|مرجع=Dyson1999}}
* {{استشهاد بويكي بيانات|Q115917529|مرجع=Dyson1999}}
* {{استشهاد بويكي بيانات/ملعب|Q118316084|مرجع=Javvin2005}}
* {{استشهاد بويكي بيانات|Q118316084|مرجع=Javvin2005}}
* {{استشهاد بويكي بيانات/ملعب|Q115917346|مرجع=Kozierok2005}}
* {{استشهاد بويكي بيانات|Q115917346|مرجع=Kozierok2005}}
* {{استشهاد بويكي بيانات/ملعب|Q115922106|مرجع=Fall2012}}
* {{استشهاد بويكي بيانات|Q115922106|مرجع=Fall2012}}
* {{استشهاد بويكي بيانات/ملعب|Q115919723|مرجع=Odom2013}}
* {{استشهاد بويكي بيانات|Q115919723|مرجع=Odom2013}}
* {{استشهاد بويكي بيانات/ملعب|Q9065143}}
</div>
m1emanrioywzpwilmuqf15un0x3pjk6
1158985
1158975
2026-09-10T12:17:33Z
حبيشان
31560
1158985
wikitext
text/x-wiki
{{تفضيلات مقالة|استشهاد بويكي بيانات:orig-date=unset}}
{{تفضيل مقالة|استشهاد بويكي بيانات|orig-date}}
* {{استشهاد بويكي بيانات/ملعب|Q115727209|مرجع=أبو السعود|سنة النشر الأصلية=unset}}
* {{استشهاد بويكي بيانات|Q115727209|مرجع=أبو السعود}}
* {{استشهاد بويكي بيانات/ملعب|Q115641715|مرجع=الشربيني1868}}
* {{استشهاد بويكي بيانات|Q115641715|مرجع=الشربيني1868|سنة النشر الأصلية=unset}}
* {{استشهاد بويكي بيانات/ملعب|Q115683910|مرجع=القرطبي1935}}
* {{استشهاد بويكي بيانات|Q115683910|مرجع=القرطبي1935}}
* {{استشهاد بويكي بيانات/ملعب|Q115728353|مرجع=السيوطي1974}}
* {{استشهاد بويكي بيانات|Q115728353|مرجع=السيوطي1974}}
* {{استشهاد بويكي بيانات/ملعب|Q115732199|مرجع=السيوطي1978}}
* {{استشهاد بويكي بيانات|Q115732199|مرجع=السيوطي1978}}
* {{استشهاد بويكي بيانات/ملعب|Q115641917|مرجع=القاضي1981}}
* {{استشهاد بويكي بيانات|Q115641917|مرجع=القاضي1981}}
* {{استشهاد بويكي بيانات/ملعب|Q115641984|مرجع=ابن عاشور1984}}
* {{استشهاد بويكي بيانات|Q115641984|مرجع=ابن عاشور1984}}
* {{استشهاد بويكي بيانات/ملعب|Q115683837}}
* {{استشهاد بويكي بيانات|Q115683837}}
* {{استشهاد بويكي بيانات/ملعب|Q115782668|مرجع=النحاس1985|سنة النشر الأصلية=unset}}
* {{استشهاد بويكي بيانات|Q115782668|مرجع=النحاس1985}}
* {{استشهاد بويكي بيانات/ملعب|Q115746114|مرجع=القحطاني1989}}
* {{استشهاد بويكي بيانات|Q115746114|مرجع=القحطاني1989}}
* {{استشهاد بويكي بيانات/ملعب|Q19443162}}
* {{استشهاد بويكي بيانات|Q19443162}}
* {{استشهاد بويكي بيانات/ملعب|Q115640897|مرجع=درويش1992}}
* {{استشهاد بويكي بيانات|Q115640897|مرجع=درويش1992}}
* {{استشهاد بويكي بيانات/ملعب|Q115754123|مرجع=الواحدي1992}}
* {{استشهاد بويكي بيانات|Q115754123|مرجع=الواحدي1992}}
* {{استشهاد بويكي بيانات/ملعب|Q115651867|مرجع=الداني1994}}
* {{استشهاد بويكي بيانات|Q115651867|مرجع=الداني1994}}
* {{استشهاد بويكي بيانات/ملعب|Q115756452|مرجع=عطية1995}}
* {{استشهاد بويكي بيانات|Q115756452|مرجع=عطية1995}}
* {{استشهاد بويكي بيانات/ملعب|Q115701544|مرجع=ابن كثير1998}}
* {{استشهاد بويكي بيانات|Q115701544|مرجع=ابن كثير1998}}
* {{استشهاد بويكي بيانات/ملعب|Q115730072|مرجع=ابن عادل1998}}
* {{استشهاد بويكي بيانات|Q115730072|مرجع=ابن عادل1998}}
* {{استشهاد بويكي بيانات/ملعب|Q115730115|مرجع=الرازي2000}}
* {{استشهاد بويكي بيانات|Q115730115|مرجع=الرازي2000}}
* {{استشهاد بويكي بيانات/ملعب|Q97221368|مرجع=الطبري2001}}
* {{استشهاد بويكي بيانات|Q97221368|مرجع=الطبري2001}}
* {{استشهاد بويكي بيانات/ملعب|Q115484580|مرجع=أحمد2001}}
* {{استشهاد بويكي بيانات|Q115484580|مرجع=أحمد2001}}
* {{استشهاد بويكي بيانات/ملعب|Q115683684}}
* {{استشهاد بويكي بيانات|Q115683684}}
* {{استشهاد بويكي بيانات/ملعب|Q115640158|مرجع=الدعاس2004}}
* {{استشهاد بويكي بيانات|Q115640158|مرجع=الدعاس2004}}
* {{استشهاد بويكي بيانات/ملعب|Q115683765|مرجع=سلامة2006}}
* {{استشهاد بويكي بيانات|Q115683765|مرجع=سلامة2006}}
* {{استشهاد بويكي بيانات/ملعب|Q115701920|مرجع=ابن القيم2007}}
* {{استشهاد بويكي بيانات|Q115701920|مرجع=ابن القيم2007}}
* {{استشهاد بويكي بيانات/ملعب|Q115743500}}
* {{استشهاد بويكي بيانات|Q115743500}}
* {{استشهاد بويكي بيانات/ملعب|Q115615370|مرجع=الشايع2011}}
* {{استشهاد بويكي بيانات|Q115615370|مرجع=الشايع2011}}
* {{استشهاد بويكي بيانات/ملعب|Q140501357}}
* {{استشهاد بويكي بيانات|Q140501357}}
* {{استشهاد بويكي بيانات/ملعب|Q136804563|ج=2|ص=442}}
* {{استشهاد بويكي بيانات|Q136804563|ج=2|ص=442}}
* {{استشهاد بويكي بيانات/ملعب|Q115796840|ج=2|ص=100}}
* {{استشهاد بويكي بيانات|Q115796840|ج=2|ص=100}}
* {{استشهاد بويكي بيانات/ملعب|Q114810954|ص=100}}
* {{استشهاد بويكي بيانات|Q114810954|ص=100}}
<div dir="ltr">
* {{استشهاد بويكي بيانات/ملعب|Q115917529|مرجع=Dyson1999}}
* {{استشهاد بويكي بيانات|Q115917529|مرجع=Dyson1999}}
* {{استشهاد بويكي بيانات/ملعب|Q118316084|مرجع=Javvin2005}}
* {{استشهاد بويكي بيانات|Q118316084|مرجع=Javvin2005}}
* {{استشهاد بويكي بيانات/ملعب|Q115917346|مرجع=Kozierok2005}}
* {{استشهاد بويكي بيانات|Q115917346|مرجع=Kozierok2005}}
* {{استشهاد بويكي بيانات/ملعب|Q115922106|مرجع=Fall2012}}
* {{استشهاد بويكي بيانات|Q115922106|مرجع=Fall2012}}
* {{استشهاد بويكي بيانات/ملعب|Q115919723|مرجع=Odom2013}}
* {{استشهاد بويكي بيانات|Q115919723|مرجع=Odom2013}}
* {{استشهاد بويكي بيانات/ملعب|Q9065143}}
</div>
d07f81nt52epqs25f65dgm6blte9qy3
1159051
1158985
2026-09-10T13:17:01Z
حبيشان
31560
1159051
wikitext
text/x-wiki
* {{استشهاد بويكي بيانات/ملعب|Q115727209|مرجع=أبو السعود|سنة النشر الأصلية=unset}}
* {{استشهاد بويكي بيانات|Q115727209|مرجع=أبو السعود}}
* {{استشهاد بويكي بيانات/ملعب|Q115641715|مرجع=الشربيني1868}}
* {{استشهاد بويكي بيانات|Q115641715|مرجع=الشربيني1868|سنة النشر الأصلية=unset}}
* {{استشهاد بويكي بيانات/ملعب|Q115683910|مرجع=القرطبي1935}}
* {{استشهاد بويكي بيانات|Q115683910|مرجع=القرطبي1935}}
* {{استشهاد بويكي بيانات/ملعب|Q115728353|مرجع=السيوطي1974}}
* {{استشهاد بويكي بيانات|Q115728353|مرجع=السيوطي1974}}
* {{استشهاد بويكي بيانات/ملعب|Q115732199|مرجع=السيوطي1978}}
* {{استشهاد بويكي بيانات|Q115732199|مرجع=السيوطي1978}}
* {{استشهاد بويكي بيانات/ملعب|Q115641917|مرجع=القاضي1981}}
* {{استشهاد بويكي بيانات|Q115641917|مرجع=القاضي1981}}
* {{استشهاد بويكي بيانات/ملعب|Q115641984|مرجع=ابن عاشور1984}}
* {{استشهاد بويكي بيانات|Q115641984|مرجع=ابن عاشور1984}}
* {{استشهاد بويكي بيانات/ملعب|Q115683837}}
* {{استشهاد بويكي بيانات|Q115683837}}
* {{استشهاد بويكي بيانات/ملعب|Q115782668|مرجع=النحاس1985|سنة النشر الأصلية=unset}}
* {{استشهاد بويكي بيانات|Q115782668|مرجع=النحاس1985}}
* {{استشهاد بويكي بيانات/ملعب|Q115746114|مرجع=القحطاني1989}}
* {{استشهاد بويكي بيانات|Q115746114|مرجع=القحطاني1989}}
* {{استشهاد بويكي بيانات/ملعب|Q19443162}}
* {{استشهاد بويكي بيانات|Q19443162}}
* {{استشهاد بويكي بيانات/ملعب|Q115640897|مرجع=درويش1992}}
* {{استشهاد بويكي بيانات|Q115640897|مرجع=درويش1992}}
* {{استشهاد بويكي بيانات/ملعب|Q115754123|مرجع=الواحدي1992}}
* {{استشهاد بويكي بيانات|Q115754123|مرجع=الواحدي1992}}
* {{استشهاد بويكي بيانات/ملعب|Q115651867|مرجع=الداني1994}}
* {{استشهاد بويكي بيانات|Q115651867|مرجع=الداني1994}}
* {{استشهاد بويكي بيانات/ملعب|Q115756452|مرجع=عطية1995}}
* {{استشهاد بويكي بيانات|Q115756452|مرجع=عطية1995}}
* {{استشهاد بويكي بيانات/ملعب|Q115701544|مرجع=ابن كثير1998}}
* {{استشهاد بويكي بيانات|Q115701544|مرجع=ابن كثير1998}}
* {{استشهاد بويكي بيانات/ملعب|Q115730072|مرجع=ابن عادل1998}}
* {{استشهاد بويكي بيانات|Q115730072|مرجع=ابن عادل1998}}
* {{استشهاد بويكي بيانات/ملعب|Q115730115|مرجع=الرازي2000}}
* {{استشهاد بويكي بيانات|Q115730115|مرجع=الرازي2000}}
* {{استشهاد بويكي بيانات/ملعب|Q97221368|مرجع=الطبري2001}}
* {{استشهاد بويكي بيانات|Q97221368|مرجع=الطبري2001}}
* {{استشهاد بويكي بيانات/ملعب|Q115484580|مرجع=أحمد2001}}
* {{استشهاد بويكي بيانات|Q115484580|مرجع=أحمد2001}}
* {{استشهاد بويكي بيانات/ملعب|Q115683684}}
* {{استشهاد بويكي بيانات|Q115683684}}
* {{استشهاد بويكي بيانات/ملعب|Q115640158|مرجع=الدعاس2004}}
* {{استشهاد بويكي بيانات|Q115640158|مرجع=الدعاس2004}}
* {{استشهاد بويكي بيانات/ملعب|Q115683765|مرجع=سلامة2006}}
* {{استشهاد بويكي بيانات|Q115683765|مرجع=سلامة2006}}
* {{استشهاد بويكي بيانات/ملعب|Q115701920|مرجع=ابن القيم2007}}
* {{استشهاد بويكي بيانات|Q115701920|مرجع=ابن القيم2007}}
* {{استشهاد بويكي بيانات/ملعب|Q115743500}}
* {{استشهاد بويكي بيانات|Q115743500}}
* {{استشهاد بويكي بيانات/ملعب|Q115615370|مرجع=الشايع2011}}
* {{استشهاد بويكي بيانات|Q115615370|مرجع=الشايع2011}}
* {{استشهاد بويكي بيانات/ملعب|Q140501357}}
* {{استشهاد بويكي بيانات|Q140501357}}
* {{استشهاد بويكي بيانات/ملعب|Q136804563|ج=2|ص=442}}
* {{استشهاد بويكي بيانات|Q136804563|ج=2|ص=442}}
* {{استشهاد بويكي بيانات/ملعب|Q115796840|ج=2|ص=100}}
* {{استشهاد بويكي بيانات|Q115796840|ج=2|ص=100}}
* {{استشهاد بويكي بيانات/ملعب|Q114810954|ص=100}}
* {{استشهاد بويكي بيانات|Q114810954|ص=100}}
<div dir="ltr">
* {{استشهاد بويكي بيانات/ملعب|Q115917529|مرجع=Dyson1999}}
* {{استشهاد بويكي بيانات|Q115917529|مرجع=Dyson1999}}
* {{استشهاد بويكي بيانات/ملعب|Q118316084|مرجع=Javvin2005}}
* {{استشهاد بويكي بيانات|Q118316084|مرجع=Javvin2005}}
* {{استشهاد بويكي بيانات/ملعب|Q115917346|مرجع=Kozierok2005}}
* {{استشهاد بويكي بيانات|Q115917346|مرجع=Kozierok2005}}
* {{استشهاد بويكي بيانات/ملعب|Q115922106|مرجع=Fall2012}}
* {{استشهاد بويكي بيانات|Q115922106|مرجع=Fall2012}}
* {{استشهاد بويكي بيانات/ملعب|Q115919723|مرجع=Odom2013}}
* {{استشهاد بويكي بيانات|Q115919723|مرجع=Odom2013}}
* {{استشهاد بويكي بيانات/ملعب|Q9065143}}
</div>
bno8i4lhh380o6b88fmd2ryvjws8pr1
وحدة:Cite Q
828
231228
1159052
1124485
2026-09-10T13:19:13Z
حبيشان
31560
سحب تفضيلات مقالة
1159052
Scribunto
text/plain
--[[ Cite Q
النسخة العربية
مشتق من النسخة الإنجليزية
]]
require('strict')
local sandbox = ''
local WdItem = require('Module:WdItem' .. sandbox)
local cfg = mw.loadData('Module:Cite Q/config' .. sandbox)
local ref_cash = {}
local rtl_lang = {
ar = true,
fa = true,
ur = true,
ku = true,
he = true,
arc = true,
dv = true,
ha = true,
khw = true,
ks = true,
ps = true,
yi = true,
ota = true
}
-- ________________________________ General Utility Functions ______________________________________
-------------------------------------------------------------------------------
-- makeOrdinal needs to be internationalised along with cfg.i18n_t
-- takes cardinal number as a numeric and returns the ordinal as a string
-- we need three exceptions in English for 1st, 2nd, 3rd, 21st, .. 31st, etc.
-------------------------------------------------------------------------------
local makeOrdinal = function(cardinal)
local card = tonumber(cardinal)
if not card then return cardinal end
local ordsuffix = cfg.i18n_t.ordinal.default
if card % 10 == 1 then
ordsuffix = cfg.i18n_t.ordinal[1]
elseif card % 10 == 2 then
ordsuffix = cfg.i18n_t.ordinal[2]
elseif card % 10 == 3 then
ordsuffix = cfg.i18n_t.ordinal[3]
end
-- In English, 1, 21, 31, etc. use 'st', but 11, 111, etc. use 'th'
-- similarly for 12 and 13, etc.
if (card % 100 == 11) or (card % 100 == 12) or (card % 100 == 13) then
ordsuffix = cfg.i18n_t.ordinal.default
end
return card .. ordsuffix
end
--[[--------------------------< I S _ S E T >--------------------------------------------------------------
Returns true if argument is set; false otherwise. Argument is 'set' when it exists (not nil) or when it is not an empty string.
]]
local function is_set(var)
return not (var == nil or var == '')
end
local function has_value(var)
return not (var == nil or var == '' or var == 'novalue' or var == 'somevalue' or var == 'Unknown')
end
--[[--------------------------< I N _ A R R A Y >--------------------------------------------------------------
Whether needle is in haystack (taken from Module:Citation/CS1/Utilities)
]]
local function in_array(needle, haystack)
if needle == nil then
return false
end
for n, v in ipairs(haystack) do
if v == needle then
return n
end
end
return false
end
-- wraps a string in nowiki unless disable flag is set
local function wrap_nowiki(str, disable)
if disable then return str or '' end
return mw.text.nowiki(str or '')
end
-- sort sequence table whose values are key-value pairs by key
local function comp_key(a, b)
local param_a, enum_a = a[1]:match('(%D+)(%d+)$'); -- get param name and enumerator from <a>
local param_b, enum_b = b[1]:match('(%D+)(%d+)$'); -- get param name and enumerator from <b>
if enum_a and enum_b then -- if both parameters have neumerators
if param_a == param_b then -- are parameter names the same?
return tonumber(enum_a) < tonumber(enum_b); -- yes: compare enumerators
end
end
return a[1] < b[1]; -- alpha sort if here
end
local function set_archive_args(arcurl, args)
if has_value(arcurl) then
local arcy, arcm, arcd = arcurl:match("(20%d%d)%p?(%d%d)%p?(%d%d)")
if arcy and arcm and arcd then
args["archive-url"] = arcurl
args["archive-date"] = arcy .. '-' .. arcm .. '-' .. arcd
end
end
end
--________________________________ Language Functions ______________________________________
local function getLanguages(languageArg)
local langcodes = {}
if languageArg then
-- check these are a supported language codes
for lc in mw.text.gsplit(languageArg, "[,، ]+", false) do --modified
langcodes[#langcodes + 1] = mw.language.isSupportedLanguage(lc) and lc
end
end
return langcodes
end
local function simplify_langauges(langs_t)
local newlangs = {}
for k,v in ipairs(langs_t) do
newlangs[#newlangs + 1] = v
local main_lang = v:match("^[^_-]+")
if main_lang ~= v then newlangs[#newlangs + 1] = main_lang; end
end
return newlangs
end
local function _getLangOfSnakProp(snak, pid)
if not pid or not snak then return {} end
local out = {}
local props = snak[pid]
for i, v in ipairs(props) do
if v.datatype == "monolingualtext" and v.datavalue then
out[#out + 1] = v.datavalue.value.language
end
end
return out
end
local function getLangOfProp(frame)
local pid = frame.args.pid or mw.text.trim(frame.args[1] or "")
if pid == "" then return end
local qid = frame.args.qid
if qid == "" then qid = nil end
local Q = WdItem.new(qid, { fwd = "ALL", onlysourced = false, noicon = true })
return table.concat(Q:getLangOfProp(pid), ", ")
end
-- gets the language codes of a Wikidata entry as a table
local function _lang_code(Qitem)
local lc = Qitem:getRawPropOfProp("P407", "P424")
if lc and #lc > 0 then return lc end
lc = Qitem:getRawPropOfProp("P407", "P218")
if lc and #lc > 0 then return lc end
return Qitem:getLangOfProp("P1476")
end
--________________________________ Author/Editor Display Functions ______________________________________
local function set_display_authors(args, contribtype)
local contrib_count = 0
for k, v in pairs(args) do
if k:find("^" .. contribtype .. "%d+$") then
contrib_count = contrib_count + 1
end
end
local key = 'display-' .. contribtype .. 's'
if contrib_count > 8 then -- convention in astronomy journals, optional mode for this?
if 'all' == args[key] then
args[key] = nil; -- unset because no longer needed
else
args[key] = args[key] or 3 -- limit to three displayed names
end
end
end
--[=[-------------------------< G E T _ N A M E _ L I S T >----------------------------------------------------
get_name_list -- adapted from getAuthors code taken from Module:RexxS
arguments:
nl_type - type of name list to fetch: nl_type = 'author' for authors; 'editor' for editors; 'translator' for translators
args - pointer to the parameter arguments table from the template call
qid - value from |qid= parameter; the Q-id of the source (book, etc.) in qid
wdlinks - value from the |wdlinks= parameter; a Boolean passed to enable links to Wikidata when no article exists
returns nothing; modifies the args table
]=]
local function get_name_list(nl_type, args, Q, wdlinks, lang)
local propertyID = "P50"
local fallbackID = "P2093" -- author name string
if nl_type == "author" then
propertyID = 'P50' -- for authors
fallbackID = 'P2093' -- author-string
elseif nl_type == "editor" then
propertyID = 'P5769' -- "editor-in-chief"
fallbackID = 'P98' -- for editors - So-called "fallbacks" are actually a second set of properties processed
-- TBD. Take book series editors into account as well (if they have a separate P code as well)?
elseif nl_type == "translator" then
propertyID = 'P655' -- for translators
fallbackID = nil
-- elseif 'contributor' == nl_type then
-- f.e. author of forewords (P2679) and afterwords (P2680); requires |contribution=, |title= and |author=
-- propertyID = 'P' -- for contributors
-- fallbackID = nil
else
return -- not specified so return
end
-- wdlinks is a Boolean passed to enable links to Wikidata when no article exists
-- if "false" or "no" or "0" is passed set it false
-- if nothing or an empty string is passed set it false
if wdlinks and (#wdlinks > 0) then
wdlinks = wdlinks:lower()
wdlinks = in_array(wdlinks, { "false", "no", "0" })
else
-- wdlinks is empty, so
wdlinks = false
end
local statements = Q:getStatements(propertyID)
if statements:count() == 0 and fallbackID then
statements = Q:getStatements(fallbackID)
end
-- Make sure it actually has at least one of the properties requested
if statements:count() == 0 then
return nil
end
-- So now we have something to return:
-- table 'out' is going to store the names(s):
-- and table 'link' will store any links to the name's article
local out = {}
local link = {}
local maxpos = 0
for _, s in statements:iter() do
-- maxpos = makelink(v, out, link, maxpos, wdlinks, lang)
local qnumber = s:getRawValue()
if qnumber ~= 'novalue' then
local label = s:getValue({ linked = false })
local slink
if label == 'somevalue' or label == 'Unknown' then
label = cfg.i18n_t["unknown-author"][lang] or cfg.i18n_t["unknown-author"]["ar"]
elseif mw.ustring.match(qnumber, '^Q%d+$') and qnumber ~= 'Q2818964' then
slink = mw.wikibase.getSitelink(qnumber, cfg.config_t.linksproject)
end
local position = maxpos + 1 -- Default to 'next' author.
position = tonumber(s:getRawQual("P1545")[1]) or position
maxpos = math.max(maxpos, position)
out[position] = label
if slink then link[position] = cfg.config_t.wikilinkprefix .. slink; end
end
end
-- if there's anything to return, then insert the additions in the template arguments table
-- in the form |author1=firstname secondname |author2= ...
-- Renumber, in case we have inconsistent numbering
local keys = {}
for k, v in pairs(out) do
keys[#keys + 1] = k
end
table.sort(keys) -- as they might be out of order
for i, k in ipairs(keys) do
out[k] = out[k]:gsub(''', '\''); -- prevent cs1|2 multiple names categorization; replace html entity with the actual character
if args[nl_type .. i] then -- name gets overwritten
-- pull corresponding -link only if overwritten name is same as WD name
if link[k] and (args[nl_type .. i] == out[k]) then
args[nl_type .. '-link' .. i] = args[nl_type .. '-link' .. i] or link[k] -- author-linkn or editor-linkn
end
else -- name does not get overwritten, so pull name from WD
args[nl_type .. i] = out[k]
if link[k] then
args[nl_type .. '-link' .. i] = args[nl_type .. '-link' .. i] or link[k] -- author-linkn or editor-linkn
end
end
end
end
--________________________________ filtering functions ______________________________________
-- ref filtering for citing from wikidata
local function is_rejected(item)
-- rejected Q
if cfg.rejected_t.sources[item] == true then
return true;
end
-- rejected Properties
local item_entity = mw.wikibase.getEntity(item);
for _, v in pairs(cfg.rejected_t.properties) do
if (#item_entity:getAllStatements(v) > 0) then
return true;
end
end
-- Rejected InatanceOf
local instance = item_entity:getAllStatements("P31")
for _, v in pairs(instance) do
local vsnak = v.mainsnak or v
if cfg.rejected_t.instances[vsnak.datavalue.value.id] then
return true;
end
end
--No used Properties
local has_properties = false
for k, _ in pairs(cfg.used_properties_t) do
if (#item_entity:getAllStatements(k) > 0) then
has_properties = true;
break;
end
end
return not has_properties;
end
--________________________________ main functions ______________________________________
--[[-------------------------< C I T E _ W E B >------------------------------------------------------------------
used to pass wikidata reference claims to cite web template.
--]]
local function _cite_web(citeq_args)
local Q
local refsnak = citeq_args.snak
citeq_args.snak = nil
-- retrieve all the parameters
local pqid = citeq_args.pqid
citeq_args.pqid = nil
local wdlinks = false
local qid = nil
local multi_args = {
P50 = "author",
P2093 = "author",
P5769 = "editor",
P98 = "editor",
P655 = "translator",
}
local fallbackurls = {}
Q = WdItem.newSnakItem(refsnak,
{ fwd = "ALL", onlysourced = false, noicon = true, linksproject = cfg.config_t.linksproject, wikilinkprefix = cfg
.config_t.wikilinkprefix })
-- find language
local langcodes = getLanguages(citeq_args.language)
if refsnak["P1476"] then
langcodes = _getLangOfSnakProp(refsnak, "P1476")
citeq_args.language = citeq_args.language or table.concat(langcodes, ", ")
end
langcodes = simplify_langauges(langcodes)
for _, l in ipairs({ 'ar', 'en', 'mul' }) do
if not in_array(l, langcodes) then
langcodes[#langcodes + 1] = l
end
end
Q:setOptions({ langs = langcodes })
local labellang = langcodes[1]
local rtl = rtl_lang[langcodes[1]] or false
local oth = {}
for i in pairs(refsnak) do
local label = ""
-- multiple authors may be given
if refsnak[i][1].snaktype ~= 'novalue' then
if multi_args[i] then
get_name_list(multi_args[i], citeq_args, Q, wdlinks, labellang)
elseif cfg.used_properties_t[i] and type(cfg.used_properties_t[i]) == "table" then
local data = cfg.used_properties_t[i]
local langidx = 1
citeq_args[data.arg] = Q:getValue(i,
{ maxvals = data.maxvals, linked = data.linked, rank = data.rank or "best" })
if not citeq_args[data.arg] or citeq_args[data.arg]:find('^Q%d+$') then
citeq_args[data.arg] = Q:getValue(i, { maxvals = data.maxvals, linked = data.linked })
if citeq_args[data.arg]:find('^Q%d+$') then -- qid was returned
-- try fallback to qid's native language
local qid_languages = _lang_code(WdItem.newItem(citeq_args[data.arg],
{ fwd = "ALL", onlysourced = false, noicon = true }))
citeq_args[data.arg] = Q:getValue(i,
{ maxvals = data.maxvals, linked = data.linked, langs = qid_languages })
if citeq_args[data.arg]:find('^Q%d+$') then -- qid was returned again
citeq_args[data.arg] = nil
else
-- record the language found if no lang specified
citeq_args.language = citeq_args.language or qid_languages[1]
end
end
end
--- translate unknown value
if citeq_args[data.arg] == "Unknown" then
if rtl then
citeq_args[data.arg] = cfg.i18n_t.ar["unknown-" .. data.arg] or cfg.i18n_t.ar["unknown"]
else
citeq_args[data.arg] = mw.wikibase.getLabelByLang("Q4233718", langcodes[1]):gsub("^%l",
mw.ustring.upper)
end
end
-----------------
if data.others then
oth[#oth + 1] = citeq_args[data.arg] and
((rtl and cfg.i18n_t.ar[data.arg] or data.arg:gsub("^%l", string.upper)) .. ": " .. citeq_args[data.arg])
citeq_args[data.arg] = nil
end
elseif cfg.used_properties_t[i] then
if i == "P648" then
citeq_args.ol = (Q:getValue("P648", { maxvals = 1 }) or ''):gsub("^OL(.+)$", "%1")
if citeq_args.ol == "" then
citeq_args.ol = nil
end
elseif i == "P957" then
citeq_args.isbn = Q:getValue("P957", { maxvals = 1 })
elseif in_array(i, { "P854", "P953", "P856", "P2699" }) then
local url;
for _, pr in ipairs({ "P854", "P953", "P856", "P2699" }) do
url = Q:getStatements(pr):getBestOne():getRawValue()
if has_value(url) then
citeq_args.url = url
break;
end
end
end
end
if refsnak[i][1].datatype == "external-id" then
fallbackurls[#fallbackurls+1] = {
url = Q:getValue(i, { maxvals = 1, fullidurl=true}),
arg = cfg.used_properties_t[i] and cfg.used_properties_t[i].arg
}
end
end
end
if not citeq_args.url and #fallbackurls>0 then
for _,v in ipairs(fallbackurls) do
if not v.arg then
citeq_args.url = v.url
break;
end
end
if not citeq_args.url then
citeq_args.url = fallbackurls[1].url
citeq_args[fallbackurls[1].arg] = nil
end
end
if citeq_args.url then
if refsnak["P813"] then
citeq_args.accessdate = Q:getValue("P813", { maxvals = 1 })
end
if refsnak["P1065"] and refsnak["P2960"] then
citeq_args["archive-url"] = Q:getValue("P1065", { maxvals = 1 })
citeq_args["archive-date"] = Q:getValue("P2960", { maxvals = 1 })
elseif refsnak["P1065"] then
set_archive_args(Q:getValue("P1065", { maxvals = 1 }), citeq_args)
end
end
citeq_args.others = citeq_args.others or table.concat(oth, ". ")
if citeq_args.others == "" then
citeq_args.others = nil
end
citeq_args.biorxiv = citeq_args.biorxiv and ("10.1101/" .. citeq_args.biorxiv)
-- if url then see if there's an archive: citeq_args.url
local url
local title_display = citeq_args.title
if citeq_args.url then
citeq_args.title = wrap_nowiki(title_display)
end
-- TBD: incorporate |at, |sheets= and |sheet= here as well
-- Sort out what should happen if several of them are given at the same time
if citeq_args.page or citeq_args.p then -- let single take precedence over multiple
citeq_args.pages = nil
citeq_args.pp = nil
end
if citeq_args.pages then
local _, count = string.gsub(citeq_args.pages, "[,;%s]%d+", "")
if count == 1 then
citeq_args.page = citeq_args.pages
citeq_args.pages = nil
end
end
-- replace no-break space by space, User:Mr. Ibrahem
if citeq_args.title then
citeq_args.title = mw.ustring.gsub(citeq_args.title, "\194\160", " ")
end
set_display_authors( citeq_args, 'author' )
set_display_authors( citeq_args, 'editor' )
-- code to make a guess what template to use from the supplied parameters
-- (first draft for proof-of-concept)
local template = "بويب"
-- |id= could hold more than one identifier pulled from Wikidata not supported by {{citation}}, right now only add our qid to the list
local list_sep = '. '
if citeq_args.mode ~= 'cs1' then
list_sep = ', '
end
-- clean up any blank parameters
for k, v in pairs(citeq_args) do
if v == "" then citeq_args[k] = nil end
end
if template then
-- citeq_args.mode = citeq_args.mode or "cs1" -- a cs1 template already knows that it is cs1 so this line is superfluous
template = "استشهاد " .. template
else
-- citeq_args.mode = citeq_args.mode or "cs2" -- a cs2 template already knows that it is cs2 so this line is superfluous
template = "استشهاد"
end
citeq_args['no-tracking'] = 'true' -- لإيقاف ظهور تصانيف التتبع
return mw.getCurrentFrame():expandTemplate { title = template, args = citeq_args } -- render the template
end
--[[-------------------------< C I T E _ Q >------------------------------------------------------------------
Takes standard CS1|2 template parameters and passes all to {{citation}}. If neither of |author= and |author1=
are set, calls get_authors() to try to get an author name-list from Wikidata. The result is passed to
{{citation}} for rendering.
--]]
local function _cite_q(in_citeq_args)
local frame = mw.getCurrentFrame()
local citeq_args = {}
local origin_args = {}
local Q
-- parameters that don't get passed to Citation
local expand = in_citeq_args.expand -- when set to anything, causes {{cite q}} to render <code><nowiki>{{citation|...}}</nowiki></code>
local qid = in_citeq_args.qid or in_citeq_args[1]
local wdlinks = in_citeq_args.wdlinks
local template = in_citeq_args.template
local cite_class = 'citation'
local rtl = true
local snak = in_citeq_args.snak or {}
local pqid = in_citeq_args.pqid
local page_offset = 0
in_citeq_args.expand = nil
in_citeq_args[1] = nil
in_citeq_args.qid = nil
in_citeq_args.wdlinks = nil
in_citeq_args.template = nil
in_citeq_args.snak = nil
in_citeq_args.pqid = nil
if in_citeq_args.wikidatacite then
citeq_args = in_citeq_args
else
local A = require("Module:Argument Wrapper")(cfg.aliases_t, { in_citeq_args, mw.loadData("Module:Art pref/data")["استشهاد بويكي بيانات"] }, cfg.numbered_aliases_t)
-- local A = argument_wrapper(in_citeq_args)
local loaded_args = {}
for _, args_table in pairs({ cfg.simple_properties_t, cfg.used_args_t }) do
for k, _ in pairs(args_table) do
if A[k] then
citeq_args[k] = A[k]
if k ~= A:ORIGIN(k) then
origin_args[k] = A:ORIGIN(k)
loaded_args[#loaded_args + 1] = A:ORIGIN(k)
else
loaded_args[#loaded_args + 1] = k
end
end
end
end
for k, v in pairs(in_citeq_args) do
if not in_array(k, loaded_args) then
citeq_args[k] = v
end
end
end
-- if title supplied, flag to not read html title
local titleforced = (citeq_args.title ~= nil)
local default_opt = { rank = "preferred normal", fetchwikidata = "ALL", onlysourced = false, noicon = true, linksproject =
cfg.config_t.linksproject, wikilinkprefix = cfg.config_t.wikilinkprefix }
if citeq_args.volume or citeq_args.volume then
local qualifiedaspossible = {}
if citeq_args.volume then
qualifiedaspossible['P478'] = citeq_args.volume
end
if citeq_args.chapter then
qualifiedaspossible['P792'] = citeq_args.chapter
end
default_opt.qualifiedaspossible = qualifiedaspossible
end
Q = WdItem.WdItem:new(qid, default_opt, snak)
local oth = {}
-- put the language codes into a sequential table langcodes[]
local langcodes = getLanguages(citeq_args.language)
if not langcodes[1] then
-- try to find language of work
langcodes = _lang_code(Q)
end
if not langcodes[1] then
-- try fallback to journal's language
local journal_qid = Q:followQid("P1433")
langcodes = journal_qid and _lang_code(journal_qid) or {}
end
citeq_args.language = citeq_args.language or table.concat(langcodes, ", ")
langcodes = simplify_langauges(langcodes)
Q:setOptions({ langs = langcodes });
local labellang = langcodes[1] or 'ar'
rtl = rtl_lang[langcodes[1]] or false
-- loop through list of simple properties and get their values in citeq_args
for name, data in pairs(cfg.simple_properties_t) do
local opt = { maxvals = data.maxvals, linked = data.linked, qual = data.qual, hijri = data.hijri }
if data.no_vol_qual then opt.qualifiedaspossible = {}; end
citeq_args[name] = citeq_args[name] or Q:getValue(data.id, opt)
if not citeq_args[name] and data.populate_from_journal then
local publishedin = Q:getValue("P1433", { maxvals = 0, qual = data.id, qualsonly = true })
citeq_args[name] = publishedin or Q:getPropOfProp("P1433", data.id, { maxvals = data.maxvals })
end
if citeq_args[name] and snak[data.id] then
snak[data.id] = nil
end
--- translate unknown value
if citeq_args[name] == "Unknown" and rtl then
citeq_args[name] = cfg.i18n_t.ar["unknown-" .. name] or cfg.i18n_t.ar["unknown"]
end
-----------------
if data.others then
oth[#oth + 1] = citeq_args[name] and
((rtl and cfg.i18n_t.ar[name] or name:gsub("^%l", string.upper)) .. ": " .. citeq_args[name])
citeq_args[name] = nil
end
end
citeq_args.others = citeq_args.others or table.concat(oth, ". ")
if citeq_args.others == "" then
citeq_args.others = nil
end
citeq_args.journal = citeq_args.journal and
citeq_args.journal:gsub("^''", ""):gsub("''$", ""):gsub("|''", "|"):gsub("'']]", "]]")
citeq_args.ol = citeq_args.ol or (Q:getValue("P648", { maxvals = 1 }) or ''):gsub("^OL(.+)$", "%1")
if citeq_args.ol == "" then
citeq_args.ol = nil
end
-- TBD. Take care of |ol-access=?
citeq_args.biorxiv = citeq_args.biorxiv and ("10.1101/" .. citeq_args.biorxiv)
citeq_args.isbn = citeq_args.isbn or
Q:getValue("P957", { maxvals = 1, rank = "best" }) -- try ISBN 10 (only one value accepted)
if citeq_args.page then -- let single take precedence over multiple
citeq_args.pages = nil
citeq_args.pp = nil
end
if citeq_args.pages then
local _, count = string.gsub(citeq_args.pages, "[,;%s]%d+", "")
if count == 1 then
citeq_args.page = citeq_args.pages
citeq_args.pages = nil
end
end
-- Orginal Date
if not citeq_args['orig-date'] then
local work, origdate, origDateS = Q:getStatements('P629'):getBestOne():getRawValue()
local origOpt = { rank = "best", maxvals = 1, onlysourced = false, noicon = true }
local ishijri = false;
if has_value(work) then
local workQ = WdItem.newItem(work, origOpt)
origDateS = workQ:getStatements('P577', { df = 'y', qualifiedaspossible = { P4241 = '*' } }):getBestOne()
origdate = origDateS:getValue({ df = 'y', hijri = true })
if has_value(origdate) then
ishijri = true
else
origdate = origDateS:getValue({ df = 'y' })
end
end
if not has_value(origdate) then
local author = Q:getStatements('P50'):getBestOne():getRawValue()
if has_value(author) then
local authorQ = WdItem.newItem(author, origOpt)
origDateS = authorQ:getStatements('P570', { df = 'y', qualifiedaspossible = { P4241 = '*' } })
:getBestOne()
origdate = origDateS:getValue({ df = 'y', hijri = true })
if has_value(origdate) then
ishijri = true
else
origdate = origDateS:getValue({ df = 'y' })
end
end
end
if has_value(origdate) then
local printDateS, printDate = Q:getStatements("P577", { df = 'y', qualifiedaspossible = { P4241 = '*' } })
:getBestOne()
if ishijri then
printDate = printDateS:getValue({ hijri = true })
if has_value(printDate) then
if (tonumber(origdate) or 3000) < (tonumber(printDate) or 0) then
citeq_args['orig-date'] = origdate .. 'هـ'
end
else
if (tonumber(origDateS:getValue({ df = 'y'})) or 3000) < (tonumber(printDateS:getValue({ df = 'y'})) or 0) then
citeq_args['orig-date'] = origdate .. 'هـ'
end
end
else
printDate = printDateS:getValue()
if (has_value(printDate) and ((tonumber(origdate) or 3000) < (tonumber(printDate) or 0)))
or not has_value(printDate) then
citeq_args['orig-date'] = origdate
end
end
end
end
local url
--find formatted url
if citeq_args.url == nil then
if snak ~= {} then
for k, v in pairs(snak) do
if (v[1].datatype == "external-id") then
citeq_args.url = mw.ustring.match(mw.wikibase.formatValue(v[1]), "%[(https?://[^%s%]]+)")
snak[k] = nil
break;
end
end
end
if citeq_args.url == nil and pqid and qid then
local refproperty = Q:getStatements("P1687"):getRawValue()
for k, p in ipairs(refproperty) do
if has_value(p) then
local refval = WdItem.WdItem:new(pqid):getValue(p, {fullidurl=true})
if has_value(refval) then
citeq_args.url = refval
break;
end
end
end
end
end
if not citeq_args.url then
local S953 = Q:getStatements("P953"):getBestOne()
local S953_val = S953:getRawValue()
citeq_args.url = has_value(S953_val) and S953_val or nil
if citeq_args.url then
if mw.ustring.match(citeq_args.url, "archive.org/details/") and citeq_args.page then
page_offset = tonumber(S953:getRawQual('P8330')[1]) or 0
if not citeq_args.volume or
(citeq_args.volume and (citeq_args.volume == S953:getRawQual('P478')[1])) then
local pagenum = tonumber(citeq_args.page) or tonumber(mw.text.split(citeq_args.page, '%D')[1])
if pagenum then
citeq_args.url = mw.ustring.gsub(citeq_args.url, "/?$", "") ..
"/page/n" .. (pagenum + page_offset - 1) .. "/mode/1up"
end
end
end
set_archive_args(S953:getRawQual('P1065')[1], citeq_args)
end
end
if not citeq_args.url then
for i, pr in ipairs({ "P856", "P2699" }) do
local surl = Q:getStatements(pr):getBestOne()
if surl then
local url = surl:getRawValue()
if has_value(url) then
citeq_args.url = url
set_archive_args(surl:getRawQual('P1065')[1], citeq_args)
break;
end
end
end
end
if not titleforced then
-- Handle subtitle.
if citeq_args.title then
local subtitle = Q:getValue('P1680');
if subtitle then
citeq_args.title = citeq_args.title .. ": " .. subtitle
end
end
local htmltitle = Q:getValue("P1476", { qual = "P6833", maxvals = 1, qualsonly = true })
if htmltitle then
citeq_args.title = htmltitle:gsub("</?i>", "''")
else
local title_display = citeq_args.title
or (langcodes[1] and mw.wikibase.getLabelByLang(qid, langcodes[1]))
or mw.wikibase.getLabel(qid)
if title_display and snak and snak.P1810 then
title_display = title_display .. " | " .. snak.P1810[1].datavalue.value
snak.P1810 = nil
end
title_display = title_display or ("No label or title -- debug: " .. qid)
if citeq_args.url then
citeq_args.title = wrap_nowiki(title_display)
else
local slink = mw.wikibase.getSitelink(qid, cfg.config_t.linksproject)
local slink_flag = false
local wrap_title = ''
local wslink = false
if not slink then
-- See if we have wikisource
if not citeq_args.url then
local wikisource_sitelink = mw.wikibase.getSitelink(qid, cfg.i18n_t.wikisource) or nil
if wikisource_sitelink then
slink = ':s:' .. wikisource_sitelink
wslink = true
end
end
end
if citeq_args.title then
if slink then
wrap_title = wrap_nowiki(citeq_args.title)
slink_flag = true
else
citeq_args.title = wrap_nowiki(citeq_args.title)
end
else
if slink and not wslink then
if slink:lower() == title_display:lower() then
citeq_args.title = '[[' .. slink .. ']]'
else
wrap_title = wrap_nowiki(slink:gsub("%s%(.+%)$", ""):gsub(",.+$", ""))
slink_flag = true
end
elseif wslink then
wrap_title = wrap_nowiki(title_display)
slink_flag = true
else
citeq_args.title = wrap_nowiki(title_display)
end
end
if slink_flag then
if slink == wrap_title and not wslink then -- direct link
citeq_args.title = '[[' .. slink .. ']]'
else -- piped link
citeq_args.title = '[[' .. slink .. '|' .. wrap_title .. ']]'
end
end
end
end
end
-- replace no-break space by space, User:Mr. Ibrahem
if citeq_args.title then
citeq_args.title = mw.ustring.gsub(citeq_args.title, "\194\160", " ")
end
if is_set(qid) then
if not is_set(citeq_args.author) and not is_set(citeq_args.author1) then -- if neither are set, try to get authors from Wikidata
get_name_list('author', citeq_args, Q, wdlinks, labellang) -- modify citeq_args table with authors from Wikidata
end
if not is_set(citeq_args.editor) and not is_set(citeq_args.editor1) then -- if neither are set, try to get editors from Wikidata
get_name_list('editor', citeq_args, Q, wdlinks, labellang) -- modify citeq_args table with editors from Wikidata
end
if not is_set(citeq_args.translator) and not is_set(citeq_args.translator1) then -- if neither are set, try to get translators from Wikidata
get_name_list('translator', citeq_args, Q, wdlinks, labellang) -- modify citeq_args table with translators from Wikidata
end
end
for k, v in pairs(citeq_args) do
if in_array(v, { '(())', 'unset', 'ignore' }) or 'string' ~= type(k) then -- empty accept-as-is-written (()) markup to indicate an empty/unused parameter value, other ((...)) markups are deliberately passed down to {{citation}}
citeq_args[k] = nil
elseif in_array(v, { '((unset))', '((ignore))' }) then -- strip off markup for free-text values clashing with local keywords
citeq_args[k] = 'unset'
end
end
set_display_authors( citeq_args, 'author' )
set_display_authors( citeq_args, 'editor' )
-- change edition to ordinal if it's set and numeric
if (rtl == false) then citeq_args.edition = citeq_args.edition and makeOrdinal(citeq_args.edition) end
-- code to make a guess what template to use from the supplied parameters
-- (first draft for proof-of-concept)
if citeq_args.journal then
template = template or "بدورية محكمة"
elseif citeq_args.isbn then
template = template or "بكتاب"
citeq_args.asin = nil -- suppress ASIN if ISBN exists
elseif citeq_args.website then
template = template or "بويب"
end
-- template is CS1 designator: journal, web, news, etc.
if template then
-- citeq_args.mode = citeq_args.mode or "cs1" -- a cs1 template already knows that it is cs1 so this line is superfluous
local citeclasses = { ["بدورية محكمة"] = 'journal', ["بكتاب"] = "book", ["بويب"] = "web" }
cite_class = cfg.citation_class_map_t[template] and template or citeclasses[template]
template = cfg.citation_class_map_t[template] or ("استشهاد " .. template)
else
-- citeq_args.mode = citeq_args.mode or "cs2" -- a cs2 template already knows that it is cs2 so this line is superfluous
template = "استشهاد"
end
-- |id= could hold more than one identifier pulled from Wikidata not supported by {{citation}}, right now only add our qid to the list
local list_sep = '. '
if citeq_args.mode ~= 'cs1' then
list_sep = ', '
end
local id = cfg.i18n_t.wdq .. ':[[:d:' .. qid .. '|' .. qid .. ']]'
local old_id = citeq_args.id
if wdlinks then -- show WD logo
id = id .. '[[ملف:Wikidata-logo.svg|16px|alt=|link=]]' -- possibly replace by WD edit icon?
end
if is_set(old_id) then
citeq_args.id = old_id .. list_sep .. id -- append to user-specified contents
else
citeq_args.id = id
end
-- clean up any blank parameters
for k, v in pairs(citeq_args) do
if v == "" then citeq_args[k] = nil end
end
-- use real param names for CS1 messages
for k, v in pairs(origin_args) do
if citeq_args[k] and citeq_args[k] == in_citeq_args[v] then
citeq_args[v] = citeq_args[k]
citeq_args[k] = nil
end
end
-- if |expand=<anything>, write a nowiki'd version to see what the {{citation}} template call looks like
if expand then
local expand_args = { "{{" .. template .. "\n" } -- init with citation template
if expand == "self" then
citeq_args.id = old_id -- restore original |id= parameter
expand_args = { cfg.i18n_t.cite_q .. qid } -- expand to itself
end
-- make a sortable table and sort it by param name
local sorttable = {}
for param, val in pairs(citeq_args) do
sorttable[#sorttable + 1] = { param, val }
end
table.sort(sorttable, comp_key)
-- add contents to expand_args
for idx, val in ipairs(sorttable) do
expand_args[#expand_args + 1] = val[1] .. '=' .. val[2] .. "\n"
end
-- make the nowiki'd string and done
return frame:preprocess(table.concat({ '<syntaxhighlight lang="wikitext" inline="1">', table.concat(expand_args,
' |') .. '}}', '</syntaxhighlight>' }));
end
local erratumid = Q:getPropertyIDs("P2507", { maxvals = 1 })
if erratumid then
erratumid = " [[d:" .. erratumid .. "|" .. cfg.i18n_t.erratum .. "]]" .. cfg.i18n_t.trackingcats.erratum
else
erratumid = ""
end
local opt_cat = ''
if Q:getValue("P5824") then
opt_cat = cfg.i18n_t.trackingcats.retracted
end
if Q:getValue("P1366") then
opt_cat = opt_cat .. cfg.i18n_t.trackingcats.replaced
end
if not citeq_args.title then -- emit category link if missing title
opt_cat = opt_cat .. cfg.i18n_t.trackingcats['no-label-or-title'];
end
if citeq_args.wikidatacite then
return frame:expandTemplate { title = template, args = citeq_args } ..
erratumid .. opt_cat -- render the template
else
local CS = require("Module:Citation/CS1" .. sandbox)
return CS._citation(frame, citeq_args, { ['CitationClass'] = cite_class }) .. erratumid .. opt_cat
end
end
--[[-------------------------< C I T E W I K I D A T A >------------------------------------------------------------------
format wikidata reference
--]]
local function _cite_wikidata(ref, pqid, expand)
-- early exit
if not ref then
return nil
end
local snak = ref.snaks
-- مراجع غير مقبولة
if snak.P143 or snak.P3452 then
return nil
end
local hash = ref.hash
if not is_set(hash) then
mw.log ("hash is not set")
return nil
end
local hashname = (is_set(sandbox) and 'wikidata-s-' or 'wikidata-') .. hash
local frame = mw.getCurrentFrame()
if ref_cash[hash] ~= nil then
if ref_cash[hash] == false then
return nil
end
return frame:extensionTag("ref", '' , { name = hashname })
end
local citeq_args = {}
-- مذكور في
if snak.P248 then
for _, prop in pairs(snak.P248) do
if prop.snaktype == "value" then
citeq_args.qid = prop.datavalue.value.id
break;
end
end
snak.P248 = nil;
end
if citeq_args.qid and is_rejected(citeq_args.qid) == true then
return nil
end
local reference
citeq_args.snak = snak
citeq_args.pqid = pqid
citeq_args.wikidatacite = 1
citeq_args.expand = expand
if citeq_args.qid then
reference = _cite_q(citeq_args)
else
local has_properties = false
for k, _ in pairs(cfg.used_properties_t) do
if snak[k] then
has_properties = true;
break;
end
end
reference = (has_properties and _cite_web(citeq_args) or nil)
end
if is_set(reference) then
reference = frame:extensionTag("ref", reference, { name = hashname })
ref_cash[hash] = true
else
ref_cash[hash] = false
end
return reference
end
local function cite_q(frame)
local args = {}
for k, v in pairs(frame:getParent().args) do
if v ~= "" then args[k] = v end
end
for k, v in pairs(frame.args) do
if v ~= "" then args[k] = v end
end
args.qid = args.qid or args[1] or ""
if args.qid == "" then return nil end
args[1] = nil
local citesep = (args.citesep or "")
if citesep == "" then citesep = ", " end
citesep = citesep:gsub('"', '') -- strip double quotes after setting default to allow |citesep="" as a blank separator
args.citesep = nil
local tag = args.tag or ""
if tag == "" then tag = nil end
args.tag = nil
local list = args.list or ""
if list == "" then list = nil end
args.list = nil
args.language = args.language or args.lang
args.lang = nil
local cites = {}
for q in args.qid:gmatch("Q%d+") do
-- make a new copy of the arguments
local newargs = {}
for k, v in pairs(args) do
if k ~= "qid" then
newargs[k] = v
end
end
newargs.qid = q
if tag == "ref" then
cites[#cites + 1] = frame:callParserFunction { name = "#tag:ref", args = { _cite_q(newargs), name = q } }
-- expand like this: args = { _cite_q(newargs), name = 'foo', group = 'bar' }
else
cites[#cites + 1] = _cite_q(newargs)
end
end
if list then
return frame:expandTemplate { title = list, args = cites }
else
return table.concat(cites, citesep)
end
end
--[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------
]]
return {
makeOrdinal = makeOrdinal,
getLangOfProp = getLangOfProp,
_cite_wikidata = _cite_wikidata,
_cite_q = _cite_q,
cite_q = cite_q
}
eg1rea9opnu3zbtxbwmnrbs96pywdu9
وحدة:Cite Q/ملعب
828
231230
1158976
1124486
2026-09-10T12:06:51Z
حبيشان
31560
1158976
Scribunto
text/plain
--[[ Cite Q
النسخة العربية
مشتق من النسخة الإنجليزية
]]
require('strict')
local sandbox = '/ملعب'
local WdItem = require('Module:WdItem' .. sandbox)
local cfg = mw.loadData('Module:Cite Q/config' .. sandbox)
local ref_cash = {}
local rtl_lang = {
ar = true,
fa = true,
ur = true,
ku = true,
he = true,
arc = true,
dv = true,
ha = true,
khw = true,
ks = true,
ps = true,
yi = true,
ota = true
}
-- ________________________________ General Utility Functions ______________________________________
-------------------------------------------------------------------------------
-- makeOrdinal needs to be internationalised along with cfg.i18n_t
-- takes cardinal number as a numeric and returns the ordinal as a string
-- we need three exceptions in English for 1st, 2nd, 3rd, 21st, .. 31st, etc.
-------------------------------------------------------------------------------
local makeOrdinal = function(cardinal)
local card = tonumber(cardinal)
if not card then return cardinal end
local ordsuffix = cfg.i18n_t.ordinal.default
if card % 10 == 1 then
ordsuffix = cfg.i18n_t.ordinal[1]
elseif card % 10 == 2 then
ordsuffix = cfg.i18n_t.ordinal[2]
elseif card % 10 == 3 then
ordsuffix = cfg.i18n_t.ordinal[3]
end
-- In English, 1, 21, 31, etc. use 'st', but 11, 111, etc. use 'th'
-- similarly for 12 and 13, etc.
if (card % 100 == 11) or (card % 100 == 12) or (card % 100 == 13) then
ordsuffix = cfg.i18n_t.ordinal.default
end
return card .. ordsuffix
end
--[[--------------------------< I S _ S E T >--------------------------------------------------------------
Returns true if argument is set; false otherwise. Argument is 'set' when it exists (not nil) or when it is not an empty string.
]]
local function is_set(var)
return not (var == nil or var == '')
end
local function has_value(var)
return not (var == nil or var == '' or var == 'novalue' or var == 'somevalue' or var == 'Unknown')
end
--[[--------------------------< I N _ A R R A Y >--------------------------------------------------------------
Whether needle is in haystack (taken from Module:Citation/CS1/Utilities)
]]
local function in_array(needle, haystack)
if needle == nil then
return false
end
for n, v in ipairs(haystack) do
if v == needle then
return n
end
end
return false
end
-- wraps a string in nowiki unless disable flag is set
local function wrap_nowiki(str, disable)
if disable then return str or '' end
return mw.text.nowiki(str or '')
end
-- sort sequence table whose values are key-value pairs by key
local function comp_key(a, b)
local param_a, enum_a = a[1]:match('(%D+)(%d+)$'); -- get param name and enumerator from <a>
local param_b, enum_b = b[1]:match('(%D+)(%d+)$'); -- get param name and enumerator from <b>
if enum_a and enum_b then -- if both parameters have neumerators
if param_a == param_b then -- are parameter names the same?
return tonumber(enum_a) < tonumber(enum_b); -- yes: compare enumerators
end
end
return a[1] < b[1]; -- alpha sort if here
end
local function set_archive_args(arcurl, args)
if has_value(arcurl) then
local arcy, arcm, arcd = arcurl:match("(20%d%d)%p?(%d%d)%p?(%d%d)")
if arcy and arcm and arcd then
args["archive-url"] = arcurl
args["archive-date"] = arcy .. '-' .. arcm .. '-' .. arcd
end
end
end
--________________________________ Language Functions ______________________________________
local function getLanguages(languageArg)
local langcodes = {}
if languageArg then
-- check these are a supported language codes
for lc in mw.text.gsplit(languageArg, "[,، ]+", false) do --modified
langcodes[#langcodes + 1] = mw.language.isSupportedLanguage(lc) and lc
end
end
return langcodes
end
local function simplify_langauges(langs_t)
local newlangs = {}
for k,v in ipairs(langs_t) do
newlangs[#newlangs + 1] = v
local main_lang = v:match("^[^_-]+")
if main_lang ~= v then newlangs[#newlangs + 1] = main_lang; end
end
return newlangs
end
local function _getLangOfSnakProp(snak, pid)
if not pid or not snak then return {} end
local out = {}
local props = snak[pid]
for i, v in ipairs(props) do
if v.datatype == "monolingualtext" and v.datavalue then
out[#out + 1] = v.datavalue.value.language
end
end
return out
end
local function getLangOfProp(frame)
local pid = frame.args.pid or mw.text.trim(frame.args[1] or "")
if pid == "" then return end
local qid = frame.args.qid
if qid == "" then qid = nil end
local Q = WdItem.new(qid, { fwd = "ALL", onlysourced = false, noicon = true })
return table.concat(Q:getLangOfProp(pid), ", ")
end
-- gets the language codes of a Wikidata entry as a table
local function _lang_code(Qitem)
local lc = Qitem:getRawPropOfProp("P407", "P424")
if lc and #lc > 0 then return lc end
lc = Qitem:getRawPropOfProp("P407", "P218")
if lc and #lc > 0 then return lc end
return Qitem:getLangOfProp("P1476")
end
--________________________________ Author/Editor Display Functions ______________________________________
local function set_display_authors(args, contribtype)
local contrib_count = 0
for k, v in pairs(args) do
if k:find("^" .. contribtype .. "%d+$") then
contrib_count = contrib_count + 1
end
end
local key = 'display-' .. contribtype .. 's'
if contrib_count > 8 then -- convention in astronomy journals, optional mode for this?
if 'all' == args[key] then
args[key] = nil; -- unset because no longer needed
else
args[key] = args[key] or 3 -- limit to three displayed names
end
end
end
--[=[-------------------------< G E T _ N A M E _ L I S T >----------------------------------------------------
get_name_list -- adapted from getAuthors code taken from Module:RexxS
arguments:
nl_type - type of name list to fetch: nl_type = 'author' for authors; 'editor' for editors; 'translator' for translators
args - pointer to the parameter arguments table from the template call
qid - value from |qid= parameter; the Q-id of the source (book, etc.) in qid
wdlinks - value from the |wdlinks= parameter; a Boolean passed to enable links to Wikidata when no article exists
returns nothing; modifies the args table
]=]
local function get_name_list(nl_type, args, Q, wdlinks, lang)
local propertyID = "P50"
local fallbackID = "P2093" -- author name string
if nl_type == "author" then
propertyID = 'P50' -- for authors
fallbackID = 'P2093' -- author-string
elseif nl_type == "editor" then
propertyID = 'P5769' -- "editor-in-chief"
fallbackID = 'P98' -- for editors - So-called "fallbacks" are actually a second set of properties processed
-- TBD. Take book series editors into account as well (if they have a separate P code as well)?
elseif nl_type == "translator" then
propertyID = 'P655' -- for translators
fallbackID = nil
-- elseif 'contributor' == nl_type then
-- f.e. author of forewords (P2679) and afterwords (P2680); requires |contribution=, |title= and |author=
-- propertyID = 'P' -- for contributors
-- fallbackID = nil
else
return -- not specified so return
end
-- wdlinks is a Boolean passed to enable links to Wikidata when no article exists
-- if "false" or "no" or "0" is passed set it false
-- if nothing or an empty string is passed set it false
if wdlinks and (#wdlinks > 0) then
wdlinks = wdlinks:lower()
wdlinks = in_array(wdlinks, { "false", "no", "0" })
else
-- wdlinks is empty, so
wdlinks = false
end
local statements = Q:getStatements(propertyID)
if statements:count() == 0 and fallbackID then
statements = Q:getStatements(fallbackID)
end
-- Make sure it actually has at least one of the properties requested
if statements:count() == 0 then
return nil
end
-- So now we have something to return:
-- table 'out' is going to store the names(s):
-- and table 'link' will store any links to the name's article
local out = {}
local link = {}
local maxpos = 0
for _, s in statements:iter() do
-- maxpos = makelink(v, out, link, maxpos, wdlinks, lang)
local qnumber = s:getRawValue()
if qnumber ~= 'novalue' then
local label = s:getValue({ linked = false })
local slink
if label == 'somevalue' or label == 'Unknown' then
label = cfg.i18n_t["unknown-author"][lang] or cfg.i18n_t["unknown-author"]["ar"]
elseif mw.ustring.match(qnumber, '^Q%d+$') and qnumber ~= 'Q2818964' then
slink = mw.wikibase.getSitelink(qnumber, cfg.config_t.linksproject)
end
local position = maxpos + 1 -- Default to 'next' author.
position = tonumber(s:getRawQual("P1545")[1]) or position
maxpos = math.max(maxpos, position)
out[position] = label
if slink then link[position] = cfg.config_t.wikilinkprefix .. slink; end
end
end
-- if there's anything to return, then insert the additions in the template arguments table
-- in the form |author1=firstname secondname |author2= ...
-- Renumber, in case we have inconsistent numbering
local keys = {}
for k, v in pairs(out) do
keys[#keys + 1] = k
end
table.sort(keys) -- as they might be out of order
for i, k in ipairs(keys) do
out[k] = out[k]:gsub(''', '\''); -- prevent cs1|2 multiple names categorization; replace html entity with the actual character
if args[nl_type .. i] then -- name gets overwritten
-- pull corresponding -link only if overwritten name is same as WD name
if link[k] and (args[nl_type .. i] == out[k]) then
args[nl_type .. '-link' .. i] = args[nl_type .. '-link' .. i] or link[k] -- author-linkn or editor-linkn
end
else -- name does not get overwritten, so pull name from WD
args[nl_type .. i] = out[k]
if link[k] then
args[nl_type .. '-link' .. i] = args[nl_type .. '-link' .. i] or link[k] -- author-linkn or editor-linkn
end
end
end
end
--________________________________ filtering functions ______________________________________
-- ref filtering for citing from wikidata
local function is_rejected(item)
-- rejected Q
if cfg.rejected_t.sources[item] == true then
return true;
end
-- rejected Properties
local item_entity = mw.wikibase.getEntity(item);
for _, v in pairs(cfg.rejected_t.properties) do
if (#item_entity:getAllStatements(v) > 0) then
return true;
end
end
-- Rejected InatanceOf
local instance = item_entity:getAllStatements("P31")
for _, v in pairs(instance) do
local vsnak = v.mainsnak or v
if cfg.rejected_t.instances[vsnak.datavalue.value.id] then
return true;
end
end
--No used Properties
local has_properties = false
for k, _ in pairs(cfg.used_properties_t) do
if (#item_entity:getAllStatements(k) > 0) then
has_properties = true;
break;
end
end
return not has_properties;
end
--________________________________ main functions ______________________________________
--[[-------------------------< C I T E _ W E B >------------------------------------------------------------------
used to pass wikidata reference claims to cite web template.
--]]
local function _cite_web(citeq_args)
local Q
local refsnak = citeq_args.snak
citeq_args.snak = nil
-- retrieve all the parameters
local pqid = citeq_args.pqid
citeq_args.pqid = nil
local wdlinks = false
local qid = nil
local multi_args = {
P50 = "author",
P2093 = "author",
P5769 = "editor",
P98 = "editor",
P655 = "translator",
}
local fallbackurls = {}
Q = WdItem.newSnakItem(refsnak,
{ fwd = "ALL", onlysourced = false, noicon = true, linksproject = cfg.config_t.linksproject, wikilinkprefix = cfg
.config_t.wikilinkprefix })
-- find language
local langcodes = getLanguages(citeq_args.language)
if refsnak["P1476"] then
langcodes = _getLangOfSnakProp(refsnak, "P1476")
citeq_args.language = citeq_args.language or table.concat(langcodes, ", ")
end
langcodes = simplify_langauges(langcodes)
for _, l in ipairs({ 'ar', 'en', 'mul' }) do
if not in_array(l, langcodes) then
langcodes[#langcodes + 1] = l
end
end
Q:setOptions({ langs = langcodes })
local labellang = langcodes[1]
local rtl = rtl_lang[langcodes[1]] or false
local oth = {}
for i in pairs(refsnak) do
local label = ""
-- multiple authors may be given
if refsnak[i][1].snaktype ~= 'novalue' then
if multi_args[i] then
get_name_list(multi_args[i], citeq_args, Q, wdlinks, labellang)
elseif cfg.used_properties_t[i] and type(cfg.used_properties_t[i]) == "table" then
local data = cfg.used_properties_t[i]
local langidx = 1
citeq_args[data.arg] = Q:getValue(i,
{ maxvals = data.maxvals, linked = data.linked, rank = data.rank or "best" })
if not citeq_args[data.arg] or citeq_args[data.arg]:find('^Q%d+$') then
citeq_args[data.arg] = Q:getValue(i, { maxvals = data.maxvals, linked = data.linked })
if citeq_args[data.arg]:find('^Q%d+$') then -- qid was returned
-- try fallback to qid's native language
local qid_languages = _lang_code(WdItem.newItem(citeq_args[data.arg],
{ fwd = "ALL", onlysourced = false, noicon = true }))
citeq_args[data.arg] = Q:getValue(i,
{ maxvals = data.maxvals, linked = data.linked, langs = qid_languages })
if citeq_args[data.arg]:find('^Q%d+$') then -- qid was returned again
citeq_args[data.arg] = nil
else
-- record the language found if no lang specified
citeq_args.language = citeq_args.language or qid_languages[1]
end
end
end
--- translate unknown value
if citeq_args[data.arg] == "Unknown" then
if rtl then
citeq_args[data.arg] = cfg.i18n_t.ar["unknown-" .. data.arg] or cfg.i18n_t.ar["unknown"]
else
citeq_args[data.arg] = mw.wikibase.getLabelByLang("Q4233718", langcodes[1]):gsub("^%l",
mw.ustring.upper)
end
end
-----------------
if data.others then
oth[#oth + 1] = citeq_args[data.arg] and
((rtl and cfg.i18n_t.ar[data.arg] or data.arg:gsub("^%l", string.upper)) .. ": " .. citeq_args[data.arg])
citeq_args[data.arg] = nil
end
elseif cfg.used_properties_t[i] then
if i == "P648" then
citeq_args.ol = (Q:getValue("P648", { maxvals = 1 }) or ''):gsub("^OL(.+)$", "%1")
if citeq_args.ol == "" then
citeq_args.ol = nil
end
elseif i == "P957" then
citeq_args.isbn = Q:getValue("P957", { maxvals = 1 })
elseif in_array(i, { "P854", "P953", "P856", "P2699" }) then
local url;
for _, pr in ipairs({ "P854", "P953", "P856", "P2699" }) do
url = Q:getStatements(pr):getBestOne():getRawValue()
if has_value(url) then
citeq_args.url = url
break;
end
end
end
end
if refsnak[i][1].datatype == "external-id" then
fallbackurls[#fallbackurls+1] = {
url = Q:getValue(i, { maxvals = 1, fullidurl=true}),
arg = cfg.used_properties_t[i] and cfg.used_properties_t[i].arg
}
end
end
end
if not citeq_args.url and #fallbackurls>0 then
for _,v in ipairs(fallbackurls) do
if not v.arg then
citeq_args.url = v.url
break;
end
end
if not citeq_args.url then
citeq_args.url = fallbackurls[1].url
citeq_args[fallbackurls[1].arg] = nil
end
end
if citeq_args.url then
if refsnak["P813"] then
citeq_args.accessdate = Q:getValue("P813", { maxvals = 1 })
end
if refsnak["P1065"] and refsnak["P2960"] then
citeq_args["archive-url"] = Q:getValue("P1065", { maxvals = 1 })
citeq_args["archive-date"] = Q:getValue("P2960", { maxvals = 1 })
elseif refsnak["P1065"] then
set_archive_args(Q:getValue("P1065", { maxvals = 1 }), citeq_args)
end
end
citeq_args.others = citeq_args.others or table.concat(oth, ". ")
if citeq_args.others == "" then
citeq_args.others = nil
end
citeq_args.biorxiv = citeq_args.biorxiv and ("10.1101/" .. citeq_args.biorxiv)
-- if url then see if there's an archive: citeq_args.url
local url
local title_display = citeq_args.title
if citeq_args.url then
citeq_args.title = wrap_nowiki(title_display)
end
-- TBD: incorporate |at, |sheets= and |sheet= here as well
-- Sort out what should happen if several of them are given at the same time
if citeq_args.page or citeq_args.p then -- let single take precedence over multiple
citeq_args.pages = nil
citeq_args.pp = nil
end
if citeq_args.pages then
local _, count = string.gsub(citeq_args.pages, "[,;%s]%d+", "")
if count == 1 then
citeq_args.page = citeq_args.pages
citeq_args.pages = nil
end
end
-- replace no-break space by space, User:Mr. Ibrahem
if citeq_args.title then
citeq_args.title = mw.ustring.gsub(citeq_args.title, "\194\160", " ")
end
set_display_authors( citeq_args, 'author' )
set_display_authors( citeq_args, 'editor' )
-- code to make a guess what template to use from the supplied parameters
-- (first draft for proof-of-concept)
local template = "بويب"
-- |id= could hold more than one identifier pulled from Wikidata not supported by {{citation}}, right now only add our qid to the list
local list_sep = '. '
if citeq_args.mode ~= 'cs1' then
list_sep = ', '
end
-- clean up any blank parameters
for k, v in pairs(citeq_args) do
if v == "" then citeq_args[k] = nil end
end
if template then
-- citeq_args.mode = citeq_args.mode or "cs1" -- a cs1 template already knows that it is cs1 so this line is superfluous
template = "استشهاد " .. template
else
-- citeq_args.mode = citeq_args.mode or "cs2" -- a cs2 template already knows that it is cs2 so this line is superfluous
template = "استشهاد"
end
citeq_args['no-tracking'] = 'true' -- لإيقاف ظهور تصانيف التتبع
return mw.getCurrentFrame():expandTemplate { title = template, args = citeq_args } -- render the template
end
--[[-------------------------< C I T E _ Q >------------------------------------------------------------------
Takes standard CS1|2 template parameters and passes all to {{citation}}. If neither of |author= and |author1=
are set, calls get_authors() to try to get an author name-list from Wikidata. The result is passed to
{{citation}} for rendering.
--]]
local function _cite_q(in_citeq_args)
local frame = mw.getCurrentFrame()
local citeq_args = {}
local origin_args = {}
local Q
-- parameters that don't get passed to Citation
local expand = in_citeq_args.expand -- when set to anything, causes {{cite q}} to render <code><nowiki>{{citation|...}}</nowiki></code>
local qid = in_citeq_args.qid or in_citeq_args[1]
local wdlinks = in_citeq_args.wdlinks
local template = in_citeq_args.template
local cite_class = 'citation'
local rtl = true
local snak = in_citeq_args.snak or {}
local pqid = in_citeq_args.pqid
local page_offset = 0
in_citeq_args.expand = nil
in_citeq_args[1] = nil
in_citeq_args.qid = nil
in_citeq_args.wdlinks = nil
in_citeq_args.template = nil
in_citeq_args.snak = nil
in_citeq_args.pqid = nil
if in_citeq_args.wikidatacite then
citeq_args = in_citeq_args
else
mw.logObject(mw.loadData("Module:Art pref/data")["استشهاد بويكي بيانات"])
local A = require("Module:Argument Wrapper")(cfg.aliases_t, { in_citeq_args, mw.loadData("Module:Art pref/data")["استشهاد بويكي بيانات"] }, cfg.numbered_aliases_t)
-- local A = argument_wrapper(in_citeq_args)
local loaded_args = {}
for _, args_table in pairs({ cfg.simple_properties_t, cfg.used_args_t }) do
for k, _ in pairs(args_table) do
if A[k] then
citeq_args[k] = A[k]
if k ~= A:ORIGIN(k) then
origin_args[k] = A:ORIGIN(k)
loaded_args[#loaded_args + 1] = A:ORIGIN(k)
else
loaded_args[#loaded_args + 1] = k
end
end
end
end
for k, v in pairs(in_citeq_args) do
if not in_array(k, loaded_args) then
citeq_args[k] = v
end
end
end
-- if title supplied, flag to not read html title
local titleforced = (citeq_args.title ~= nil)
local default_opt = { rank = "preferred normal", fetchwikidata = "ALL", onlysourced = false, noicon = true, linksproject =
cfg.config_t.linksproject, wikilinkprefix = cfg.config_t.wikilinkprefix }
if citeq_args.volume or citeq_args.volume then
local qualifiedaspossible = {}
if citeq_args.volume then
qualifiedaspossible['P478'] = citeq_args.volume
end
if citeq_args.chapter then
qualifiedaspossible['P792'] = citeq_args.chapter
end
default_opt.qualifiedaspossible = qualifiedaspossible
end
Q = WdItem.WdItem:new(qid, default_opt, snak)
local oth = {}
-- put the language codes into a sequential table langcodes[]
local langcodes = getLanguages(citeq_args.language)
if not langcodes[1] then
-- try to find language of work
langcodes = _lang_code(Q)
end
if not langcodes[1] then
-- try fallback to journal's language
local journal_qid = Q:followQid("P1433")
langcodes = journal_qid and _lang_code(journal_qid) or {}
end
citeq_args.language = citeq_args.language or table.concat(langcodes, ", ")
langcodes = simplify_langauges(langcodes)
Q:setOptions({ langs = langcodes });
local labellang = langcodes[1] or 'ar'
rtl = rtl_lang[langcodes[1]] or false
-- loop through list of simple properties and get their values in citeq_args
for name, data in pairs(cfg.simple_properties_t) do
local opt = { maxvals = data.maxvals, linked = data.linked, qual = data.qual, hijri = data.hijri }
if data.no_vol_qual then opt.qualifiedaspossible = {}; end
citeq_args[name] = citeq_args[name] or Q:getValue(data.id, opt)
if not citeq_args[name] and data.populate_from_journal then
local publishedin = Q:getValue("P1433", { maxvals = 0, qual = data.id, qualsonly = true })
citeq_args[name] = publishedin or Q:getPropOfProp("P1433", data.id, { maxvals = data.maxvals })
end
if citeq_args[name] and snak[data.id] then
snak[data.id] = nil
end
--- translate unknown value
if citeq_args[name] == "Unknown" and rtl then
citeq_args[name] = cfg.i18n_t.ar["unknown-" .. name] or cfg.i18n_t.ar["unknown"]
end
-----------------
if data.others then
oth[#oth + 1] = citeq_args[name] and
((rtl and cfg.i18n_t.ar[name] or name:gsub("^%l", string.upper)) .. ": " .. citeq_args[name])
citeq_args[name] = nil
end
end
citeq_args.others = citeq_args.others or table.concat(oth, ". ")
if citeq_args.others == "" then
citeq_args.others = nil
end
citeq_args.journal = citeq_args.journal and
citeq_args.journal:gsub("^''", ""):gsub("''$", ""):gsub("|''", "|"):gsub("'']]", "]]")
citeq_args.ol = citeq_args.ol or (Q:getValue("P648", { maxvals = 1 }) or ''):gsub("^OL(.+)$", "%1")
if citeq_args.ol == "" then
citeq_args.ol = nil
end
-- TBD. Take care of |ol-access=?
citeq_args.biorxiv = citeq_args.biorxiv and ("10.1101/" .. citeq_args.biorxiv)
citeq_args.isbn = citeq_args.isbn or
Q:getValue("P957", { maxvals = 1, rank = "best" }) -- try ISBN 10 (only one value accepted)
if citeq_args.page then -- let single take precedence over multiple
citeq_args.pages = nil
citeq_args.pp = nil
end
if citeq_args.pages then
local _, count = string.gsub(citeq_args.pages, "[,;%s]%d+", "")
if count == 1 then
citeq_args.page = citeq_args.pages
citeq_args.pages = nil
end
end
-- Orginal Date
if not citeq_args['orig-date'] then
local work, origdate, origDateS = Q:getStatements('P629'):getBestOne():getRawValue()
local origOpt = { rank = "best", maxvals = 1, onlysourced = false, noicon = true }
local ishijri = false;
if has_value(work) then
local workQ = WdItem.newItem(work, origOpt)
origDateS = workQ:getStatements('P577', { df = 'y', qualifiedaspossible = { P4241 = '*' } }):getBestOne()
origdate = origDateS:getValue({ df = 'y', hijri = true })
if has_value(origdate) then
ishijri = true
else
origdate = origDateS:getValue({ df = 'y' })
end
end
if not has_value(origdate) then
local author = Q:getStatements('P50'):getBestOne():getRawValue()
if has_value(author) then
local authorQ = WdItem.newItem(author, origOpt)
origDateS = authorQ:getStatements('P570', { df = 'y', qualifiedaspossible = { P4241 = '*' } })
:getBestOne()
origdate = origDateS:getValue({ df = 'y', hijri = true })
if has_value(origdate) then
ishijri = true
else
origdate = origDateS:getValue({ df = 'y' })
end
end
end
if has_value(origdate) then
local printDateS, printDate = Q:getStatements("P577", { df = 'y', qualifiedaspossible = { P4241 = '*' } })
:getBestOne()
if ishijri then
printDate = printDateS:getValue({ hijri = true })
if has_value(printDate) then
if (tonumber(origdate) or 3000) < (tonumber(printDate) or 0) then
citeq_args['orig-date'] = origdate .. 'هـ'
end
else
if (tonumber(origDateS:getValue({ df = 'y'})) or 3000) < (tonumber(printDateS:getValue({ df = 'y'})) or 0) then
citeq_args['orig-date'] = origdate .. 'هـ'
end
end
else
printDate = printDateS:getValue()
if (has_value(printDate) and ((tonumber(origdate) or 3000) < (tonumber(printDate) or 0)))
or not has_value(printDate) then
citeq_args['orig-date'] = origdate
end
end
end
end
local url
--find formatted url
if citeq_args.url == nil then
if snak ~= {} then
for k, v in pairs(snak) do
if (v[1].datatype == "external-id") then
citeq_args.url = mw.ustring.match(mw.wikibase.formatValue(v[1]), "%[(https?://[^%s%]]+)")
snak[k] = nil
break;
end
end
end
if citeq_args.url == nil and pqid and qid then
local refproperty = Q:getStatements("P1687"):getRawValue()
for k, p in ipairs(refproperty) do
if has_value(p) then
local refval = WdItem.WdItem:new(pqid):getValue(p, {fullidurl=true})
if has_value(refval) then
citeq_args.url = refval
break;
end
end
end
end
end
if not citeq_args.url then
local S953 = Q:getStatements("P953"):getBestOne()
local S953_val = S953:getRawValue()
citeq_args.url = has_value(S953_val) and S953_val or nil
if citeq_args.url then
if mw.ustring.match(citeq_args.url, "archive.org/details/") and citeq_args.page then
page_offset = tonumber(S953:getRawQual('P8330')[1]) or 0
if not citeq_args.volume or
(citeq_args.volume and (citeq_args.volume == S953:getRawQual('P478')[1])) then
local pagenum = tonumber(citeq_args.page) or tonumber(mw.text.split(citeq_args.page, '%D')[1])
if pagenum then
citeq_args.url = mw.ustring.gsub(citeq_args.url, "/?$", "") ..
"/page/n" .. (pagenum + page_offset - 1) .. "/mode/1up"
end
end
end
set_archive_args(S953:getRawQual('P1065')[1], citeq_args)
end
end
if not citeq_args.url then
for i, pr in ipairs({ "P856", "P2699" }) do
local surl = Q:getStatements(pr):getBestOne()
if surl then
local url = surl:getRawValue()
if has_value(url) then
citeq_args.url = url
set_archive_args(surl:getRawQual('P1065')[1], citeq_args)
break;
end
end
end
end
if not titleforced then
-- Handle subtitle.
if citeq_args.title then
local subtitle = Q:getValue('P1680');
if subtitle then
citeq_args.title = citeq_args.title .. ": " .. subtitle
end
end
local htmltitle = Q:getValue("P1476", { qual = "P6833", maxvals = 1, qualsonly = true })
if htmltitle then
citeq_args.title = htmltitle:gsub("</?i>", "''")
else
local title_display = citeq_args.title
or (langcodes[1] and mw.wikibase.getLabelByLang(qid, langcodes[1]))
or mw.wikibase.getLabel(qid)
if title_display and snak and snak.P1810 then
title_display = title_display .. " | " .. snak.P1810[1].datavalue.value
snak.P1810 = nil
end
title_display = title_display or ("No label or title -- debug: " .. qid)
if citeq_args.url then
citeq_args.title = wrap_nowiki(title_display)
else
local slink = mw.wikibase.getSitelink(qid, cfg.config_t.linksproject)
local slink_flag = false
local wrap_title = ''
local wslink = false
if not slink then
-- See if we have wikisource
if not citeq_args.url then
local wikisource_sitelink = mw.wikibase.getSitelink(qid, cfg.i18n_t.wikisource) or nil
if wikisource_sitelink then
slink = ':s:' .. wikisource_sitelink
wslink = true
end
end
end
if citeq_args.title then
if slink then
wrap_title = wrap_nowiki(citeq_args.title)
slink_flag = true
else
citeq_args.title = wrap_nowiki(citeq_args.title)
end
else
if slink and not wslink then
if slink:lower() == title_display:lower() then
citeq_args.title = '[[' .. slink .. ']]'
else
wrap_title = wrap_nowiki(slink:gsub("%s%(.+%)$", ""):gsub(",.+$", ""))
slink_flag = true
end
elseif wslink then
wrap_title = wrap_nowiki(title_display)
slink_flag = true
else
citeq_args.title = wrap_nowiki(title_display)
end
end
if slink_flag then
if slink == wrap_title and not wslink then -- direct link
citeq_args.title = '[[' .. slink .. ']]'
else -- piped link
citeq_args.title = '[[' .. slink .. '|' .. wrap_title .. ']]'
end
end
end
end
end
-- replace no-break space by space, User:Mr. Ibrahem
if citeq_args.title then
citeq_args.title = mw.ustring.gsub(citeq_args.title, "\194\160", " ")
end
if is_set(qid) then
if not is_set(citeq_args.author) and not is_set(citeq_args.author1) then -- if neither are set, try to get authors from Wikidata
get_name_list('author', citeq_args, Q, wdlinks, labellang) -- modify citeq_args table with authors from Wikidata
end
if not is_set(citeq_args.editor) and not is_set(citeq_args.editor1) then -- if neither are set, try to get editors from Wikidata
get_name_list('editor', citeq_args, Q, wdlinks, labellang) -- modify citeq_args table with editors from Wikidata
end
if not is_set(citeq_args.translator) and not is_set(citeq_args.translator1) then -- if neither are set, try to get translators from Wikidata
get_name_list('translator', citeq_args, Q, wdlinks, labellang) -- modify citeq_args table with translators from Wikidata
end
end
for k, v in pairs(citeq_args) do
if in_array(v, { '(())', 'unset', 'ignore' }) or 'string' ~= type(k) then -- empty accept-as-is-written (()) markup to indicate an empty/unused parameter value, other ((...)) markups are deliberately passed down to {{citation}}
citeq_args[k] = nil
elseif in_array(v, { '((unset))', '((ignore))' }) then -- strip off markup for free-text values clashing with local keywords
citeq_args[k] = 'unset'
end
end
set_display_authors( citeq_args, 'author' )
set_display_authors( citeq_args, 'editor' )
-- change edition to ordinal if it's set and numeric
if (rtl == false) then citeq_args.edition = citeq_args.edition and makeOrdinal(citeq_args.edition) end
-- code to make a guess what template to use from the supplied parameters
-- (first draft for proof-of-concept)
if citeq_args.journal then
template = template or "بدورية محكمة"
elseif citeq_args.isbn then
template = template or "بكتاب"
citeq_args.asin = nil -- suppress ASIN if ISBN exists
elseif citeq_args.website then
template = template or "بويب"
end
-- template is CS1 designator: journal, web, news, etc.
if template then
-- citeq_args.mode = citeq_args.mode or "cs1" -- a cs1 template already knows that it is cs1 so this line is superfluous
local citeclasses = { ["بدورية محكمة"] = 'journal', ["بكتاب"] = "book", ["بويب"] = "web" }
cite_class = cfg.citation_class_map_t[template] and template or citeclasses[template]
template = cfg.citation_class_map_t[template] or ("استشهاد " .. template)
else
-- citeq_args.mode = citeq_args.mode or "cs2" -- a cs2 template already knows that it is cs2 so this line is superfluous
template = "استشهاد"
end
-- |id= could hold more than one identifier pulled from Wikidata not supported by {{citation}}, right now only add our qid to the list
local list_sep = '. '
if citeq_args.mode ~= 'cs1' then
list_sep = ', '
end
local id = cfg.i18n_t.wdq .. ':[[:d:' .. qid .. '|' .. qid .. ']]'
local old_id = citeq_args.id
if wdlinks then -- show WD logo
id = id .. '[[ملف:Wikidata-logo.svg|16px|alt=|link=]]' -- possibly replace by WD edit icon?
end
if is_set(old_id) then
citeq_args.id = old_id .. list_sep .. id -- append to user-specified contents
else
citeq_args.id = id
end
-- clean up any blank parameters
for k, v in pairs(citeq_args) do
if v == "" then citeq_args[k] = nil end
end
-- use real param names for CS1 messages
for k, v in pairs(origin_args) do
if citeq_args[k] and citeq_args[k] == in_citeq_args[v] then
citeq_args[v] = citeq_args[k]
citeq_args[k] = nil
end
end
-- if |expand=<anything>, write a nowiki'd version to see what the {{citation}} template call looks like
if expand then
local expand_args = { "{{" .. template .. "\n" } -- init with citation template
if expand == "self" then
citeq_args.id = old_id -- restore original |id= parameter
expand_args = { cfg.i18n_t.cite_q .. qid } -- expand to itself
end
-- make a sortable table and sort it by param name
local sorttable = {}
for param, val in pairs(citeq_args) do
sorttable[#sorttable + 1] = { param, val }
end
table.sort(sorttable, comp_key)
-- add contents to expand_args
for idx, val in ipairs(sorttable) do
expand_args[#expand_args + 1] = val[1] .. '=' .. val[2] .. "\n"
end
-- make the nowiki'd string and done
return frame:preprocess(table.concat({ '<syntaxhighlight lang="wikitext" inline="1">', table.concat(expand_args,
' |') .. '}}', '</syntaxhighlight>' }));
end
local erratumid = Q:getPropertyIDs("P2507", { maxvals = 1 })
if erratumid then
erratumid = " [[d:" .. erratumid .. "|" .. cfg.i18n_t.erratum .. "]]" .. cfg.i18n_t.trackingcats.erratum
else
erratumid = ""
end
local opt_cat = ''
if Q:getValue("P5824") then
opt_cat = cfg.i18n_t.trackingcats.retracted
end
if Q:getValue("P1366") then
opt_cat = opt_cat .. cfg.i18n_t.trackingcats.replaced
end
if not citeq_args.title then -- emit category link if missing title
opt_cat = opt_cat .. cfg.i18n_t.trackingcats['no-label-or-title'];
end
if citeq_args.wikidatacite then
return frame:expandTemplate { title = template, args = citeq_args } ..
erratumid .. opt_cat -- render the template
else
local CS = require("Module:Citation/CS1" .. sandbox)
return CS._citation(frame, citeq_args, { ['CitationClass'] = cite_class }) .. erratumid .. opt_cat
end
end
--[[-------------------------< C I T E W I K I D A T A >------------------------------------------------------------------
format wikidata reference
--]]
local function _cite_wikidata(ref, pqid, expand)
-- early exit
if not ref then
return nil
end
local snak = ref.snaks
-- مراجع غير مقبولة
if snak.P143 or snak.P3452 then
return nil
end
local hash = ref.hash
if not is_set(hash) then
mw.log ("hash is not set")
return nil
end
local hashname = (is_set(sandbox) and 'wikidata-s-' or 'wikidata-') .. hash
local frame = mw.getCurrentFrame()
if ref_cash[hash] ~= nil then
if ref_cash[hash] == false then
return nil
end
return frame:extensionTag("ref", '' , { name = hashname })
end
local citeq_args = {}
-- مذكور في
if snak.P248 then
for _, prop in pairs(snak.P248) do
if prop.snaktype == "value" then
citeq_args.qid = prop.datavalue.value.id
break;
end
end
snak.P248 = nil;
end
if citeq_args.qid and is_rejected(citeq_args.qid) == true then
return nil
end
local reference
citeq_args.snak = snak
citeq_args.pqid = pqid
citeq_args.wikidatacite = 1
citeq_args.expand = expand
if citeq_args.qid then
reference = _cite_q(citeq_args)
else
local has_properties = false
for k, _ in pairs(cfg.used_properties_t) do
if snak[k] then
has_properties = true;
break;
end
end
reference = (has_properties and _cite_web(citeq_args) or nil)
end
if is_set(reference) then
reference = frame:extensionTag("ref", reference, { name = hashname })
ref_cash[hash] = true
else
ref_cash[hash] = false
end
return reference
end
local function cite_q(frame)
local args = {}
for k, v in pairs(frame:getParent().args) do
if v ~= "" then args[k] = v end
end
for k, v in pairs(frame.args) do
if v ~= "" then args[k] = v end
end
args.qid = args.qid or args[1] or ""
if args.qid == "" then return nil end
args[1] = nil
local citesep = (args.citesep or "")
if citesep == "" then citesep = ", " end
citesep = citesep:gsub('"', '') -- strip double quotes after setting default to allow |citesep="" as a blank separator
args.citesep = nil
local tag = args.tag or ""
if tag == "" then tag = nil end
args.tag = nil
local list = args.list or ""
if list == "" then list = nil end
args.list = nil
args.language = args.language or args.lang
args.lang = nil
local cites = {}
for q in args.qid:gmatch("Q%d+") do
-- make a new copy of the arguments
local newargs = {}
for k, v in pairs(args) do
if k ~= "qid" then
newargs[k] = v
end
end
newargs.qid = q
if tag == "ref" then
cites[#cites + 1] = frame:callParserFunction { name = "#tag:ref", args = { _cite_q(newargs), name = q } }
-- expand like this: args = { _cite_q(newargs), name = 'foo', group = 'bar' }
else
cites[#cites + 1] = _cite_q(newargs)
end
end
if list then
return frame:expandTemplate { title = list, args = cites }
else
return table.concat(cites, citesep)
end
end
--[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------
]]
return {
makeOrdinal = makeOrdinal,
getLangOfProp = getLangOfProp,
_cite_wikidata = _cite_wikidata,
_cite_q = _cite_q,
cite_q = cite_q
}
r1kncvk3r7rz4tw6x80ebzrbajbl80u
وحدة:ar-verb/مختبر
828
231313
1159120
1097566
2026-09-11T00:31:07Z
ForzaGreen
28665
المصنّف يميّز اللفيف المقرون المُضعَّف؛ حذف تصنيفات insert_cat المعطّلة؛ تحديث عدّاد اختبارات المجموعة 0
1159120
Scribunto
text/plain
-- Unit tests for [[Module:ar-verb]]. Click talk page to run tests.
-- اختبارات الوحدة. انقر على صفحة النقاش لعرض النتائج
-- 🚧 Work In Progress !!
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
-- ═══════════════════════════════════════════════════════════
-- Utilities required for some tests
-- ═══════════════════════════════════════════════════════════
local m_string_utilities = require("Module:string utilities")
local u = m_string_utilities.char
-- ═══════════════════════════════════════════════════════════
function tests:test_conj_form_I()
local result = m_ar_verb.do_generate_forms({["جذر"] = "كتب", ["وزن"] = "فعَل يفعُل"}, "ar-conj")
self:equals("كتب، فعَل يفعُل، هو، الماضي", result.forms.past_3ms[1].form, "كَتَبَ")
self:equals("كتب، فعَل يفعُل، هو، المضارع", result.forms.ind_3ms[1].form, "يَكْتُبُ")
self:equals("كتب، فعَل يفعُل، أنتَ، الأمر", result.forms.imp_2ms[1].form, "اُكْتُبْ")
self:equals("كتب، فعَل يفعُل، اسم الفاعل", result.forms.ap[1].form, "كَاتِب")
self:equals("كتب، فعَل يفعُل، اسم المفعول", result.forms.pp[1].form, "مَكْتُوب")
self:equals("كتب، فعَل يفعُل، له معلوم", result.has_active, true)
self:equals("كتب، فعَل يفعُل، له مجهول", result.has_passive, true)
self:equals("كتب، فعَل يفعُل، الوزن I", result.verb_forms[1], "I")
end
function tests:test_conj_form_II()
local result = m_ar_verb.do_generate_forms({["جذر"] = "درس", ["وزن"] = "فعّل"}, "ar-conj")
self:equals("درس، فعّل، هو، الماضي", result.forms.past_3ms[1].form, "دَرَّسَ")
self:equals("درس، فعّل، هو، المضارع", result.forms.ind_3ms[1].form, "يُدَرِّسُ")
self:equals("درس، فعّل، أنتَ، الأمر", result.forms.imp_2ms[1].form, "دَرِّسْ")
self:equals("درس، فعّل، اسم الفاعل", result.forms.ap[1].form, "مُدَرِّس")
self:equals("درس، فعّل، اسم المفعول", result.forms.pp[1].form, "مُدَرَّس")
self:equals("درس، فعّل، المصدر", result.forms.vn[1].form, "تَدْرِيس")
end
function tests:test_conj_form_III()
local result = m_ar_verb.do_generate_forms({["جذر"] = "قتل", ["وزن"] = "فاعل"}, "ar-conj")
self:equals("قتل، فاعل، هو، الماضي", result.forms.past_3ms[1].form, "قَاتَلَ")
self:equals("قتل، فاعل، هو، المضارع", result.forms.ind_3ms[1].form, "يُقَاتِلُ")
self:equals("قتل، فاعل، أنتَ، الأمر", result.forms.imp_2ms[1].form, "قَاتِلْ")
self:equals("قتل، فاعل، اسم الفاعل", result.forms.ap[1].form, "مُقَاتِل")
self:equals("قتل، فاعل، اسم المفعول", result.forms.pp[1].form, "مُقَاتَل")
end
function tests:test_conj_form_IV()
local result = m_ar_verb.do_generate_forms({["جذر"] = "رسل", ["وزن"] = "أفعل"}, "ar-conj")
self:equals("رسل، أفعل، هو، الماضي", result.forms.past_3ms[1].form, "أَرْسَلَ")
self:equals("رسل، أفعل، هو، المضارع", result.forms.ind_3ms[1].form, "يُرْسِلُ")
self:equals("رسل، أفعل، أنتَ، الأمر", result.forms.imp_2ms[1].form, "أَرْسِلْ")
self:equals("رسل، أفعل، اسم الفاعل", result.forms.ap[1].form, "مُرْسِل")
self:equals("رسل، أفعل، اسم المفعول", result.forms.pp[1].form, "مُرْسَل")
end
-- وزن «أفعل» من الأجوف: تُعَلّ العين ألفًا (أَفَالَ) في الواوي واليائي معًا،
-- تبعًا لإعلالها في الثلاثي المجرد (معجم متن اللغة).
function tests:test_conj_form_IV_hollow()
-- أجوف واوي
local qwl = m_ar_verb.do_generate_forms({["جذر"] = "قول", ["وزن"] = "أفعل"}, "ar-conj")
self:equals("قول، أفعل، هو، الماضي", qwl.forms.past_3ms[1].form, "أَقَالَ")
-- أجوف يائي: يُعَلّ كنظيره الواوي
local yaa_cases = {
{"تيس", "أَتَاسَ"},
{"طيب", "أَطَابَ"},
{"بين", "أَبَانَ"},
{"ضيع", "أَضَاعَ"},
{"طيح", "أَطَاحَ"},
}
for _, case in ipairs(yaa_cases) do
local root, expected = case[1], case[2]
local result = m_ar_verb.do_generate_forms({["جذر"] = root, ["وزن"] = "أفعل"}, "ar-conj")
self:equals(root .. "، أفعل، هو، الماضي", result.forms.past_3ms[1].form, expected)
end
-- الاستثناء يخصّ «أفعل» وحده؛ الأوزان الأخرى من الأجوف اليائي تبقى معلّة
local tys_x = m_ar_verb.do_generate_forms({["جذر"] = "تيس", ["وزن"] = "استفعل"}, "ar-conj")
self:equals("تيس، استفعل، هو، الماضي", tys_x.forms.past_3ms[1].form, "اِسْتَتَاسَ")
end
-- 7 جذور يائية شاذّة يبقى وزن «أفعل» منها صحيحًا (أَفْيَلَ) — أفعال مسموعة موثّقة،
-- لا الصفة المشبهة (مثل أَخْيَف/خَيْفاء). انظر SOUND_FORM_IV_ROOTS في الوحدة.
function tests:test_conj_form_IV_sound_exceptions()
local cases = {
{"خيل", "أَخْيَلَ"}, -- أخيلت السماء — المعجم الوسيط 1/266
{"غيل", "أَغْيَلَ"}, -- أغيلته سقته الغَيْل — لسان العرب 11/111
{"حيج", "أَحْيَجَ"}, -- أحيجت الأرض — تاج العروس 5/500
{"حين", "أَحْيَنَ"}, -- أحين القوم — المعجم الوسيط 1/212
{"خيف", "أَخْيَفَ"}, -- أخيف الحاج — كتاب الأفعال لابن القوطية 35
{"ريف", "أَرْيَفَ"}, -- أريفت الأرض — المحيط في اللغة 10/256
{"زين", "أَزْيَنَ"}, -- أزينت الأرض — مقاييس اللغة 3/41
}
for _, case in ipairs(cases) do
local root, expected = case[1], case[2]
local result = m_ar_verb.do_generate_forms({["جذر"] = root, ["وزن"] = "أفعل"}, "ar-conj")
self:equals(root .. "، أفعل، هو، الماضي (شاذّ صحيح)", result.forms.past_3ms[1].form, expected)
end
end
function tests:test_conj_weak()
local result = m_ar_verb.do_generate_forms({["جذر"] = "قول", ["وزن"] = "فعَل يفعُل"}, "ar-conj")
self:equals("قول، فعَل يفعُل، هو، الماضي", result.forms.past_3ms[1].form, "قَالَ")
self:equals("قول، فعَل يفعُل، هو، المضارع", result.forms.ind_3ms[1].form, "يَقُولُ")
self:equals("قول، فعَل يفعُل، أنتَ، الأمر", result.forms.imp_2ms[1].form, "قُلْ")
local result = m_ar_verb.do_generate_forms({["جذر"] = "رمي", ["وزن"] = "فعَل يفعِل"}, "ar-conj")
self:equals("رمي، فعَل يفعِل، هو، الماضي", result.forms.past_3ms[1].form, "رَمَى")
self:equals("رمي، فعَل يفعِل، هو، المضارع", result.forms.ind_3ms[1].form, "يَرْمِي")
self:equals("رمي، فعَل يفعِل، أنتَ، الأمر", result.forms.imp_2ms[1].form, "اِرْمِ")
self:equals("رمي، فعَل يفعِل، اسم الفاعل", result.forms.ap[1].form, "رَامٍ")
local result = m_ar_verb.do_generate_forms({["جذر"] = "م_د_د", ["وزن"] = "فعَل يفعُل"}, "ar-conj")
self:equals("مدد، فعَل يفعُل، مضعَّف، هو، الماضي", result.forms.past_3ms[1].form, "مَدَّ")
local result = m_ar_verb.do_generate_forms({["جذر"] = "وصل", ["وزن"] = "فعَل يفعِل"}, "ar-conj")
self:equals("وصل، فعَل يفعِل، مثال، هو، الماضي", result.forms.past_3ms[1].form, "وَصَلَ")
self:equals("وصل، فعَل يفعِل، مثال، هو، المضارع", result.forms.ind_3ms[1].form, "يَصِلُ")
self:equals("وصل، فعَل يفعِل، مثال، أنت، الأمر", result.forms.imp_2ms[1].form, "صِلْ")
end
function tests:test_conj_with_underscores()
local result = m_ar_verb.do_generate_forms({["جذر"] = "ك_ت_ب", ["وزن"] = "فعَل يفعُل"}, "ar-conj")
self:equals("كتب، فعَل يفعُل، هو، الماضي", result.forms.past_3ms[1].form, "كَتَبَ")
self:equals("كتب، فعَل يفعُل، هو، المضارع", result.forms.ind_3ms[1].form, "يَكْتُبُ")
end
function tests:test_conj_with_spaces()
local result = m_ar_verb.do_generate_forms({["جذر"] = "ك ت ب", ["وزن"] = "فعَل يفعُل"}, "ar-conj")
self:equals("كتب، فعَل يفعُل، هو، الماضي", result.forms.past_3ms[1].form, "كَتَبَ")
self:equals("كتب، فعَل يفعُل، هو، المضارع", result.forms.ind_3ms[1].form, "يَكْتُبُ")
end
function tests:test_conj_passive_types()
local result_pass = m_ar_verb.do_generate_forms({[1] = "كتب<I/a~u.pass>"}, "ar-conj")
self:equals("كتب، مبني للمجهول فقط", result_pass.passive, "pass")
local result_ipass = m_ar_verb.do_generate_forms({[1] = "كتب<I/a~u.ipass>"}, "ar-conj")
self:equals("كتب، مجهول غير شخصي", result_ipass.passive, "ipass")
local result_nopass = m_ar_verb.do_generate_forms({[1] = "كتب<I/a~u.nopass>"}, "ar-conj")
self:equals("كتب، بدون مجهول", result_nopass.passive, "nopass")
self:equals("كتب، بدون مجهول، has_passive خطأ", result_nopass.has_passive, false)
end
function tests:test_conj_overrides()
local result = m_ar_verb.do_generate_forms({[1] = "كتب<I/a~u.vn:كِتَابَة>"}, "ar-conj")
self:equals("كتب، تجاوز المصدر", result.forms.vn[1].form, "كِتَابَة")
end
function tests:test_infer_radicals()
local result = m_ar_verb.infer_radicals({
headword = "كتب",
vform = "I"
})
self:equals("كتب، نوع الضعف: صحيح", result.weakness, "sound")
self:equals("كتب، حرف الجذر الأول: ك", result.rad1, "ك")
self:equals("كتب، حرف الجذر الثاني: ت", result.rad2, "ت")
self:equals("كتب، حرف الجذر الثالث: ب", result.rad3, "ب")
local U = u(0x064F) -- ḍamma
local result = m_ar_verb.infer_radicals({
headword = "قال",
vform = "I",
nonpast_vowel = U
})
self:equals("قال، نوع الضعف: أجوف", result.weakness, "hollow")
self:equals("قال، حرف الجذر الأول: ق", result.rad1, "ق")
self:equals("قال، حرف الجذر الثاني: و (مستنتج)", result.rad2, "و")
self:equals("قال، حرف الجذر الثالث: ل", result.rad3, "ل")
local result = m_ar_verb.infer_radicals({
headword = "رمى",
vform = "I"
})
self:equals("رمى، نوع الضعف: ناقص", result.weakness, "final-weak")
self:equals("رمى، حرف الجذر الأول: ر", result.rad1, "ر")
self:equals("رمى، حرف الجذر الثاني: م", result.rad2, "م")
self:equals("رمى، حرف الجذر الثالث: ي", result.rad3, "ي")
end
function tests:test_infer_participle_vocalization()
local result = m_ar_verb.infer_participle_vocalization("كاتب", "I", "sound", true)
self:equals("كاتب، تشكيل اسم الفاعل", result, "كَاتِب")
local result = m_ar_verb.infer_participle_vocalization("مكتوب", "I", "sound", false)
self:equals("مكتوب، تشكيل اسم المفعول", result, "مَكْتُوب")
local result = m_ar_verb.infer_participle_vocalization("مدرس", "II", "sound", true)
self:equals("مدرس، فعّل، تشكيل اسم الفاعل", result, "مُدَرِّس")
end
-- ═══════════════════════════════════════════════════════════
-- Tests for classify_triliteral_verb function
-- ═══════════════════════════════════════════════════════════
-- الصحيح
function tests:test_verb_classify_sound()
self:equals("كتب", m_ar_verb.classify_triliteral_verb("ك", "ت", "ب"), "صحيح سالم")
self:equals("ذهب", m_ar_verb.classify_triliteral_verb("ذ", "ه", "ب"), "صحيح سالم")
self:equals("فعل", m_ar_verb.classify_triliteral_verb("ف", "ع", "ل"), "صحيح سالم")
self:equals("مدّ", m_ar_verb.classify_triliteral_verb("م", "د", "د"), "صحيح مُضعَّف")
self:equals("شدّ", m_ar_verb.classify_triliteral_verb("ش", "د", "د"), "صحيح مُضعَّف")
self:equals("عدّ", m_ar_verb.classify_triliteral_verb("ع", "د", "د"), "صحيح مُضعَّف")
self:equals("أخذ", m_ar_verb.classify_triliteral_verb("أ", "خ", "ذ"), "صحيح مهموز الفاء")
self:equals("أكل", m_ar_verb.classify_triliteral_verb("أ", "ك", "ل"), "صحيح مهموز الفاء")
self:equals("سأل", m_ar_verb.classify_triliteral_verb("س", "أ", "ل"), "صحيح مهموز العين")
self:equals("قرأ", m_ar_verb.classify_triliteral_verb("ق", "ر", "أ"), "صحيح مهموز اللام")
self:equals("أبأ", m_ar_verb.classify_triliteral_verb("أ", "ب", "أ"), "صحيح مهموز الفاء واللام")
end
-- المعتل
function tests:test_verb_classify_weak()
self:equals("وجد", m_ar_verb.classify_triliteral_verb("و", "ج", "د"), "معتل مثال واوي")
self:equals("وقف", m_ar_verb.classify_triliteral_verb("و", "ق", "ف"), "معتل مثال واوي")
self:equals("وضأ", m_ar_verb.classify_triliteral_verb("و", "ض", "أ"), "معتل مثال واوي مهموز اللام")
self:equals("يسر", m_ar_verb.classify_triliteral_verb("ي", "س", "ر"), "معتل مثال يائي")
self:equals("يئس", m_ar_verb.classify_triliteral_verb("ي", "أ", "س"), "معتل مثال يائي مهموز العين")
self:equals("قال", m_ar_verb.classify_triliteral_verb("ق", "و", "ل"), "معتل أجوف واوي")
self:equals("صام", m_ar_verb.classify_triliteral_verb("ص", "و", "م"), "معتل أجوف واوي")
self:equals("باع", m_ar_verb.classify_triliteral_verb("ب", "ي", "ع"), "معتل أجوف يائي")
self:equals("نام", m_ar_verb.classify_triliteral_verb("ن", "و", "م"), "معتل أجوف واوي")
self:equals("دعا", m_ar_verb.classify_triliteral_verb("د", "ع", "و"), "معتل ناقص واوي")
self:equals("سما", m_ar_verb.classify_triliteral_verb("س", "م", "و"), "معتل ناقص واوي")
self:equals("رمى", m_ar_verb.classify_triliteral_verb("ر", "م", "ي"), "معتل ناقص يائي")
self:equals("بكى", m_ar_verb.classify_triliteral_verb("ب", "ك", "ي"), "معتل ناقص يائي")
-- لفيف مقرون (adjacent weak letters)
-- حرفا العلة متماثلان: لفيف مقرون مُضعَّف، وهو أخصُّ من المقرون المُجرَّد.
self:equals("ويي", m_ar_verb.classify_triliteral_verb("و", "ي", "ي"), "معتل لفيف مقرون مُضعَّف يائي")
self:equals("حوو", m_ar_verb.classify_triliteral_verb("ح", "و", "و"), "معتل لفيف مقرون مُضعَّف واوي")
-- حرفا العلة مختلفان: مقرون مُجرَّد
self:equals("حوي", m_ar_verb.classify_triliteral_verb("ح", "و", "ي"), "معتل لفيف مقرون")
self:equals("أوى", m_ar_verb.classify_triliteral_verb("أ", "و", "ي"), "معتل لفيف مقرون مهموز الفاء")
-- لفيف مفروق (separated weak letters)
self:equals("وقى", m_ar_verb.classify_triliteral_verb("و", "ق", "ي"), "معتل لفيف مفروق")
self:equals("وأى", m_ar_verb.classify_triliteral_verb("و", "أ", "ي"), "معتل لفيف مفروق مهموز العين")
-- Combined weaknesses
self:equals("أول", m_ar_verb.classify_triliteral_verb("أ", "و", "ل"), "معتل أجوف واوي مهموز الفاء")
self:equals("قوأ", m_ar_verb.classify_triliteral_verb("ق", "و", "أ"), "معتل أجوف واوي مهموز اللام")
self:equals("أيب", m_ar_verb.classify_triliteral_verb("أ", "ي", "ب"), "معتل أجوف يائي مهموز الفاء")
self:equals("جيأ", m_ar_verb.classify_triliteral_verb("ج", "ي", "أ"), "معتل أجوف يائي مهموز اللام")
self:equals("رأو", m_ar_verb.classify_triliteral_verb("ر", "أ", "و"), "معتل ناقص واوي مهموز العين")
self:equals("شأي", m_ar_verb.classify_triliteral_verb("ش", "أ", "ي"), "معتل ناقص يائي مهموز العين")
self:equals("ودد", m_ar_verb.classify_triliteral_verb("و", "د", "د"), "معتل مثال واوي مُضعَّف")
self:equals("ينن", m_ar_verb.classify_triliteral_verb("ي", "ن", "ن"), "معتل مثال يائي مُضعَّف")
self:equals("وأب", m_ar_verb.classify_triliteral_verb("و", "أ", "ب"), "معتل مثال واوي مهموز العين")
self:equals("أبب", m_ar_verb.classify_triliteral_verb("أ", "ب", "ب"), "صحيح مُضعَّف مهموز الفاء")
self:equals("أتى", m_ar_verb.classify_triliteral_verb("أ", "ت", "ي"), "معتل ناقص يائي مهموز الفاء")
self:equals("قلا", m_ar_verb.classify_triliteral_verb("ق", "ل", "و"), "معتل ناقص واوي")
self:equals("نما (و)", m_ar_verb.classify_triliteral_verb("ن", "م", "و"), "معتل ناقص واوي")
self:equals("نمى (ي)", m_ar_verb.classify_triliteral_verb("ن", "م", "ي"), "معتل ناقص يائي")
self:equals("يئس", m_ar_verb.classify_triliteral_verb("ي", "أ", "س"), "معتل مثال يائي مهموز العين")
end
-- ═══════════════════════════════════════════════════════════
-- تغطية كل الأوزان — فعل شاهد لكل وزن
-- ═══════════════════════════════════════════════════════════
-- مختصر: يولّد التصريف ويعيد صيغة الخانة المطلوبة
local function conj(root, pattern)
return m_ar_verb.do_generate_forms({["جذر"] = root, ["وزن"] = pattern}, "ar-conj")
end
local function slot(result, name)
local forms = result.forms[name]
if not forms then
return nil
end
local out = {}
for i, f in ipairs(forms) do
out[i] = f.form
end
return table.concat(out, "/")
end
-- الثلاثي المجرد: الأبواب الستة
function tests:test_conj_form_I_all_vowel_patterns()
local cases = {
-- جذر، وزن، الماضي، المضارع، الأمر
{"كتب", "فعَل يفعُل", "كَتَبَ", "يَكْتُبُ", "اُكْتُبْ"},
{"ضرب", "فعَل يفعِل", "ضَرَبَ", "يَضْرِبُ", "اِضْرِبْ"},
{"فتح", "فعَل يفعَل", "فَتَحَ", "يَفْتَحُ", "اِفْتَحْ"},
{"علم", "فعِل يفعَل", "عَلِمَ", "يَعْلَمُ", "اِعْلَمْ"},
{"كرم", "فعُل يفعُل", "كَرُمَ", "يَكْرُمُ", "اُكْرُمْ"},
{"حسب", "فعِل يفعِل", "حَسِبَ", "يَحْسِبُ", "اِحْسِبْ"},
}
for _, c in ipairs(cases) do
local root, pattern, past, pres, imp = c[1], c[2], c[3], c[4], c[5]
local r = conj(root, pattern)
self:equals(root .. "، " .. pattern .. "، الماضي", slot(r, "past_3ms"), past)
self:equals(root .. "، " .. pattern .. "، المضارع", slot(r, "ind_3ms"), pres)
self:equals(root .. "، " .. pattern .. "، الأمر", slot(r, "imp_2ms"), imp)
end
end
-- المزيد: الأوزان V–XIII
function tests:test_conj_derived_forms()
local cases = {
-- جذر، وزن، الماضي، المضارع، المصدر
{"علم", "تفعّل", "تَعَلَّمَ", "يَتَعَلَّمُ", "تَعَلُّم"},
{"عون", "تفاعل", "تَعَاوَنَ", "يَتَعَاوَنُ", "تَعَاوُن"},
{"كسر", "انفعل", "اِنْكَسَرَ", "يَنْكَسِرُ", "اِنْكِسَار"},
{"جمع", "افتعل", "اِجْتَمَعَ", "يَجْتَمِعُ", "اِجْتِمَاع"},
{"حمر", "افعلّ", "اِحْمَرَّ", "يَحْمَرُّ", "اِحْمِرَار"},
{"خرج", "استفعل", "اِسْتَخْرَجَ", "يَسْتَخْرِجُ", "اِسْتِخْرَاج"},
{"حمر", "افعالّ", "اِحْمَارَّ", "يَحْمَارُّ", "اِحْمِيرَار"},
{"عشب", "افعوعل", "اِعْشَوْشَبَ", "يَعْشَوْشِبُ", "اِعْشِيشَاب"},
{"جلذ", "افعوّل", "اِجْلَوَّذَ", "يَجْلَوِّذُ", "اِجْلِوَّاذ"},
}
for _, c in ipairs(cases) do
local root, pattern, past, pres, vn = c[1], c[2], c[3], c[4], c[5]
local r = conj(root, pattern)
self:equals(root .. "، " .. pattern .. "، الماضي", slot(r, "past_3ms"), past)
self:equals(root .. "، " .. pattern .. "، المضارع", slot(r, "ind_3ms"), pres)
self:equals(root .. "، " .. pattern .. "، المصدر", slot(r, "vn"), vn)
end
end
-- الرباعي: مجرده ومزيده
function tests:test_conj_quadriliteral()
local cases = {
{"دحرج", "فعلل", "دَحْرَجَ", "يُدَحْرِجُ", "دَحْرَجَة"},
{"دحرج", "تفعلل", "تَدَحْرَجَ", "يَتَدَحْرَجُ", "تَدَحْرُج"},
{"حرجم", "افعنلل", "اِحْرَنْجَمَ", "يَحْرَنْجِمُ", "اِحْرِنْجَام"},
{"قشعر", "افعللّ", "اِقْشَعَرَّ", "يَقْشَعِرُّ", "اِقْشِعْرَار"},
}
for _, c in ipairs(cases) do
local root, pattern, past, pres, vn = c[1], c[2], c[3], c[4], c[5]
local r = conj(root, pattern)
self:equals(root .. "، " .. pattern .. "، الماضي", slot(r, "past_3ms"), past)
self:equals(root .. "، " .. pattern .. "، المضارع", slot(r, "ind_3ms"), pres)
self:equals(root .. "، " .. pattern .. "، المصدر", slot(r, "vn"), vn)
end
end
-- الضمائر والأزمنة: نموذج كامل من «كتب»
function tests:test_conj_persons_and_moods()
local r = conj("كتب", "فعَل يفعُل")
local cases = {
{"past_1s", "كَتَبْتُ"},
{"past_2ms", "كَتَبْتَ"},
{"past_3fs", "كَتَبَتْ"},
{"past_3fp", "كَتَبْنَ"},
{"ind_1s", "أَكْتُبُ"},
{"ind_2fs", "تَكْتُبِينَ"},
{"ind_3mp", "يَكْتُبُونَ"},
{"sub_3ms", "يَكْتُبَ"},
{"juss_3ms", "يَكْتُبْ"},
{"imp_2fs", "اُكْتُبِي"},
{"imp_2mp", "اُكْتُبُوا"},
{"imp_2fp", "اُكْتُبْنَ"},
}
for _, c in ipairs(cases) do
self:equals("كتب، " .. c[1], slot(r, c[1]), c[2])
end
end
-- المبني للمجهول
function tests:test_conj_passive_forms()
local r = conj("كتب", "فعَل يفعُل")
self:equals("كتب، الماضي المجهول", slot(r, "past_pass_3ms"), "كُتِبَ")
self:equals("كتب، المضارع المجهول", slot(r, "ind_pass_3ms"), "يُكْتَبُ")
self:equals("كتب، المنصوب المجهول", slot(r, "sub_pass_3ms"), "يُكْتَبَ")
self:equals("كتب، المجزوم المجهول", slot(r, "juss_pass_3ms"), "يُكْتَبْ")
local r2 = conj("درس", "فعّل")
self:equals("درس، فعّل، الماضي المجهول", slot(r2, "past_pass_3ms"), "دُرِّسَ")
self:equals("درس، فعّل، المضارع المجهول", slot(r2, "ind_pass_3ms"), "يُدَرَّسُ")
end
-- الأفعال الشاذّة المعالَجة داخل الوحدة
function tests:test_conj_irregular_verbs()
local raa = conj("رأي", "فعَل يفعَل")
self:equals("رأى، الماضي", slot(raa, "past_3ms"), "رَأَى")
self:equals("رأى، المضارع", slot(raa, "ind_3ms"), "يَرَى")
self:equals("رأى، الأمر", slot(raa, "imp_2ms"), "رَ")
local araa = conj("رأي", "أفعل")
self:equals("أرى، الماضي", slot(araa, "past_3ms"), "أَرَى")
self:equals("أرى، المضارع", slot(araa, "ind_3ms"), "يُرِي")
local akal = conj("أكل", "فعَل يفعُل")
self:equals("أكل، الماضي", slot(akal, "past_3ms"), "أَكَلَ")
self:equals("أكل، الأمر (محذوف)", slot(akal, "imp_2ms"), "كُلْ")
local akhadh = conj("أخذ", "فعَل يفعُل")
self:equals("أخذ، الأمر (محذوف)", slot(akhadh, "imp_2ms"), "خُذْ")
-- أمر: للأمر صيغتان، المحذوفة والتامّة بعد حرف عطف
local amar = conj("أمر", "فعَل يفعُل")
self:equals("أمر، الأمر", slot(amar, "imp_2ms"), "مُرْ/اُؤْمُرْ")
-- سأل: للمجزوم والأمر صيغتان
local saal = conj("سأل", "فعَل يفعَل")
self:equals("سأل، الأمر", slot(saal, "imp_2ms"), "اِسْأَلْ/سَلْ")
self:equals("سأل، المجزوم", slot(saal, "juss_3ms"), "يَسْأَلْ/يَسَلْ")
-- حيّ/حيي: الإدغام والفكّ
local hayy = conj("حيي", "فعِل يفعَل")
self:equals("حيّ، الماضي (مدغم ومفكوك)", slot(hayy, "past_3ms"), "حَيَّ/حَيِيَ")
self:equals("حيّ، المضارع", slot(hayy, "ind_3ms"), "يَحْيَا")
end
-- الإدغام بالتاء (var:short/long) وصيغ الإدغام المختصرة (reduced)
function tests:test_conj_variants_and_reduced()
local short = m_ar_verb.do_generate_forms({[1] = "حيي<I/i~a.var:short>"}, "ar-conj")
self:equals("حيي، var:short، الماضي", slot(short, "past_3ms"), "حَيَّ")
local long = m_ar_verb.do_generate_forms({[1] = "حيي<I/i~a.var:long>"}, "ar-conj")
self:equals("حيي، var:long، الماضي", slot(long, "past_3ms"), "حَيِيَ")
-- اتّخذ: افتعل من «أخذ» بإبدال الهمزة تاءً وإدغامها
local ittakhadha = m_ar_verb.do_generate_forms({[1] = "اتخذ<VIII.reduced>"}, "ar-conj")
self:equals("اتّخذ، الماضي", slot(ittakhadha, "past_3ms"), "اِتَّخَذَ")
self:equals("اتّخذ، المضارع", slot(ittakhadha, "ind_3ms"), "يَتَّخِذُ")
self:equals("اتّخذ، المصدر", slot(ittakhadha, "vn"), "اِتِّخَاذ")
-- ادّارأ: تفاعل مدغم (اِدَّارَأَ عوض تَدَارَأَ)
local iddaaraa = m_ar_verb.do_generate_forms({[1] = "ادارأ<VI.reduced>"}, "ar-conj")
self:equals("ادّارأ، الماضي", slot(iddaaraa, "past_3ms"), "اِدَّارَأَ")
-- اسطاع: استفعل محذوف التاء
local istaa = m_ar_verb.do_generate_forms({[1] = "اسطاع<X.reduced>"}, "ar-conj")
self:equals("اسطاع، الماضي", slot(istaa, "past_3ms"), "اِسْطَاعَ")
self:equals("اسطاع، المضارع", slot(istaa, "ind_3ms"), "يَسْطِيعُ")
end
-- المعتل: المثال والناقص واللفيف
function tests:test_conj_weak_extended()
local cases = {
-- جذر، وزن، الماضي، المضارع، الأمر، اسم الفاعل
{"وعد", "فعَل يفعِل", "وَعَدَ", "يَعِدُ", "عِدْ", "وَاعِد"}, -- مثال واوي
{"دعو", "فعَل يفعُل", "دَعَا", "يَدْعُو", "اُدْعُ", "دَاعٍ"}, -- ناقص واوي
{"شوي", "فعَل يفعِل", "شَوَى", "يَشْوِي", "اِشْوِ", "شَاوٍ"}, -- ناقص يائي
{"وقي", "فعَل يفعِل", "وَقَى", "يَقِي", "قِ", "وَاقٍ"}, -- لفيف مفروق
}
for _, c in ipairs(cases) do
local root, pattern = c[1], c[2]
local r = conj(root, pattern)
self:equals(root .. "، الماضي", slot(r, "past_3ms"), c[3])
self:equals(root .. "، المضارع", slot(r, "ind_3ms"), c[4])
self:equals(root .. "، الأمر", slot(r, "imp_2ms"), c[5])
self:equals(root .. "، اسم الفاعل", slot(r, "ap"), c[6])
end
end
-- حواشي على حركات الماضي والمضارع، مثل <I/a[نادر]~u>.
-- كانت ترمي خطأ لوا: verify_vowel كانت تقارن الكائن نفسه لا قيمته.
function tests:test_conj_vowel_footnotes()
local a = m_ar_verb.do_generate_forms({[1] = "كتب<I/a[نادر]~u>"}, "ar-conj")
self:equals("كتب، حاشية على حركة الماضي", a.forms.past_3ms[1].form, "كَتَبَ")
self:equals("كتب، حاشية على حركة الماضي، المضارع", a.forms.ind_3ms[1].form, "يَكْتُبُ")
local b = m_ar_verb.do_generate_forms({[1] = "كتب<I/a~u[نادر]>"}, "ar-conj")
self:equals("كتب، حاشية على حركة المضارع", b.forms.past_3ms[1].form, "كَتَبَ")
-- أجوف: يمرّ عبر infer_radicals، وهو موضع الخطأ الأصلي
local c = m_ar_verb.do_generate_forms({[1] = "قال<I/a[نادر]~u>"}, "ar-conj")
self:equals("قال، حاشية على حركة الماضي", c.forms.past_3ms[1].form, "قَالَ")
end
-- q/qq/l/ll أُزيلت لأنها تستدعي [[وحدة:pron qualifier]] غير الموجودة في ويكاموس العربي.
-- المطلوب الآن خطأ واضح في التحليل، لا خطأ لوا.
function tests:test_conj_qualifier_modifiers_rejected()
local ok, err = pcall(m_ar_verb.do_generate_forms,
{[1] = "كتب<I/a~u.vn:كِتَابَة<q:نادر>>"}, "ar-conj")
local msg = tostring(err)
self:equals("q: مرفوضة", ok, false)
self:equals("q: رسالة خطأ واضحة", not not msg:find("Unrecognized prefix"), true)
self:equals("q: لا تستدعي pron qualifier", not not msg:find("pron qualifier"), false)
end
return tests
9sftsnscv3pavanq861gjxkzljz61ml
نقاش ويكاموس:ويكي بيانات
5
240649
1158996
1158911
2026-09-10T12:36:18Z
إسلام
12622
/* بلاغ من أداة مراجعة المعاني: جَاجَ (L1544958) */ قسم جديد
1158996
wikitext
text/x-wiki
{{رأس صفحة نقاش}}
== بلاغ من أداة مراجعة المعاني: حَلَّى (L1534604) ==
'''حَلَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534604|18بك|ويكي بيانات: L1534604]] [[ملف:Wiktionary-logo.svg|وصلة=حَلَّى|18بك|صفحة ويكاموس]] · الجذر: حلو · ([[toolforge:ar-senses/review/L1534604|رابط المُفردة في الأداة]])
إبلاغ من الزميل {{مس|رِفْد}}: ''لا يمكن نشرها في ويكاموس عند الضغط على زر النشر يظهر: "خطأ: الصفحة موجودة بالفعل".'' --[[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 11:27، 27 يوليو 2026 (ت ع م)
:شكرا لك @[[مستخدم:رِفْد|رِفْد]] على الإبلاغ. المشكلة في الفعل حَلَّى (وأفعال آخرين) أَنَّه يُوَلَّدُ من جذرين: ح-ل-ي و ح-ل-و. في ويكي بيانات توجد وحدتان معجميتان، واحدة لكل فعل، لكن في ويكاموس لا يُمكن إنشاء صفحتين بنفس الاسم. سأفكر في حل لهذه المشكلة وأوافيك بالجديد. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 11:28، 27 يوليو 2026 (ت ع م)
::حالة أخرى حيث يشترك جذران في نفس صيغة الفعل:
::* جذر ت-ل-و على وزن تفعّل => [[تَتَلَّى]] ([https://ar-senses.toolforge.org/review/L1533461 رابط المُفردة في الأداة]).
::* جذر ت-ل-ي على وزن تفعّل => [[تَتَلَّى]]
::[[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 11:42، 27 يوليو 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِسْتَجَاشَ (L1534157) ==
'''اِسْتَجَاشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534157|18بك|ويكي بيانات: L1534157]] [[ملف:Wiktionary-logo.svg|وصلة=اِسْتَجَاشَ|18بك|صفحة ويكاموس]] · الجذر: جيش · ([[toolforge:ar-senses/review/L1534157|رابط المُفردة في الأداة]])
المعنى الثاني غير موجود في المصدر في صفحة المفردة (ص=603) والحديث الموجود في صفحة 115 غير مفسر بهذا المعنى أيضا. --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:40، 27 يوليو 2026 (ت ع م)
<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. -->
:{{ر|أبو هشام}} بخصوص المعنى الثاني، رجعتُ إلى ص=603 ووجدتُ المعنى حسب الوارد في الأداة: {{اقتباس مضمن|استجاش الأمير من مكان كذا: طلب جيشًا وجمعه. '''و- ت القدر: غلت.'''}}
:{{ر|Michel Bakni}} بخصوص المعنى الثالث (ص=115)، يبدو المعنى صحيحًا لكن الأداة استَنْبَطَتْهُ من مثال وارد في المعجم لا من تعريف للكلمة، ما رأيك؟
:*الاقتباس من المصدر: {{اقتباس مضمن|فَمَرَّ الْجَيْشُ عَلَى غَطَفَانَ '''فَاسْتَجَاشُوهُمْ''' عَلَى بَنِي سُليم، فَهَزَمَتْ بَنُو سُلَيم جيشَ النُّعْمَانِ}}
:*تعريف المعنى كما استخرجَتْهُ الأداة من النص السابق: {{اقتباس مضمن|اِسْتَجَاشَ القومَ على فلان: استنفرهم وحرّضهم عليه}}
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:23، 6 أغسطس 2026 (ت ع م).
::نعم أتفق مع هذا الطرح. [[مستخدم:Michel Bakni|Michel Bakni]] ([[نقاش المستخدم:Michel Bakni|نقاش]]) 14:25، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: جَوَّهَ (L1534145) ==
'''جَوَّهَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534145|18بك|ويكي بيانات: L1534145]] [[ملف:Wiktionary-logo.svg|وصلة=جَوَّهَ|18بك|صفحة ويكاموس]] · الجذر: جوه · ([[toolforge:ar-senses/review/L1534145|رابط المُفردة في الأداة]])
المعنى بهذا التصريف خطأ، لم أعثر على جوّه فلانا أي جعله وجيها، ولم أجد جوّه السقاء أي رقعه بل وجدت جواه في معجم متن اللغة. --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:48، 27 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك، المشكلة هي أن الأداة أخذت الجذر (جَوَهَ) وألحقت به معنى الفرع (وجَّهَ أو أَوْجَهَ، كحال: أَوْجَهْتُهُ أنا ووَجَّهْتُهُ)، سوف نعمل على إصلاحها.
:{{ر|ForzaGreen}} خطوات قادمة:
:#يجب أن نتوثَّق من أن الأداة تُميِّزُ الجذر عن الفرع. في هذه الحالة، أخذت الأداة الجذر ('''جَوَهَ''') وشكَّلتهُ ('''جَوَّهَ''')، ثم ألحقَتْ به معنى خاطئًا للمشتق.
:#بناءً على ما نراهُ هنا وقي حالات أخرى، نحتاج إلى '''خيار للمراجع لتعديل عنوان الصفحة'''، فلو أمكنهُ تبديل العنوان في هذه الحالة إلى '''وجَّهَ''' أو '''أَوْجَهَ''' لكان صحيحًا.
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 13:54، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: سَدَسَ (L1547049) ==
'''سَدَسَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1547049|18بك|ويكي بيانات: L1547049]] [[ملف:Wiktionary-logo.svg|وصلة=سَدَسَ|18بك|صفحة ويكاموس]] · الجذر: سدس · ([[toolforge:ar-senses/review/L1547049|رابط المُفردة في الأداة]])
المعنى الثاني مكرر، استبدلته وأضفت مصادر. --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:04، 28 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك ونعمل على التوثّق من مسألة تكرار المعاني --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 13:58، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: تَسَدَّى (L1536864) ==
'''تَسَدَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1536864|18بك|ويكي بيانات: L1536864]] [[ملف:Wiktionary-logo.svg|وصلة=تَسَدَّى|18بك|صفحة ويكاموس]] · الجذر: سدي · ([[toolforge:ar-senses/review/L1536864|رابط المُفردة في الأداة]])
خلل في رقم صفحة القاموس المحيط، ولا توجد شواهد قوية على المعنى الأول، أظن أن المفردة بحاجة لمراجعة وإعادة ترتيب المعاني.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:44، 29 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} متفّق، {{اقتباس مضمن|والحائكُ يُسَدِّي الثَّوْبَ ويَتَسَدّاه}} أي يحيكه لنفسه.
:{{ر|ForzaGreen}} يبدو أن النموذج اختلَطَ عليه الأمر أثناء دمج المعاني، ربما خصوصًا من لسان العرب ({{اقتباس مضمن|والحائكُ يُسَدِّي الثَّوْبَ ويَتَسَدّاه}})، فخرجَ بالمعنى المبتدع: {{اقتباس مضمن|تَسَدَّى الثوبَ: أقام سَداه لنفسه}}، وليس له مثيل في المصادر.
:'''الخطوات القادمة المقترحة''': أشتَبِهُ في أن النموذج يفقد موثوقيته حين دَمْجَ المعاني من عددٍ كبير من المصادر (5 مصادر في هذه الحالة)، '''أقترح وَضْعَ حدّ أعلى للمصادر التي نستخدمها في استخراج المعنى، ربما 3 للوقت الحاضر'''.
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:10، 6 أغسطس 2026 (ت ع م).
::وضع حد للمصادر آليا قد يحرم المفردة من المصدر الأقوى والأدق. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:30، 6 أغسطس 2026 (ت ع م)
:{{أصلح}} الخلل في رقم صفحة القاموس المحيط، لهذه المُفردة ولمفردات أخرى. يبدو أن المشكل كان سببه عشوائية النموذج اللغوي، إذ كان يُغيِّر رقم الصفحة في أقل من 1% من الحالات. عدّلتُ أداة توليد المعاني حتى لا يتكرر الخطأ.
:بالنسبة للمصادر، أُفضل الإبقاء عليها جميعا. سنُجرب مع {{مس|عباد ديرانية}} تعديل تعليمات النموذج لتحسين المُخْرَجات ولإصلاح مشاكل أخرى، لا سيما المعاني المُكررة. -- [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 23:47، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَسَافَدَ (L1497488) ==
'''تَسَافَدَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1497488|18بك|ويكي بيانات: L1497488]] [[ملف:Wiktionary-logo.svg|وصلة=تَسَافَدَ|18بك|صفحة ويكاموس]] · الجذر: سفد · ([[toolforge:ar-senses/review/L1497488|رابط المُفردة في الأداة]])
اكتفيت بالمعنى الأول بسبب التكرار.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 11:51، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} ملاحظة للعمل على تكرار المعاني، المعنى 1 و2 متماثلان والثاني هو الأوضح للمستخدم المعاصر --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:13، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: سَافَحَ (L1487289) ==
'''سَافَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1487289|18بك|ويكي بيانات: L1487289]] [[ملف:Wiktionary-logo.svg|وصلة=سَافَحَ|18بك|صفحة ويكاموس]] · الجذر: سفح · ([[toolforge:ar-senses/review/L1487289|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لأنه مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:42، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} حالة تكرار أخرى مؤكدة في المعنى 1 والمعنى 2 --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:14، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: تَرَأَّمَ (L1535813) ==
'''تَرَأَّمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535813|18بك|ويكي بيانات: L1535813]] [[ملف:Wiktionary-logo.svg|وصلة=تَرَأَّمَ|18بك|صفحة ويكاموس]] · الجذر: رأم · ([[toolforge:ar-senses/review/L1535813|رابط المُفردة في الأداة]])
دمجت المعنيين وصححت رقم الجزء والصفحة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:58، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} حالة تكرار مؤكّدة بين المعنى 1 و2، كما يأتي:
:#{{اقتباس مضمن|تَرَأَّمَ الشيءَ: أحبَّه وألِفَه وعطف عليه وترحم عليه}}
:#{{اقتباس مضمن|تَرَأَّمَ الصبيَّ: ترحَّم عليه}}
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:26، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: جَاوَى (L1534151) ==
'''جَاوَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534151|18بك|ويكي بيانات: L1534151]] [[ملف:Wiktionary-logo.svg|وصلة=جَاوَى|18بك|صفحة ويكاموس]] · الجذر: جوي · ([[toolforge:ar-senses/review/L1534151|رابط المُفردة في الأداة]])
خطأ: الصفحة 'جَاوَى' موجودة بالفعل <!-- يظهر هكذا: خطأ: الصفحة 'جَاوَى' موجودة بالفعل. --> --[[مستخدم:رِفْد|رِفْد]] ([[نقاش المستخدم:رِفْد|نقاش]]) 22:15، 30 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} أتقصد أنكَ أنشأتَ الصفحة سابقًا عبر الأداة ثم ظهرت لك مرة أخرى في أداة مراجعة المعاني؟ --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:27، 6 أغسطس 2026 (ت ع م).
::مرحبا {{ر|عباد ديرانية}} أعتقد أن الخلل هو وجود صفحة مكررة في ويكي بيانات يلزم دمجها، تحياتي لك. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:59، 6 أغسطس 2026 (ت ع م)
:::+أضيفُ الاقتراح الممتاز '''إضافة تنبيهٍ بالخط الأحمر إلى الأداة في حال لو أن الصفحة أُنْشِأَتْ وحُذِفَتْ سابقًا''' تنبيهًا للمستخدم --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 16:07، 6 أغسطس 2026 (ت ع م).
::::هذا المشكل تكرر مرات عديدة (انظر النقاش أعلاه عن الفعل '''حَلَّى''') والسبب هو المُفردات التي تشترك في نفس الجذر. حاليا لا يوجد حل تقني للمسألة، لكنها في بالي وسأفكر في حل. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 22:48، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَجَاذَى (L1533824) ==
'''تَجَاذَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533824|18بك|ويكي بيانات: L1533824]] [[ملف:Wiktionary-logo.svg|وصلة=تَجَاذَى|18بك|صفحة ويكاموس]] · الجذر: جذي · ([[toolforge:ar-senses/review/L1533824|رابط المُفردة في الأداة]])
خطأ: الصفحة 'تَجَاذَى' موجودة بالفعل <!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:رِفْد|رِفْد]] ([[نقاش المستخدم:رِفْد|نقاش]]) 22:19، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} هذه ملاحظة متكرّرة من المستخدمين، يظهر أننا نحتاجُ إلى '''تحديث الأداة بوتيرة يومية لإزالة الصفحات المنشأة سابقًا'''، إلا لو كان هذا خطأً تقنيًا مختلفًا يُسبِّبُ التكرار --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 15:48، 6 أغسطس 2026 (ت ع م).
::كنت أصلحت هذه الكلمة مع كلمات أخرى لكن لم أصلح بعد مصدر الخطأ، وهو الأفعال التي لها جذور مختلفة لكنها تشترك في نفس الصيغة. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 17:51، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَجْذَى (L1533823) ==
'''أَجْذَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533823|18بك|ويكي بيانات: L1533823]] [[ملف:Wiktionary-logo.svg|وصلة=أَجْذَى|18بك|صفحة ويكاموس]] · الجذر: جذي · ([[toolforge:ar-senses/review/L1533823|رابط المُفردة في الأداة]])
خطأ: الصفحة 'أَجْذَى' موجودة بالفعل <!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:رِفْد|رِفْد]] ([[نقاش المستخدم:رِفْد|نقاش]]) 22:20، 30 يوليو 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: زَأْزَأَ (L1536388) ==
'''زَأْزَأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1536388|18بك|ويكي بيانات: L1536388]] [[ملف:Wiktionary-logo.svg|وصلة=زَأْزَأَ|18بك|صفحة ويكاموس]] · الجذر: زأزأ · ([[toolforge:ar-senses/review/L1536388|رابط المُفردة في الأداة]])
حذفت المعنى الخامس لأنه مزيد بتاء في المراجع.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:35، 4 أغسطس 2026 (ت ع م)
:{{ر|Michel Bakni}} المعنى الخامس مزيدٌ بتاء التأنيث، فهل نُنْشِئُ له صفحةً منفصلةً برأيك أم نضيفه إلى ذات الصفحة مع تحويلة؟
:شرح المعنى الخامس: {{اقتباس مضمن|زَأْزَأَتِ المرأةُ: مشت وحرّكت أعطافها كمشية القِصار}}
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:33، 6 أغسطس 2026 (ت ع م).
::نعم، يلزم إنشاء صفحة لكل فعل بكل تصريف، هذا التصريف: المؤنث المفرد الغائب. [[مستخدم:Michel Bakni|Michel Bakni]] ([[نقاش المستخدم:Michel Bakni|نقاش]]) 14:36، 6 أغسطس 2026 (ت ع م)
:::{{ر|ForzaGreen}} إذًا يلزمنا التوثّق من تمييز النموذج للمؤنّث وتخصيصه صفحة مستقلّة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:54، 6 أغسطس 2026 (ت ع م).
::::أنا رأيي كل المعاني والأمثلة تبقى في صفحة الفعل الرئيسية، والصيغ المُصرفة تحيل إلى الصفحة الرئيسية. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 15:06، 6 أغسطس 2026 (ت ع م)
::::متّفق مع وائل هنا بالواقع، الأفضل هو تخفيف الإحالات إن أمكن وجَمْع تصريفات المذكر والمؤنث والعدد بصفحة واحدة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 15:52، 6 أغسطس 2026 (ت ع م).
:::::لكن الذي يراجع القوالب يفهم أن لكل تصريف صفحة خاصة به لذلك أنا أتفق مع الزميل ميشيل على إنشاء صفحة لكل تصريف، تحياتي لكم. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:10، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَزْعَلَ (L1476504) ==
'''أَزْعَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1476504|18بك|ويكي بيانات: L1476504]] [[ملف:Wiktionary-logo.svg|وصلة=أَزْعَلَ|18بك|صفحة ويكاموس]] · الجذر: زعل · ([[toolforge:ar-senses/review/L1476504|رابط المُفردة في الأداة]])
دمجت المعنى الأول والثالث لأن المعنى الثالث مكرر عن الأول.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 10:04، 4 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك ونعمل على معالجة مسألة المعاني المُكرَّرة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:34، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: زَعِلَ (L1487695) ==
'''زَعِلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1487695|18بك|ويكي بيانات: L1487695]] [[ملف:Wiktionary-logo.svg|وصلة=زَعِلَ|18بك|صفحة ويكاموس]] · الجذر: زعل · ([[toolforge:ar-senses/review/L1487695|رابط المُفردة في الأداة]])
المعنى الأول (مرح) غير موجود في المراجع، والمعنى الثالث بحاجة إلى تدقيق، تحتاج المفردة إلى مراجعة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 10:41، 4 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} من معجم العين: {{اقتباس مضمن|الزَّعِل: النشيط '''الأشر'''. زَعِلَ يَزْعَلُ زَعَلًا.}}، الأشر هنا بمعنى المرح (مصدر [https://www.islamweb.net/ar/library/content/122/137/%D8%A3%D8%B4%D8%B1 من لسان العرب]).
:{{ر|ForzaGreen}} المعنى الثالث فيه اختلاطٌ بين معانٍ عِدّة، مثل: {{اقتباس مضمن|والزعل: '''المتضور جوعا'''}} (الجوهري) و{{اقتباس مضمن|الزَّعَلُ '''كالعَلَزِ مِنَ المَرَض'''}} (لسان العرب)، والمعنى في الأداة جاءَ: {{اقتباس مضمن|زَعِلَ من المرض أو الجوع: تضوّر وتلوّى وقلِق فلم يستقر}}.
:'''الخطوات القادمة المقترحة''': أشتبه أن النموذج اختلط عليه دمج المعنى عبر 5 مصادر، والأفضل والأسهل للمراجع (فمن الصعب جدًا تقصّي 5 مراجع مختلفة) أن '''نضعَ حدًا بين مصدرَيْن إلى ثلاثة مصادر للمعنى الواحد''' --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:48، 6 أغسطس 2026 (ت ع م).
::نعم، في الحقيقة تحتوي بعض المفردات على مراجع كثيرة وأتفق معك على الاستشهاد بمرجعين أو ثلاث بأقصى حد لكن لو يكون انتقاء المراجع يدويا أفضل لاختيار الأنسب والأقرب إلا إذا كان الاختيار الآلي قادرا على انتقاء المرجع الأنسب أو الأقرب أو الأدق. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:21، 6 أغسطس 2026 (ت ع م)
:::إشارة {{ر|عباد ديرانية}} أرجو مراجعة تقليل المراجع آليا فقد تحرم الأداةُ المفردةَ من المراجع الأدق وتضع المراجع الأبعد. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:23، 6 أغسطس 2026 (ت ع م)
::::{{ر|أبو هشام}} لا بأس بذلك، لكن إن تركنا للمُرَاجِعِ اختيار المصادر الأدق فهذا يعني أن عليهم مراجعة 5 - 6 مصادر في بعض الحالات، فما هو الأفضل بالنسبة لك بين هذه الخيارات؟ أهو انتقاء المصادر الأفضل يدويًا أم تقليل عدد المصادر التي وجبت مراجعتها؟ --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 15:51، 6 أغسطس 2026 (ت ع م).
:::::{{ر|عباد ديرانية}} أميل إلى الانتقاء اليدوي أو البشري دون تقليل للمصادر فالمراجِع قادر على انتقاء المصدر الأنسب للمفردة، وإن كان للزملاء رأي آخر فلا أعترض، تحياتي. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:15، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَلَكَ (L1502490) ==
'''أَلَكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1502490|18بك|ويكي بيانات: L1502490]] [[ملف:Wiktionary-logo.svg|وصلة=أَلَكَ|18بك|صفحة ويكاموس]] · الجذر: ألك · ([[toolforge:ar-senses/review/L1502490|رابط المُفردة في الأداة]])
حذفت المرجع الأخير من المعنى الثاني لأن فيه خطأ فقد استُشهد بصفحة 132 من معجم متن اللغة وفيها (أَلَكَ لَجَأٌ يَا فلَان) وهو استشهاد خاطئ لأن (ألك) هنا استفهام وليست فعل.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:33، 5 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك وسوف نعمل على زيادة دقة ضبط المعاني المتقاربة بالأداة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:49، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: اِبْتَسَطَ (L1533014) ==
'''اِبْتَسَطَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533014|18بك|ويكي بيانات: L1533014]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْتَسَطَ|18بك|صفحة ويكاموس]] · الجذر: بسط · ([[toolforge:ar-senses/review/L1533014|رابط المُفردة في الأداة]])
غير موثقة، لا يوجد فيها مصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:04، 5 أغسطس 2026 (ت ع م)
:{{ر|ForzaGreen}} حالة غريبةٌ ليس فيه أي مصدر للمعنى المستخرج! --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:49، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: أَبْشَكَ (L1533037) ==
'''أَبْشَكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533037|18بك|ويكي بيانات: L1533037]] [[ملف:Wiktionary-logo.svg|وصلة=أَبْشَكَ|18بك|صفحة ويكاموس]] · الجذر: بشك · ([[toolforge:ar-senses/review/L1533037|رابط المُفردة في الأداة]])
هذه اللفظة بحاجة لمراجعة فلها عدة معان.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:50، 6 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} هل لكَ أن تُوضِحَ المقصود؟ لم أجد كلمة أبشك في المرجع أصلًا للأسف --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:52، 6 أغسطس 2026 (ت ع م).
::{{ر|عباد ديرانية}} وجدت هذا ('''أبشك''' الكلام: كذب فيه: تخرص فيه كاذبًا.) في معجم متن اللغة ج=1 ص=299، وهذا أيضا (وبَشَكَ الْكَلَامَ يَبْشُكه بَشْكًا و'''أبشَكه''': تَخَرَّصهُ كَاذِبًا،) في لسان العرب ج=10 ص=400، ولم أجد أن معناها '''أسرع'''، تحياتي. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:43، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَاطَأَ (L1496404) ==
'''بَاطَأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1496404|18بك|ويكي بيانات: L1496404]] [[ملف:Wiktionary-logo.svg|وصلة=بَاطَأَ|18بك|صفحة ويكاموس]] · الجذر: بطأ · ([[toolforge:ar-senses/review/L1496404|رابط المُفردة في الأداة]])
لا يوجد التصريف في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:43، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَبْطَحَ (L1533063) ==
'''أَبْطَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533063|18بك|ويكي بيانات: L1533063]] [[ملف:Wiktionary-logo.svg|وصلة=أَبْطَحَ|18بك|صفحة ويكاموس]] · الجذر: بطح · ([[toolforge:ar-senses/review/L1533063|رابط المُفردة في الأداة]])
غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:47، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَطَّحَ (L1533066) ==
'''بَطَّحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533066|18بك|ويكي بيانات: L1533066]] [[ملف:Wiktionary-logo.svg|وصلة=بَطَّحَ|18بك|صفحة ويكاموس]] · الجذر: بطح · ([[toolforge:ar-senses/review/L1533066|رابط المُفردة في الأداة]])
هل هي بطَح أم بطّح؟<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:48، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَطْرَقَ (L1533070) ==
'''تَبَطْرَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533070|18بك|ويكي بيانات: L1533070]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَطْرَقَ|18بك|صفحة ويكاموس]] · الجذر: بطرق · ([[toolforge:ar-senses/review/L1533070|رابط المُفردة في الأداة]])
هذا الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:58، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَهُؤَ (L1545462) ==
'''بَهُؤَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1545462|18بك|ويكي بيانات: L1545462]] [[ملف:Wiktionary-logo.svg|وصلة=بَهُؤَ|18بك|صفحة ويكاموس]] · الجذر: بهأ · ([[toolforge:ar-senses/review/L1545462|رابط المُفردة في الأداة]])
معناها (أنس) كما في لسان العرب ج=1 ص=35 ومعجم متن اللغة ج=1 ص=353.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:29، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَاهَتَ (L1533268) ==
'''تَبَاهَتَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533268|18بك|ويكي بيانات: L1533268]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَاهَتَ|18بك|صفحة ويكاموس]] · الجذر: بهت · ([[toolforge:ar-senses/review/L1533268|رابط المُفردة في الأداة]])
حسنتُ المعنى وأضفت مصدرين.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:01، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَعِرَ (L1544067) ==
'''بَعِرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544067|18بك|ويكي بيانات: L1544067]] [[ملف:Wiktionary-logo.svg|وصلة=بَعِرَ|18بك|صفحة ويكاموس]] · الجذر: بعر · ([[toolforge:ar-senses/review/L1544067|رابط المُفردة في الأداة]])
'''[[بَعِرَ]]''' الجمل بالكسر صار بعيرا كما في القاموس المحيط ص=352.
المفردة (بَعَرَ) وهي موجودة في المشروع '''[[بَعَرَ]]''' فيلزم تحديثها أو حذفها لأنها خاطئة انظر القاموس المحيط ص=694 وإنشاء صفحة جديدة ببيانات صحيحة هي البيانات الموجودة في الأداة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:31، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَعَّقَ (L1533113) ==
'''بَعَّقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533113|18بك|ويكي بيانات: L1533113]] [[ملف:Wiktionary-logo.svg|وصلة=بَعَّقَ|18بك|صفحة ويكاموس]] · الجذر: بعق · ([[toolforge:ar-senses/review/L1533113|رابط المُفردة في الأداة]])
هل هي بَعَّقَ بالتشديد أم بَعَقَ بالتخفيف؟<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:02، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَغْزَلَ (L1533126) ==
'''تَبَغْزَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533126|18بك|ويكي بيانات: L1533126]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَغْزَلَ|18بك|صفحة ويكاموس]] · الجذر: بغزل · ([[toolforge:ar-senses/review/L1533126|رابط المُفردة في الأداة]])
المعنى الصحيح '''تبختر''' وله شواهد في أربعة معاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:13، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَقَّمَ (L1533154) ==
'''بَقَّمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533154|18بك|ويكي بيانات: L1533154]] [[ملف:Wiktionary-logo.svg|وصلة=بَقَّمَ|18بك|صفحة ويكاموس]] · الجذر: بقم · ([[toolforge:ar-senses/review/L1533154|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:44، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَقَّمَ (L1533153) ==
'''تَبَقَّمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533153|18بك|ويكي بيانات: L1533153]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَقَّمَ|18بك|صفحة ويكاموس]] · الجذر: بقم · ([[toolforge:ar-senses/review/L1533153|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:50، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَكِئَ (L1543356) ==
'''بَكِئَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543356|18بك|ويكي بيانات: L1543356]] [[ملف:Wiktionary-logo.svg|وصلة=بَكِئَ|18بك|صفحة ويكاموس]] · الجذر: بكأ · ([[toolforge:ar-senses/review/L1543356|رابط المُفردة في الأداة]])
حذفت المعنى الأول لأنه غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:13، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْتَلَتَ (L1533174) ==
'''اِبْتَلَتَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533174|18بك|ويكي بيانات: L1533174]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْتَلَتَ|18بك|صفحة ويكاموس]] · الجذر: بلت · ([[toolforge:ar-senses/review/L1533174|رابط المُفردة في الأداة]])
المفردة غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:35، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَلْدَحَ (L1533193) ==
'''تَبَلْدَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533193|18بك|ويكي بيانات: L1533193]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَلْدَحَ|18بك|صفحة ويكاموس]] · الجذر: بلدح · ([[toolforge:ar-senses/review/L1533193|رابط المُفردة في الأداة]])
أضفت المعنى الثاني، لم تستخرجه الأداة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:54، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْلَنْدَكَ (L1533194) ==
'''اِبْلَنْدَكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533194|18بك|ويكي بيانات: L1533194]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْلَنْدَكَ|18بك|صفحة ويكاموس]] · الجذر: بلدك · ([[toolforge:ar-senses/review/L1533194|رابط المُفردة في الأداة]])
المعنى خاطئ، والمفردة غير موجودة في المصدر.
:المعنى الصحيح ('''اتسع''') موجود في أربعة معاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:00، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَلَّرَ (L1533196) ==
'''تَبَلَّرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533196|18بك|ويكي بيانات: L1533196]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَلَّرَ|18بك|صفحة ويكاموس]] · الجذر: بلر · ([[toolforge:ar-senses/review/L1533196|رابط المُفردة في الأداة]])
إملاء المفردة خاطئ، والصحيح ('''تَرَبَّل''') كما في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:08، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَقَّعَ (L1533145) ==
'''بَقَّعَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533145|18بك|ويكي بيانات: L1533145]] [[ملف:Wiktionary-logo.svg|وصلة=بَقَّعَ|18بك|صفحة ويكاموس]] · الجذر: بقع · ([[toolforge:ar-senses/review/L1533145|رابط المُفردة في الأداة]])
حذفت المعنى الرابع لأنه ورد بالتخفيف.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:18، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِنْبَقَّ (L1533147) ==
'''اِنْبَقَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533147|18بك|ويكي بيانات: L1533147]] [[ملف:Wiktionary-logo.svg|وصلة=اِنْبَقَّ|18بك|صفحة ويكاموس]] · الجذر: بقق · ([[toolforge:ar-senses/review/L1533147|رابط المُفردة في الأداة]])
المعنى خاطئ ولا شواهد عليه في المعاجم والمفردة الموجودة ('''انبعق''') وليس انبق.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:38، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَلَعَ (L1480240) ==
'''بَلَعَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1480240|18بك|ويكي بيانات: L1480240]] [[ملف:Wiktionary-logo.svg|وصلة=بَلَعَ|18بك|صفحة ويكاموس]] · الجذر: بلع · ([[toolforge:ar-senses/review/L1480240|رابط المُفردة في الأداة]])
خطأ في التشكيل فالفعل بَلِعَ وليس بَلَعَ كما في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:34، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْتَلَقَ (L1533220) ==
'''اِبْتَلَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533220|18بك|ويكي بيانات: L1533220]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْتَلَقَ|18بك|صفحة ويكاموس]] · الجذر: بلق · ([[toolforge:ar-senses/review/L1533220|رابط المُفردة في الأداة]])
لم أجد المفردة في المعاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:06، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَلُقَ (L1543358) ==
'''بَلُقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543358|18بك|ويكي بيانات: L1543358]] [[ملف:Wiktionary-logo.svg|وصلة=بَلُقَ|18بك|صفحة ويكاموس]] · الجذر: بلق · ([[toolforge:ar-senses/review/L1543358|رابط المُفردة في الأداة]])
المفردة بالكسر وليس بالضم، انظر '''[[بَلِقَ]]'''.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:52، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْذَارَّ (L1534290) ==
'''اِحْذَارَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534290|18بك|ويكي بيانات: L1534290]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْذَارَّ|18بك|صفحة ويكاموس]] · الجذر: حذر · ([[toolforge:ar-senses/review/L1534290|رابط المُفردة في الأداة]])
خلل في صندوق المعلومات.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:49، 9 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَاتَنَ (L1534214) ==
'''تَحَاتَنَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534214|18بك|ويكي بيانات: L1534214]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَاتَنَ|18بك|صفحة ويكاموس]] · الجذر: حتن · ([[toolforge:ar-senses/review/L1534214|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لأنه مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 12:31، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَتَنَ (L1534213) ==
'''اِحْتَتَنَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534213|18بك|ويكي بيانات: L1534213]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَتَنَ|18بك|صفحة ويكاموس]] · الجذر: حتن · ([[toolforge:ar-senses/review/L1534213|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 12:37، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَاتَّ (L1496477) ==
'''تَحَاتَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1496477|18بك|ويكي بيانات: L1496477]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَاتَّ|18بك|صفحة ويكاموس]] · الجذر: حتت · ([[toolforge:ar-senses/review/L1496477|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:36، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْزَوْزَى (L1534387) ==
'''اِحْزَوْزَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534387|18بك|ويكي بيانات: L1534387]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْزَوْزَى|18بك|صفحة ويكاموس]] · الجذر: حزو · ([[toolforge:ar-senses/review/L1534387|رابط المُفردة في الأداة]])
المفردة غير موجودة في المصدر ولها أكثر من معنى في المصادر الأخرى.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:02، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَذَّقَ (L1484084) ==
'''تَحَذَّقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1484084|18بك|ويكي بيانات: L1484084]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَذَّقَ|18بك|صفحة ويكاموس]] · الجذر: حذق · ([[toolforge:ar-senses/review/L1484084|رابط المُفردة في الأداة]])
المفردة غير موجودة في المصادر الموجودة، استبدلتها بمصادر أخرى.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:02، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَذَّقَ (L1534295) ==
'''حَذَّقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534295|18بك|ويكي بيانات: L1534295]] [[ملف:Wiktionary-logo.svg|وصلة=حَذَّقَ|18بك|صفحة ويكاموس]] · الجذر: حذق · ([[toolforge:ar-senses/review/L1534295|رابط المُفردة في الأداة]])
لم أجد الفعل المتعدي في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:14، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَذِقَ (L1546050) ==
'''حَذِقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1546050|18بك|ويكي بيانات: L1546050]] [[ملف:Wiktionary-logo.svg|وصلة=حَذِقَ|18بك|صفحة ويكاموس]] · الجذر: حذق · ([[toolforge:ar-senses/review/L1546050|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لأنه تفسير لمفردة فرس وهو مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:56، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَحْزَرَ (L1534363) ==
'''أَحْزَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534363|18بك|ويكي بيانات: L1534363]] [[ملف:Wiktionary-logo.svg|وصلة=أَحْزَرَ|18بك|صفحة ويكاموس]] · الجذر: حزر · ([[toolforge:ar-senses/review/L1534363|رابط المُفردة في الأداة]])
حذفت المعنى الأول لأنه خاطئ وغير مرتبط بالمفردة بل يرتبط بـ (أحزّ).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:06، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَزَّ (L1534366) ==
'''اِحْتَزَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534366|18بك|ويكي بيانات: L1534366]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَزَّ|18بك|صفحة ويكاموس]] · الجذر: حزز · ([[toolforge:ar-senses/review/L1534366|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:12، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَزْمَرَ (L1534382) ==
'''حَزْمَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534382|18بك|ويكي بيانات: L1534382]] [[ملف:Wiktionary-logo.svg|وصلة=حَزْمَرَ|18بك|صفحة ويكاموس]] · الجذر: حزمر · ([[toolforge:ar-senses/review/L1534382|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لارتباطه بـ ([[حَزْفَرَ]]).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:56، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَاسَى (L1534416) ==
'''تَحَاسَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534416|18بك|ويكي بيانات: L1534416]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَاسَى|18بك|صفحة ويكاموس]] · الجذر: حسو · ([[toolforge:ar-senses/review/L1534416|رابط المُفردة في الأداة]])
غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:10، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَاسَى (L1534418) ==
'''حَاسَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534418|18بك|ويكي بيانات: L1534418]] [[ملف:Wiktionary-logo.svg|وصلة=حَاسَى|18بك|صفحة ويكاموس]] · الجذر: حسو · ([[toolforge:ar-senses/review/L1534418|رابط المُفردة في الأداة]])
غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:16، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَاقَ (L1534738) ==
'''اِحْتَاقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534738|18بك|ويكي بيانات: L1534738]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَاقَ|18بك|صفحة ويكاموس]] · الجذر: حيق · ([[toolforge:ar-senses/review/L1534738|رابط المُفردة في الأداة]])
دمجت المعنيين لأنها مكرران.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 04:15، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَفَظَ (L1485699) ==
'''اِحْتَفَظَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1485699|18بك|ويكي بيانات: L1485699]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَفَظَ|18بك|صفحة ويكاموس]] · الجذر: حفظ · ([[toolforge:ar-senses/review/L1485699|رابط المُفردة في الأداة]])
لم تضع الأداة بعض أرقام الصفحات والأجزاء.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:19، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَمْحَمَ (L1476725) ==
'''حَمْحَمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1476725|18بك|ويكي بيانات: L1476725]] [[ملف:Wiktionary-logo.svg|وصلة=حَمْحَمَ|18بك|صفحة ويكاموس]] · الجذر: حمحم · ([[toolforge:ar-senses/review/L1476725|رابط المُفردة في الأداة]])
خلل في صندوق المعلومات.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:11، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَيَّفَ (L1534760) ==
'''تَحَيَّفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534760|18بك|ويكي بيانات: L1534760]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَيَّفَ|18بك|صفحة ويكاموس]] · الجذر: حيف · ([[toolforge:ar-senses/review/L1534760|رابط المُفردة في الأداة]])
دمجت المعنيين.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:38، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَشَّكَ (L1534439) ==
'''تَحَشَّكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534439|18بك|ويكي بيانات: L1534439]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَشَّكَ|18بك|صفحة ويكاموس]] · الجذر: حشك · ([[toolforge:ar-senses/review/L1534439|رابط المُفردة في الأداة]])
حرف الشين مشدد.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:12، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْوَالَّ (L1534743) ==
'''اِحْوَالَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534743|18بك|ويكي بيانات: L1534743]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْوَالَّ|18بك|صفحة ويكاموس]] · الجذر: حول · ([[toolforge:ar-senses/review/L1534743|رابط المُفردة في الأداة]])
خلل في صندوق المعلومات.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:59، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِسْتَحَاضَ (L1534730) ==
'''اِسْتَحَاضَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534730|18بك|ويكي بيانات: L1534730]] [[ملف:Wiktionary-logo.svg|وصلة=اِسْتَحَاضَ|18بك|صفحة ويكاموس]] · الجذر: حوض · ([[toolforge:ar-senses/review/L1534730|رابط المُفردة في الأداة]])
الموجود في المصادر استحوض وليس استحاض.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:05، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَاشَ (L1534721) ==
'''اِحْتَاشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534721|18بك|ويكي بيانات: L1534721]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَاشَ|18بك|صفحة ويكاموس]] · الجذر: حوش · ([[toolforge:ar-senses/review/L1534721|رابط المُفردة في الأداة]])
التصريف الموجود في المصادر (احتوش) وليس احتاش.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:34، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِسْتَحَاسَ (L1534716) ==
'''اِسْتَحَاسَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534716|18بك|ويكي بيانات: L1534716]] [[ملف:Wiktionary-logo.svg|وصلة=اِسْتَحَاسَ|18بك|صفحة ويكاموس]] · الجذر: حوس · ([[toolforge:ar-senses/review/L1534716|رابط المُفردة في الأداة]])
استحوس وليس استحاس كما في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:51، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَزْأَلَ (L1534358) ==
'''حَزْأَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534358|18بك|ويكي بيانات: L1534358]] [[ملف:Wiktionary-logo.svg|وصلة=حَزْأَلَ|18بك|صفحة ويكاموس]] · الجذر: حزأل · ([[toolforge:ar-senses/review/L1534358|رابط المُفردة في الأداة]])
مفردة خاطئة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 12:52، 14 أغسطس 2026 (ت ع م)
:فعلا، يبدو أن المُفردة حَزْأَلَ لا توجد. في جدول الأفعال، عندنا فعل واحد من الجذر "ح ز أ ل"، وهو على وزن '''فعلل'''، أي حَزْأَلَ. لكن يبدو أن هذا خاطئ، و أن الوزن الصحيح هو افعللّ، أي احْزَأَلَّ، وهو الذي ذُكِر في معجم [https://app.turath.io/book/7030?page=14881 تاج العروس]. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 21:19، 14 أغسطس 2026 (ت ع م)
:ورد في اللسان أيضًا احزألَّ بمعنى ارتفع وبمعنى اجتمع. [[مستخدم:Michel Bakni|Michel Bakni]] ([[نقاش المستخدم:Michel Bakni|نقاش]]) 21:50، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَنَّشَ (L1534669) ==
'''حَنَّشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534669|18بك|ويكي بيانات: L1534669]] [[ملف:Wiktionary-logo.svg|وصلة=حَنَّشَ|18بك|صفحة ويكاموس]] · الجذر: حنش · ([[toolforge:ar-senses/review/L1534669|رابط المُفردة في الأداة]])
هل هي حَنَّشَ أم حَنَشَ؟ وأظن أن لها معان أخرى.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:28، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْخَنَدَّ (L1532850) ==
'''اِبْخَنَدَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1532850|18بك|ويكي بيانات: L1532850]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْخَنَدَّ|18بك|صفحة ويكاموس]] · الجذر: بخند · ([[toolforge:ar-senses/review/L1532850|رابط المُفردة في الأداة]])
الفعل في المرجع اخْبَنْدَى، لا وجود المفردة اِبْخَنَدَّ--[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 18:52، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَمْيَرَ (L1534650) ==
'''تَحَمْيَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534650|18بك|ويكي بيانات: L1534650]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَمْيَرَ|18بك|صفحة ويكاموس]] · الجذر: حمير · ([[toolforge:ar-senses/review/L1534650|رابط المُفردة في الأداة]])
خطأ في استخراج المعنى، معنى تحمير أي ساء خلقه كما في المصادر أم هذه فيجب أن تكون بغير الياء أي تَحَمَّر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:02، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَبَشَ (L1534178) ==
'''اِحْتَبَشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534178|18بك|ويكي بيانات: L1534178]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَبَشَ|18بك|صفحة ويكاموس]] · الجذر: حبش · ([[toolforge:ar-senses/review/L1534178|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:38، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَثَّرَ (L1534223) ==
'''تَحَثَّرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534223|18بك|ويكي بيانات: L1534223]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَثَّرَ|18بك|صفحة ويكاموس]] · الجذر: حثر · ([[toolforge:ar-senses/review/L1534223|رابط المُفردة في الأداة]])
المعنى لفعل حثر، الرجاء إصلاحه.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:52، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَثْرَفَ (L1534226) ==
'''حَثْرَفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534226|18بك|ويكي بيانات: L1534226]] [[ملف:Wiktionary-logo.svg|وصلة=حَثْرَفَ|18بك|صفحة ويكاموس]] · الجذر: حثرف · ([[toolforge:ar-senses/review/L1534226|رابط المُفردة في الأداة]])
المعنى الصحيح زعزعه وحركه، انظر تاج العروس جزء 23 صفحة 118.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:09، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَظْرَبَ (L1534501) ==
'''تَحَظْرَبَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534501|18بك|ويكي بيانات: L1534501]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَظْرَبَ|18بك|صفحة ويكاموس]] · الجذر: حظرب · ([[toolforge:ar-senses/review/L1534501|رابط المُفردة في الأداة]])
دًمج المعنيان ووُضعت أمثلة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:32، 16 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَافَلَ (L1534527) ==
'''حَافَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534527|18بك|ويكي بيانات: L1534527]] [[ملف:Wiktionary-logo.svg|وصلة=حَافَلَ|18بك|صفحة ويكاموس]] · الجذر: حفل · ([[toolforge:ar-senses/review/L1534527|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر المذكورة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:59، 16 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْقَوْقَفَ (L1489579) ==
'''اِحْقَوْقَفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1489579|18بك|ويكي بيانات: L1489579]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْقَوْقَفَ|18بك|صفحة ويكاموس]] · الجذر: حقف · ([[toolforge:ar-senses/review/L1489579|رابط المُفردة في الأداة]])
المعاني الأربعة مكررة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:52، 17 أغسطس 2026 (ت ع م)
== معجم مقاييس اللغة ==
مرحبا بالزملاء، روابط الكتاب الموجودة في الأداة غير دقيقة وقد كنت أظن أن الاختلاف في مفردة أو اثنتين لكن تبين لي أنها غير دقيقة في جميع المفردات، رقم الصفة صحيح ولكن الرابط بعيد عن الصفحة، تحياتي لكم. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:56، 17 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَكَرَ (L1478743) ==
'''اِحْتَكَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1478743|18بك|ويكي بيانات: L1478743]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَكَرَ|18بك|صفحة ويكاموس]] · الجذر: حكر · ([[toolforge:ar-senses/review/L1478743|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:42، 17 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَكَّرَ (L1534555) ==
'''حَكَّرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534555|18بك|ويكي بيانات: L1534555]] [[ملف:Wiktionary-logo.svg|وصلة=حَكَّرَ|18بك|صفحة ويكاموس]] · الجذر: حكر · ([[toolforge:ar-senses/review/L1534555|رابط المُفردة في الأداة]])
أشك بوجود المفردة المشكلة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:56، 17 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَمِضَ (L1543549) ==
'''حَمِضَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543549|18بك|ويكي بيانات: L1543549]] [[ملف:Wiktionary-logo.svg|وصلة=حَمِضَ|18بك|صفحة ويكاموس]] · الجذر: حمض · ([[toolforge:ar-senses/review/L1543549|رابط المُفردة في الأداة]])
المعاني مختلطة لعدم وضوح حركة الميم في الفعل.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:57، 19 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَسَى (L1486741) ==
'''أَسَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1486741|18بك|ويكي بيانات: L1486741]] [[ملف:Wiktionary-logo.svg|وصلة=أَسَى|18بك|صفحة ويكاموس]] · الجذر: أسي · ([[toolforge:ar-senses/review/L1486741|رابط المُفردة في الأداة]])
الفعل في المراجع أسا من الجذر أسو.--[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 20:03، 20 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِخْتَبَلَ (L1534805) ==
'''اِخْتَبَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534805|18بك|ويكي بيانات: L1534805]] [[ملف:Wiktionary-logo.svg|وصلة=اِخْتَبَلَ|18بك|صفحة ويكاموس]] · الجذر: خبل · ([[toolforge:ar-senses/review/L1534805|رابط المُفردة في الأداة]])
المعنى الثاني مكرر، حذفته.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:03، 21 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَخَاتَلَ (L1487389) ==
'''تَخَاتَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1487389|18بك|ويكي بيانات: L1487389]] [[ملف:Wiktionary-logo.svg|وصلة=تَخَاتَلَ|18بك|صفحة ويكاموس]] · الجذر: ختل · ([[toolforge:ar-senses/review/L1487389|رابط المُفردة في الأداة]])
دُمِج المعنيان.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:09، 21 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَخَاجَأَ (L1534840) ==
'''تَخَاجَأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534840|18بك|ويكي بيانات: L1534840]] [[ملف:Wiktionary-logo.svg|وصلة=تَخَاجَأَ|18بك|صفحة ويكاموس]] · الجذر: خجأ · ([[toolforge:ar-senses/review/L1534840|رابط المُفردة في الأداة]])
لاحظت التباسا أو خلطا بين (تخاجأ وتخاجى وتخاجا).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:22، 22 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَخَارَقَ (L1534942) ==
'''تَخَارَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534942|18بك|ويكي بيانات: L1534942]] [[ملف:Wiktionary-logo.svg|وصلة=تَخَارَقَ|18بك|صفحة ويكاموس]] · الجذر: خرق · ([[toolforge:ar-senses/review/L1534942|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:36، 22 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَآ (L1545136) ==
'''دَآ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1545136|18بك|ويكي بيانات: L1545136]] [[ملف:Wiktionary-logo.svg|وصلة=دَآ|18بك|صفحة ويكاموس]] · الجذر: دأو · ([[toolforge:ar-senses/review/L1545136|رابط المُفردة في الأداة]])
الفعل الصحيح (دَأَى) كما في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:47، 22 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِدْحَوَى (L1535316) ==
'''اِدْحَوَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535316|18بك|ويكي بيانات: L1535316]] [[ملف:Wiktionary-logo.svg|وصلة=اِدْحَوَى|18بك|صفحة ويكاموس]] · الجذر: دحو · ([[toolforge:ar-senses/review/L1535316|رابط المُفردة في الأداة]])
استبدلت المصدر بمصادر أكثر دقة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:49، 23 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَدَرَّهَ (L1535387) ==
'''تَدَرَّهَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535387|18بك|ويكي بيانات: L1535387]] [[ملف:Wiktionary-logo.svg|وصلة=تَدَرَّهَ|18بك|صفحة ويكاموس]] · الجذر: دره · ([[toolforge:ar-senses/review/L1535387|رابط المُفردة في الأداة]])
دره وليس تدره.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:55، 24 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَشَا (L1544094) ==
'''دَشَا''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544094|18بك|ويكي بيانات: L1544094]] [[ملف:Wiktionary-logo.svg|وصلة=دَشَا|18بك|صفحة ويكاموس]] · الجذر: دشو · ([[toolforge:ar-senses/review/L1544094|رابط المُفردة في الأداة]])
أضفت المعنى ووثقته من المعاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:54، 25 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَغِرَ (L1543752) ==
'''دَغِرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543752|18بك|ويكي بيانات: L1543752]] [[ملف:Wiktionary-logo.svg|وصلة=دَغِرَ|18بك|صفحة ويكاموس]] · الجذر: دغر · ([[toolforge:ar-senses/review/L1543752|رابط المُفردة في الأداة]])
للمفردة أكثر من معنى غير مذكور، ولا أدري هي بالكسر أم بالفتح دَغَرَ دَغِرَ.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:03، 25 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَاغَصَ (L1535445) ==
'''دَاغَصَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535445|18بك|ويكي بيانات: L1535445]] [[ملف:Wiktionary-logo.svg|وصلة=دَاغَصَ|18بك|صفحة ويكاموس]] · الجذر: دغص · ([[toolforge:ar-senses/review/L1535445|رابط المُفردة في الأداة]])
حذفت المعاني الثلاثة الأخيرة لأنها مختلطة بمفردة (دَاغَشَ).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:42، 25 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِدَّمَسَ (L1535554) ==
'''اِدَّمَسَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535554|18بك|ويكي بيانات: L1535554]] [[ملف:Wiktionary-logo.svg|وصلة=اِدَّمَسَ|18بك|صفحة ويكاموس]] · الجذر: دمس · ([[toolforge:ar-senses/review/L1535554|رابط المُفردة في الأداة]])
حذفت المصدرين وأضفت تهذيب اللغة لورود المفردة فيه ج=12 ص=263.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:13، 28 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَدَمْشَقَ (L1535561) ==
'''تَدَمْشَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535561|18بك|ويكي بيانات: L1535561]] [[ملف:Wiktionary-logo.svg|وصلة=تَدَمْشَقَ|18بك|صفحة ويكاموس]] · الجذر: دمشق · ([[toolforge:ar-senses/review/L1535561|رابط المُفردة في الأداة]])
المفردة غير موجودة والمثال غير موجود.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:29، 28 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَنَّأَ (L1535578) ==
'''دَنَّأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535578|18بك|ويكي بيانات: L1535578]] [[ملف:Wiktionary-logo.svg|وصلة=دَنَّأَ|18بك|صفحة ويكاموس]] · الجذر: دنأ · ([[toolforge:ar-senses/review/L1535578|رابط المُفردة في الأداة]])
لا أظن الفعل مهموزا.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:19، 28 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِدَّنَى (L1535595) ==
'''اِدَّنَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535595|18بك|ويكي بيانات: L1535595]] [[ملف:Wiktionary-logo.svg|وصلة=اِدَّنَى|18بك|صفحة ويكاموس]] · الجذر: دنو · ([[toolforge:ar-senses/review/L1535595|رابط المُفردة في الأداة]])
المثال في صفحة 273 وأظنه بمعنى مختلف.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:43، 29 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَبْشَبَ (L1537222) ==
'''شَبْشَبَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537222|18بك|ويكي بيانات: L1537222]] [[ملف:Wiktionary-logo.svg|وصلة=شَبْشَبَ|18بك|صفحة ويكاموس]] · الجذر: شبشب · ([[toolforge:ar-senses/review/L1537222|رابط المُفردة في الأداة]])
حذف المعنى الثاني لأنه خطأ من الأداة بسبب وجود خطأ مطبعي في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:13، 31 أغسطس 2026 (ت ع م)
:هل تحويل حركات من فتحة الى الكسرة يحل مشكلة؟ [[مستخدم:يزن البلوي|يزن البلوي]] ([[نقاش المستخدم:يزن البلوي|نقاش]]) 13:32، 1 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِنْشَبَحَ (L1537214) ==
'''اِنْشَبَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537214|18بك|ويكي بيانات: L1537214]] [[ملف:Wiktionary-logo.svg|وصلة=اِنْشَبَحَ|18بك|صفحة ويكاموس]] · الجذر: شبح · ([[toolforge:ar-senses/review/L1537214|رابط المُفردة في الأداة]])
استبدلت مقاييس اللغة بجمهرة اللغة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:33، 2 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَاجَّ (L1537248) ==
'''شَاجَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537248|18بك|ويكي بيانات: L1537248]] [[ملف:Wiktionary-logo.svg|وصلة=شَاجَّ|18بك|صفحة ويكاموس]] · الجذر: شجج · ([[toolforge:ar-senses/review/L1537248|رابط المُفردة في الأداة]])
استخراج خاطئ، لم أجد التصريف في بقية المراجع.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:34، 4 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَرَّى (L1485717) ==
'''تَبَرَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1485717|18بك|ويكي بيانات: L1485717]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَرَّى|18بك|صفحة ويكاموس]] · الجذر: بري · ([[toolforge:ar-senses/review/L1485717|رابط المُفردة في الأداة]])
الفعل في المراجع "تَبرأ" من جذر برأ وليس "تَبَرَّى" من جذر بري --[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 12:29، 5 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَحَطَ (L1489005) ==
'''شَحَطَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1489005|18بك|ويكي بيانات: L1489005]] [[ملف:Wiktionary-logo.svg|وصلة=شَحَطَ|18بك|صفحة ويكاموس]] · الجذر: شحط · ([[toolforge:ar-senses/review/L1489005|رابط المُفردة في الأداة]])
خلل وأخطاء غير معروفة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:19، 5 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَشْحَنَ (L1537270) ==
'''أَشْحَنَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537270|18بك|ويكي بيانات: L1537270]] [[ملف:Wiktionary-logo.svg|وصلة=أَشْحَنَ|18بك|صفحة ويكاموس]] · الجذر: شحن · ([[toolforge:ar-senses/review/L1537270|رابط المُفردة في الأداة]])
المعنى اأخير لـ(أحشن) وليس لـ(أشحن).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:29، 6 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَرَّى (L1537351) ==
'''شَرَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537351|18بك|ويكي بيانات: L1537351]] [[ملف:Wiktionary-logo.svg|وصلة=شَرَّى|18بك|صفحة ويكاموس]] · الجذر: شري · ([[toolforge:ar-senses/review/L1537351|رابط المُفردة في الأداة]])
لا أعلم إن كان حرف الراء مشددا أم لا.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:01، 7 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَرِفَ (L1544475) ==
'''شَرِفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544475|18بك|ويكي بيانات: L1544475]] [[ملف:Wiktionary-logo.svg|وصلة=شَرِفَ|18بك|صفحة ويكاموس]] · الجذر: شرف · ([[toolforge:ar-senses/review/L1544475|رابط المُفردة في الأداة]])
هل هي بضم الراء أم بكسرها؟<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:54، 7 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَشْدَى (L1537300) ==
'''أَشْدَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537300|18بك|ويكي بيانات: L1537300]] [[ملف:Wiktionary-logo.svg|وصلة=أَشْدَى|18بك|صفحة ويكاموس]] · الجذر: شدو · ([[toolforge:ar-senses/review/L1537300|رابط المُفردة في الأداة]])
استخراج الأداة خاطئ.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 23:44، 8 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: جَاجَ (L1544958) ==
'''جَاجَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544958|18بك|ويكي بيانات: L1544958]] [[ملف:Wiktionary-logo.svg|وصلة=جَاجَ|18بك|صفحة ويكاموس]] · الجذر: جوج · ([[toolforge:ar-senses/review/L1544958|رابط المُفردة في الأداة]])
الفعل في المرجع جِيجٌمن جذر جيج.--[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 12:36، 10 سبتمبر 2026 (ت ع م)
l8meh9issg1gcalilri21z8r8dkd6ab
1158997
1158996
2026-09-10T12:37:15Z
إسلام
12622
/* بلاغ من أداة مراجعة المعاني: جَاجَ (L1544958) */
1158997
wikitext
text/x-wiki
{{رأس صفحة نقاش}}
== بلاغ من أداة مراجعة المعاني: حَلَّى (L1534604) ==
'''حَلَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534604|18بك|ويكي بيانات: L1534604]] [[ملف:Wiktionary-logo.svg|وصلة=حَلَّى|18بك|صفحة ويكاموس]] · الجذر: حلو · ([[toolforge:ar-senses/review/L1534604|رابط المُفردة في الأداة]])
إبلاغ من الزميل {{مس|رِفْد}}: ''لا يمكن نشرها في ويكاموس عند الضغط على زر النشر يظهر: "خطأ: الصفحة موجودة بالفعل".'' --[[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 11:27، 27 يوليو 2026 (ت ع م)
:شكرا لك @[[مستخدم:رِفْد|رِفْد]] على الإبلاغ. المشكلة في الفعل حَلَّى (وأفعال آخرين) أَنَّه يُوَلَّدُ من جذرين: ح-ل-ي و ح-ل-و. في ويكي بيانات توجد وحدتان معجميتان، واحدة لكل فعل، لكن في ويكاموس لا يُمكن إنشاء صفحتين بنفس الاسم. سأفكر في حل لهذه المشكلة وأوافيك بالجديد. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 11:28، 27 يوليو 2026 (ت ع م)
::حالة أخرى حيث يشترك جذران في نفس صيغة الفعل:
::* جذر ت-ل-و على وزن تفعّل => [[تَتَلَّى]] ([https://ar-senses.toolforge.org/review/L1533461 رابط المُفردة في الأداة]).
::* جذر ت-ل-ي على وزن تفعّل => [[تَتَلَّى]]
::[[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 11:42، 27 يوليو 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِسْتَجَاشَ (L1534157) ==
'''اِسْتَجَاشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534157|18بك|ويكي بيانات: L1534157]] [[ملف:Wiktionary-logo.svg|وصلة=اِسْتَجَاشَ|18بك|صفحة ويكاموس]] · الجذر: جيش · ([[toolforge:ar-senses/review/L1534157|رابط المُفردة في الأداة]])
المعنى الثاني غير موجود في المصدر في صفحة المفردة (ص=603) والحديث الموجود في صفحة 115 غير مفسر بهذا المعنى أيضا. --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:40، 27 يوليو 2026 (ت ع م)
<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. -->
:{{ر|أبو هشام}} بخصوص المعنى الثاني، رجعتُ إلى ص=603 ووجدتُ المعنى حسب الوارد في الأداة: {{اقتباس مضمن|استجاش الأمير من مكان كذا: طلب جيشًا وجمعه. '''و- ت القدر: غلت.'''}}
:{{ر|Michel Bakni}} بخصوص المعنى الثالث (ص=115)، يبدو المعنى صحيحًا لكن الأداة استَنْبَطَتْهُ من مثال وارد في المعجم لا من تعريف للكلمة، ما رأيك؟
:*الاقتباس من المصدر: {{اقتباس مضمن|فَمَرَّ الْجَيْشُ عَلَى غَطَفَانَ '''فَاسْتَجَاشُوهُمْ''' عَلَى بَنِي سُليم، فَهَزَمَتْ بَنُو سُلَيم جيشَ النُّعْمَانِ}}
:*تعريف المعنى كما استخرجَتْهُ الأداة من النص السابق: {{اقتباس مضمن|اِسْتَجَاشَ القومَ على فلان: استنفرهم وحرّضهم عليه}}
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:23، 6 أغسطس 2026 (ت ع م).
::نعم أتفق مع هذا الطرح. [[مستخدم:Michel Bakni|Michel Bakni]] ([[نقاش المستخدم:Michel Bakni|نقاش]]) 14:25، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: جَوَّهَ (L1534145) ==
'''جَوَّهَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534145|18بك|ويكي بيانات: L1534145]] [[ملف:Wiktionary-logo.svg|وصلة=جَوَّهَ|18بك|صفحة ويكاموس]] · الجذر: جوه · ([[toolforge:ar-senses/review/L1534145|رابط المُفردة في الأداة]])
المعنى بهذا التصريف خطأ، لم أعثر على جوّه فلانا أي جعله وجيها، ولم أجد جوّه السقاء أي رقعه بل وجدت جواه في معجم متن اللغة. --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:48، 27 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك، المشكلة هي أن الأداة أخذت الجذر (جَوَهَ) وألحقت به معنى الفرع (وجَّهَ أو أَوْجَهَ، كحال: أَوْجَهْتُهُ أنا ووَجَّهْتُهُ)، سوف نعمل على إصلاحها.
:{{ر|ForzaGreen}} خطوات قادمة:
:#يجب أن نتوثَّق من أن الأداة تُميِّزُ الجذر عن الفرع. في هذه الحالة، أخذت الأداة الجذر ('''جَوَهَ''') وشكَّلتهُ ('''جَوَّهَ''')، ثم ألحقَتْ به معنى خاطئًا للمشتق.
:#بناءً على ما نراهُ هنا وقي حالات أخرى، نحتاج إلى '''خيار للمراجع لتعديل عنوان الصفحة'''، فلو أمكنهُ تبديل العنوان في هذه الحالة إلى '''وجَّهَ''' أو '''أَوْجَهَ''' لكان صحيحًا.
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 13:54، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: سَدَسَ (L1547049) ==
'''سَدَسَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1547049|18بك|ويكي بيانات: L1547049]] [[ملف:Wiktionary-logo.svg|وصلة=سَدَسَ|18بك|صفحة ويكاموس]] · الجذر: سدس · ([[toolforge:ar-senses/review/L1547049|رابط المُفردة في الأداة]])
المعنى الثاني مكرر، استبدلته وأضفت مصادر. --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:04، 28 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك ونعمل على التوثّق من مسألة تكرار المعاني --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 13:58، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: تَسَدَّى (L1536864) ==
'''تَسَدَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1536864|18بك|ويكي بيانات: L1536864]] [[ملف:Wiktionary-logo.svg|وصلة=تَسَدَّى|18بك|صفحة ويكاموس]] · الجذر: سدي · ([[toolforge:ar-senses/review/L1536864|رابط المُفردة في الأداة]])
خلل في رقم صفحة القاموس المحيط، ولا توجد شواهد قوية على المعنى الأول، أظن أن المفردة بحاجة لمراجعة وإعادة ترتيب المعاني.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:44، 29 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} متفّق، {{اقتباس مضمن|والحائكُ يُسَدِّي الثَّوْبَ ويَتَسَدّاه}} أي يحيكه لنفسه.
:{{ر|ForzaGreen}} يبدو أن النموذج اختلَطَ عليه الأمر أثناء دمج المعاني، ربما خصوصًا من لسان العرب ({{اقتباس مضمن|والحائكُ يُسَدِّي الثَّوْبَ ويَتَسَدّاه}})، فخرجَ بالمعنى المبتدع: {{اقتباس مضمن|تَسَدَّى الثوبَ: أقام سَداه لنفسه}}، وليس له مثيل في المصادر.
:'''الخطوات القادمة المقترحة''': أشتَبِهُ في أن النموذج يفقد موثوقيته حين دَمْجَ المعاني من عددٍ كبير من المصادر (5 مصادر في هذه الحالة)، '''أقترح وَضْعَ حدّ أعلى للمصادر التي نستخدمها في استخراج المعنى، ربما 3 للوقت الحاضر'''.
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:10، 6 أغسطس 2026 (ت ع م).
::وضع حد للمصادر آليا قد يحرم المفردة من المصدر الأقوى والأدق. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:30، 6 أغسطس 2026 (ت ع م)
:{{أصلح}} الخلل في رقم صفحة القاموس المحيط، لهذه المُفردة ولمفردات أخرى. يبدو أن المشكل كان سببه عشوائية النموذج اللغوي، إذ كان يُغيِّر رقم الصفحة في أقل من 1% من الحالات. عدّلتُ أداة توليد المعاني حتى لا يتكرر الخطأ.
:بالنسبة للمصادر، أُفضل الإبقاء عليها جميعا. سنُجرب مع {{مس|عباد ديرانية}} تعديل تعليمات النموذج لتحسين المُخْرَجات ولإصلاح مشاكل أخرى، لا سيما المعاني المُكررة. -- [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 23:47، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَسَافَدَ (L1497488) ==
'''تَسَافَدَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1497488|18بك|ويكي بيانات: L1497488]] [[ملف:Wiktionary-logo.svg|وصلة=تَسَافَدَ|18بك|صفحة ويكاموس]] · الجذر: سفد · ([[toolforge:ar-senses/review/L1497488|رابط المُفردة في الأداة]])
اكتفيت بالمعنى الأول بسبب التكرار.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 11:51، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} ملاحظة للعمل على تكرار المعاني، المعنى 1 و2 متماثلان والثاني هو الأوضح للمستخدم المعاصر --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:13، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: سَافَحَ (L1487289) ==
'''سَافَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1487289|18بك|ويكي بيانات: L1487289]] [[ملف:Wiktionary-logo.svg|وصلة=سَافَحَ|18بك|صفحة ويكاموس]] · الجذر: سفح · ([[toolforge:ar-senses/review/L1487289|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لأنه مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:42، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} حالة تكرار أخرى مؤكدة في المعنى 1 والمعنى 2 --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:14، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: تَرَأَّمَ (L1535813) ==
'''تَرَأَّمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535813|18بك|ويكي بيانات: L1535813]] [[ملف:Wiktionary-logo.svg|وصلة=تَرَأَّمَ|18بك|صفحة ويكاموس]] · الجذر: رأم · ([[toolforge:ar-senses/review/L1535813|رابط المُفردة في الأداة]])
دمجت المعنيين وصححت رقم الجزء والصفحة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:58، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} حالة تكرار مؤكّدة بين المعنى 1 و2، كما يأتي:
:#{{اقتباس مضمن|تَرَأَّمَ الشيءَ: أحبَّه وألِفَه وعطف عليه وترحم عليه}}
:#{{اقتباس مضمن|تَرَأَّمَ الصبيَّ: ترحَّم عليه}}
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:26، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: جَاوَى (L1534151) ==
'''جَاوَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534151|18بك|ويكي بيانات: L1534151]] [[ملف:Wiktionary-logo.svg|وصلة=جَاوَى|18بك|صفحة ويكاموس]] · الجذر: جوي · ([[toolforge:ar-senses/review/L1534151|رابط المُفردة في الأداة]])
خطأ: الصفحة 'جَاوَى' موجودة بالفعل <!-- يظهر هكذا: خطأ: الصفحة 'جَاوَى' موجودة بالفعل. --> --[[مستخدم:رِفْد|رِفْد]] ([[نقاش المستخدم:رِفْد|نقاش]]) 22:15، 30 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} أتقصد أنكَ أنشأتَ الصفحة سابقًا عبر الأداة ثم ظهرت لك مرة أخرى في أداة مراجعة المعاني؟ --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:27، 6 أغسطس 2026 (ت ع م).
::مرحبا {{ر|عباد ديرانية}} أعتقد أن الخلل هو وجود صفحة مكررة في ويكي بيانات يلزم دمجها، تحياتي لك. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:59، 6 أغسطس 2026 (ت ع م)
:::+أضيفُ الاقتراح الممتاز '''إضافة تنبيهٍ بالخط الأحمر إلى الأداة في حال لو أن الصفحة أُنْشِأَتْ وحُذِفَتْ سابقًا''' تنبيهًا للمستخدم --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 16:07، 6 أغسطس 2026 (ت ع م).
::::هذا المشكل تكرر مرات عديدة (انظر النقاش أعلاه عن الفعل '''حَلَّى''') والسبب هو المُفردات التي تشترك في نفس الجذر. حاليا لا يوجد حل تقني للمسألة، لكنها في بالي وسأفكر في حل. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 22:48، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَجَاذَى (L1533824) ==
'''تَجَاذَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533824|18بك|ويكي بيانات: L1533824]] [[ملف:Wiktionary-logo.svg|وصلة=تَجَاذَى|18بك|صفحة ويكاموس]] · الجذر: جذي · ([[toolforge:ar-senses/review/L1533824|رابط المُفردة في الأداة]])
خطأ: الصفحة 'تَجَاذَى' موجودة بالفعل <!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:رِفْد|رِفْد]] ([[نقاش المستخدم:رِفْد|نقاش]]) 22:19، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} هذه ملاحظة متكرّرة من المستخدمين، يظهر أننا نحتاجُ إلى '''تحديث الأداة بوتيرة يومية لإزالة الصفحات المنشأة سابقًا'''، إلا لو كان هذا خطأً تقنيًا مختلفًا يُسبِّبُ التكرار --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 15:48، 6 أغسطس 2026 (ت ع م).
::كنت أصلحت هذه الكلمة مع كلمات أخرى لكن لم أصلح بعد مصدر الخطأ، وهو الأفعال التي لها جذور مختلفة لكنها تشترك في نفس الصيغة. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 17:51، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَجْذَى (L1533823) ==
'''أَجْذَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533823|18بك|ويكي بيانات: L1533823]] [[ملف:Wiktionary-logo.svg|وصلة=أَجْذَى|18بك|صفحة ويكاموس]] · الجذر: جذي · ([[toolforge:ar-senses/review/L1533823|رابط المُفردة في الأداة]])
خطأ: الصفحة 'أَجْذَى' موجودة بالفعل <!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:رِفْد|رِفْد]] ([[نقاش المستخدم:رِفْد|نقاش]]) 22:20، 30 يوليو 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: زَأْزَأَ (L1536388) ==
'''زَأْزَأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1536388|18بك|ويكي بيانات: L1536388]] [[ملف:Wiktionary-logo.svg|وصلة=زَأْزَأَ|18بك|صفحة ويكاموس]] · الجذر: زأزأ · ([[toolforge:ar-senses/review/L1536388|رابط المُفردة في الأداة]])
حذفت المعنى الخامس لأنه مزيد بتاء في المراجع.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:35، 4 أغسطس 2026 (ت ع م)
:{{ر|Michel Bakni}} المعنى الخامس مزيدٌ بتاء التأنيث، فهل نُنْشِئُ له صفحةً منفصلةً برأيك أم نضيفه إلى ذات الصفحة مع تحويلة؟
:شرح المعنى الخامس: {{اقتباس مضمن|زَأْزَأَتِ المرأةُ: مشت وحرّكت أعطافها كمشية القِصار}}
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:33، 6 أغسطس 2026 (ت ع م).
::نعم، يلزم إنشاء صفحة لكل فعل بكل تصريف، هذا التصريف: المؤنث المفرد الغائب. [[مستخدم:Michel Bakni|Michel Bakni]] ([[نقاش المستخدم:Michel Bakni|نقاش]]) 14:36، 6 أغسطس 2026 (ت ع م)
:::{{ر|ForzaGreen}} إذًا يلزمنا التوثّق من تمييز النموذج للمؤنّث وتخصيصه صفحة مستقلّة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:54، 6 أغسطس 2026 (ت ع م).
::::أنا رأيي كل المعاني والأمثلة تبقى في صفحة الفعل الرئيسية، والصيغ المُصرفة تحيل إلى الصفحة الرئيسية. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 15:06، 6 أغسطس 2026 (ت ع م)
::::متّفق مع وائل هنا بالواقع، الأفضل هو تخفيف الإحالات إن أمكن وجَمْع تصريفات المذكر والمؤنث والعدد بصفحة واحدة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 15:52، 6 أغسطس 2026 (ت ع م).
:::::لكن الذي يراجع القوالب يفهم أن لكل تصريف صفحة خاصة به لذلك أنا أتفق مع الزميل ميشيل على إنشاء صفحة لكل تصريف، تحياتي لكم. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:10، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَزْعَلَ (L1476504) ==
'''أَزْعَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1476504|18بك|ويكي بيانات: L1476504]] [[ملف:Wiktionary-logo.svg|وصلة=أَزْعَلَ|18بك|صفحة ويكاموس]] · الجذر: زعل · ([[toolforge:ar-senses/review/L1476504|رابط المُفردة في الأداة]])
دمجت المعنى الأول والثالث لأن المعنى الثالث مكرر عن الأول.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 10:04، 4 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك ونعمل على معالجة مسألة المعاني المُكرَّرة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:34، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: زَعِلَ (L1487695) ==
'''زَعِلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1487695|18بك|ويكي بيانات: L1487695]] [[ملف:Wiktionary-logo.svg|وصلة=زَعِلَ|18بك|صفحة ويكاموس]] · الجذر: زعل · ([[toolforge:ar-senses/review/L1487695|رابط المُفردة في الأداة]])
المعنى الأول (مرح) غير موجود في المراجع، والمعنى الثالث بحاجة إلى تدقيق، تحتاج المفردة إلى مراجعة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 10:41، 4 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} من معجم العين: {{اقتباس مضمن|الزَّعِل: النشيط '''الأشر'''. زَعِلَ يَزْعَلُ زَعَلًا.}}، الأشر هنا بمعنى المرح (مصدر [https://www.islamweb.net/ar/library/content/122/137/%D8%A3%D8%B4%D8%B1 من لسان العرب]).
:{{ر|ForzaGreen}} المعنى الثالث فيه اختلاطٌ بين معانٍ عِدّة، مثل: {{اقتباس مضمن|والزعل: '''المتضور جوعا'''}} (الجوهري) و{{اقتباس مضمن|الزَّعَلُ '''كالعَلَزِ مِنَ المَرَض'''}} (لسان العرب)، والمعنى في الأداة جاءَ: {{اقتباس مضمن|زَعِلَ من المرض أو الجوع: تضوّر وتلوّى وقلِق فلم يستقر}}.
:'''الخطوات القادمة المقترحة''': أشتبه أن النموذج اختلط عليه دمج المعنى عبر 5 مصادر، والأفضل والأسهل للمراجع (فمن الصعب جدًا تقصّي 5 مراجع مختلفة) أن '''نضعَ حدًا بين مصدرَيْن إلى ثلاثة مصادر للمعنى الواحد''' --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:48، 6 أغسطس 2026 (ت ع م).
::نعم، في الحقيقة تحتوي بعض المفردات على مراجع كثيرة وأتفق معك على الاستشهاد بمرجعين أو ثلاث بأقصى حد لكن لو يكون انتقاء المراجع يدويا أفضل لاختيار الأنسب والأقرب إلا إذا كان الاختيار الآلي قادرا على انتقاء المرجع الأنسب أو الأقرب أو الأدق. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:21، 6 أغسطس 2026 (ت ع م)
:::إشارة {{ر|عباد ديرانية}} أرجو مراجعة تقليل المراجع آليا فقد تحرم الأداةُ المفردةَ من المراجع الأدق وتضع المراجع الأبعد. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:23، 6 أغسطس 2026 (ت ع م)
::::{{ر|أبو هشام}} لا بأس بذلك، لكن إن تركنا للمُرَاجِعِ اختيار المصادر الأدق فهذا يعني أن عليهم مراجعة 5 - 6 مصادر في بعض الحالات، فما هو الأفضل بالنسبة لك بين هذه الخيارات؟ أهو انتقاء المصادر الأفضل يدويًا أم تقليل عدد المصادر التي وجبت مراجعتها؟ --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 15:51، 6 أغسطس 2026 (ت ع م).
:::::{{ر|عباد ديرانية}} أميل إلى الانتقاء اليدوي أو البشري دون تقليل للمصادر فالمراجِع قادر على انتقاء المصدر الأنسب للمفردة، وإن كان للزملاء رأي آخر فلا أعترض، تحياتي. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:15، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَلَكَ (L1502490) ==
'''أَلَكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1502490|18بك|ويكي بيانات: L1502490]] [[ملف:Wiktionary-logo.svg|وصلة=أَلَكَ|18بك|صفحة ويكاموس]] · الجذر: ألك · ([[toolforge:ar-senses/review/L1502490|رابط المُفردة في الأداة]])
حذفت المرجع الأخير من المعنى الثاني لأن فيه خطأ فقد استُشهد بصفحة 132 من معجم متن اللغة وفيها (أَلَكَ لَجَأٌ يَا فلَان) وهو استشهاد خاطئ لأن (ألك) هنا استفهام وليست فعل.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:33، 5 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك وسوف نعمل على زيادة دقة ضبط المعاني المتقاربة بالأداة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:49، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: اِبْتَسَطَ (L1533014) ==
'''اِبْتَسَطَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533014|18بك|ويكي بيانات: L1533014]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْتَسَطَ|18بك|صفحة ويكاموس]] · الجذر: بسط · ([[toolforge:ar-senses/review/L1533014|رابط المُفردة في الأداة]])
غير موثقة، لا يوجد فيها مصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:04، 5 أغسطس 2026 (ت ع م)
:{{ر|ForzaGreen}} حالة غريبةٌ ليس فيه أي مصدر للمعنى المستخرج! --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:49، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: أَبْشَكَ (L1533037) ==
'''أَبْشَكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533037|18بك|ويكي بيانات: L1533037]] [[ملف:Wiktionary-logo.svg|وصلة=أَبْشَكَ|18بك|صفحة ويكاموس]] · الجذر: بشك · ([[toolforge:ar-senses/review/L1533037|رابط المُفردة في الأداة]])
هذه اللفظة بحاجة لمراجعة فلها عدة معان.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:50، 6 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} هل لكَ أن تُوضِحَ المقصود؟ لم أجد كلمة أبشك في المرجع أصلًا للأسف --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:52، 6 أغسطس 2026 (ت ع م).
::{{ر|عباد ديرانية}} وجدت هذا ('''أبشك''' الكلام: كذب فيه: تخرص فيه كاذبًا.) في معجم متن اللغة ج=1 ص=299، وهذا أيضا (وبَشَكَ الْكَلَامَ يَبْشُكه بَشْكًا و'''أبشَكه''': تَخَرَّصهُ كَاذِبًا،) في لسان العرب ج=10 ص=400، ولم أجد أن معناها '''أسرع'''، تحياتي. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:43، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَاطَأَ (L1496404) ==
'''بَاطَأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1496404|18بك|ويكي بيانات: L1496404]] [[ملف:Wiktionary-logo.svg|وصلة=بَاطَأَ|18بك|صفحة ويكاموس]] · الجذر: بطأ · ([[toolforge:ar-senses/review/L1496404|رابط المُفردة في الأداة]])
لا يوجد التصريف في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:43، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَبْطَحَ (L1533063) ==
'''أَبْطَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533063|18بك|ويكي بيانات: L1533063]] [[ملف:Wiktionary-logo.svg|وصلة=أَبْطَحَ|18بك|صفحة ويكاموس]] · الجذر: بطح · ([[toolforge:ar-senses/review/L1533063|رابط المُفردة في الأداة]])
غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:47، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَطَّحَ (L1533066) ==
'''بَطَّحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533066|18بك|ويكي بيانات: L1533066]] [[ملف:Wiktionary-logo.svg|وصلة=بَطَّحَ|18بك|صفحة ويكاموس]] · الجذر: بطح · ([[toolforge:ar-senses/review/L1533066|رابط المُفردة في الأداة]])
هل هي بطَح أم بطّح؟<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:48، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَطْرَقَ (L1533070) ==
'''تَبَطْرَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533070|18بك|ويكي بيانات: L1533070]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَطْرَقَ|18بك|صفحة ويكاموس]] · الجذر: بطرق · ([[toolforge:ar-senses/review/L1533070|رابط المُفردة في الأداة]])
هذا الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:58، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَهُؤَ (L1545462) ==
'''بَهُؤَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1545462|18بك|ويكي بيانات: L1545462]] [[ملف:Wiktionary-logo.svg|وصلة=بَهُؤَ|18بك|صفحة ويكاموس]] · الجذر: بهأ · ([[toolforge:ar-senses/review/L1545462|رابط المُفردة في الأداة]])
معناها (أنس) كما في لسان العرب ج=1 ص=35 ومعجم متن اللغة ج=1 ص=353.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:29، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَاهَتَ (L1533268) ==
'''تَبَاهَتَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533268|18بك|ويكي بيانات: L1533268]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَاهَتَ|18بك|صفحة ويكاموس]] · الجذر: بهت · ([[toolforge:ar-senses/review/L1533268|رابط المُفردة في الأداة]])
حسنتُ المعنى وأضفت مصدرين.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:01، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَعِرَ (L1544067) ==
'''بَعِرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544067|18بك|ويكي بيانات: L1544067]] [[ملف:Wiktionary-logo.svg|وصلة=بَعِرَ|18بك|صفحة ويكاموس]] · الجذر: بعر · ([[toolforge:ar-senses/review/L1544067|رابط المُفردة في الأداة]])
'''[[بَعِرَ]]''' الجمل بالكسر صار بعيرا كما في القاموس المحيط ص=352.
المفردة (بَعَرَ) وهي موجودة في المشروع '''[[بَعَرَ]]''' فيلزم تحديثها أو حذفها لأنها خاطئة انظر القاموس المحيط ص=694 وإنشاء صفحة جديدة ببيانات صحيحة هي البيانات الموجودة في الأداة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:31، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَعَّقَ (L1533113) ==
'''بَعَّقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533113|18بك|ويكي بيانات: L1533113]] [[ملف:Wiktionary-logo.svg|وصلة=بَعَّقَ|18بك|صفحة ويكاموس]] · الجذر: بعق · ([[toolforge:ar-senses/review/L1533113|رابط المُفردة في الأداة]])
هل هي بَعَّقَ بالتشديد أم بَعَقَ بالتخفيف؟<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:02، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَغْزَلَ (L1533126) ==
'''تَبَغْزَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533126|18بك|ويكي بيانات: L1533126]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَغْزَلَ|18بك|صفحة ويكاموس]] · الجذر: بغزل · ([[toolforge:ar-senses/review/L1533126|رابط المُفردة في الأداة]])
المعنى الصحيح '''تبختر''' وله شواهد في أربعة معاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:13، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَقَّمَ (L1533154) ==
'''بَقَّمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533154|18بك|ويكي بيانات: L1533154]] [[ملف:Wiktionary-logo.svg|وصلة=بَقَّمَ|18بك|صفحة ويكاموس]] · الجذر: بقم · ([[toolforge:ar-senses/review/L1533154|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:44، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَقَّمَ (L1533153) ==
'''تَبَقَّمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533153|18بك|ويكي بيانات: L1533153]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَقَّمَ|18بك|صفحة ويكاموس]] · الجذر: بقم · ([[toolforge:ar-senses/review/L1533153|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:50، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَكِئَ (L1543356) ==
'''بَكِئَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543356|18بك|ويكي بيانات: L1543356]] [[ملف:Wiktionary-logo.svg|وصلة=بَكِئَ|18بك|صفحة ويكاموس]] · الجذر: بكأ · ([[toolforge:ar-senses/review/L1543356|رابط المُفردة في الأداة]])
حذفت المعنى الأول لأنه غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:13، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْتَلَتَ (L1533174) ==
'''اِبْتَلَتَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533174|18بك|ويكي بيانات: L1533174]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْتَلَتَ|18بك|صفحة ويكاموس]] · الجذر: بلت · ([[toolforge:ar-senses/review/L1533174|رابط المُفردة في الأداة]])
المفردة غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:35، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَلْدَحَ (L1533193) ==
'''تَبَلْدَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533193|18بك|ويكي بيانات: L1533193]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَلْدَحَ|18بك|صفحة ويكاموس]] · الجذر: بلدح · ([[toolforge:ar-senses/review/L1533193|رابط المُفردة في الأداة]])
أضفت المعنى الثاني، لم تستخرجه الأداة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:54، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْلَنْدَكَ (L1533194) ==
'''اِبْلَنْدَكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533194|18بك|ويكي بيانات: L1533194]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْلَنْدَكَ|18بك|صفحة ويكاموس]] · الجذر: بلدك · ([[toolforge:ar-senses/review/L1533194|رابط المُفردة في الأداة]])
المعنى خاطئ، والمفردة غير موجودة في المصدر.
:المعنى الصحيح ('''اتسع''') موجود في أربعة معاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:00، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَلَّرَ (L1533196) ==
'''تَبَلَّرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533196|18بك|ويكي بيانات: L1533196]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَلَّرَ|18بك|صفحة ويكاموس]] · الجذر: بلر · ([[toolforge:ar-senses/review/L1533196|رابط المُفردة في الأداة]])
إملاء المفردة خاطئ، والصحيح ('''تَرَبَّل''') كما في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:08، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَقَّعَ (L1533145) ==
'''بَقَّعَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533145|18بك|ويكي بيانات: L1533145]] [[ملف:Wiktionary-logo.svg|وصلة=بَقَّعَ|18بك|صفحة ويكاموس]] · الجذر: بقع · ([[toolforge:ar-senses/review/L1533145|رابط المُفردة في الأداة]])
حذفت المعنى الرابع لأنه ورد بالتخفيف.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:18، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِنْبَقَّ (L1533147) ==
'''اِنْبَقَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533147|18بك|ويكي بيانات: L1533147]] [[ملف:Wiktionary-logo.svg|وصلة=اِنْبَقَّ|18بك|صفحة ويكاموس]] · الجذر: بقق · ([[toolforge:ar-senses/review/L1533147|رابط المُفردة في الأداة]])
المعنى خاطئ ولا شواهد عليه في المعاجم والمفردة الموجودة ('''انبعق''') وليس انبق.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:38، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَلَعَ (L1480240) ==
'''بَلَعَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1480240|18بك|ويكي بيانات: L1480240]] [[ملف:Wiktionary-logo.svg|وصلة=بَلَعَ|18بك|صفحة ويكاموس]] · الجذر: بلع · ([[toolforge:ar-senses/review/L1480240|رابط المُفردة في الأداة]])
خطأ في التشكيل فالفعل بَلِعَ وليس بَلَعَ كما في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:34، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْتَلَقَ (L1533220) ==
'''اِبْتَلَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533220|18بك|ويكي بيانات: L1533220]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْتَلَقَ|18بك|صفحة ويكاموس]] · الجذر: بلق · ([[toolforge:ar-senses/review/L1533220|رابط المُفردة في الأداة]])
لم أجد المفردة في المعاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:06، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَلُقَ (L1543358) ==
'''بَلُقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543358|18بك|ويكي بيانات: L1543358]] [[ملف:Wiktionary-logo.svg|وصلة=بَلُقَ|18بك|صفحة ويكاموس]] · الجذر: بلق · ([[toolforge:ar-senses/review/L1543358|رابط المُفردة في الأداة]])
المفردة بالكسر وليس بالضم، انظر '''[[بَلِقَ]]'''.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:52، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْذَارَّ (L1534290) ==
'''اِحْذَارَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534290|18بك|ويكي بيانات: L1534290]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْذَارَّ|18بك|صفحة ويكاموس]] · الجذر: حذر · ([[toolforge:ar-senses/review/L1534290|رابط المُفردة في الأداة]])
خلل في صندوق المعلومات.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:49، 9 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَاتَنَ (L1534214) ==
'''تَحَاتَنَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534214|18بك|ويكي بيانات: L1534214]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَاتَنَ|18بك|صفحة ويكاموس]] · الجذر: حتن · ([[toolforge:ar-senses/review/L1534214|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لأنه مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 12:31، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَتَنَ (L1534213) ==
'''اِحْتَتَنَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534213|18بك|ويكي بيانات: L1534213]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَتَنَ|18بك|صفحة ويكاموس]] · الجذر: حتن · ([[toolforge:ar-senses/review/L1534213|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 12:37، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَاتَّ (L1496477) ==
'''تَحَاتَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1496477|18بك|ويكي بيانات: L1496477]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَاتَّ|18بك|صفحة ويكاموس]] · الجذر: حتت · ([[toolforge:ar-senses/review/L1496477|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:36، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْزَوْزَى (L1534387) ==
'''اِحْزَوْزَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534387|18بك|ويكي بيانات: L1534387]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْزَوْزَى|18بك|صفحة ويكاموس]] · الجذر: حزو · ([[toolforge:ar-senses/review/L1534387|رابط المُفردة في الأداة]])
المفردة غير موجودة في المصدر ولها أكثر من معنى في المصادر الأخرى.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:02، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَذَّقَ (L1484084) ==
'''تَحَذَّقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1484084|18بك|ويكي بيانات: L1484084]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَذَّقَ|18بك|صفحة ويكاموس]] · الجذر: حذق · ([[toolforge:ar-senses/review/L1484084|رابط المُفردة في الأداة]])
المفردة غير موجودة في المصادر الموجودة، استبدلتها بمصادر أخرى.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:02، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَذَّقَ (L1534295) ==
'''حَذَّقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534295|18بك|ويكي بيانات: L1534295]] [[ملف:Wiktionary-logo.svg|وصلة=حَذَّقَ|18بك|صفحة ويكاموس]] · الجذر: حذق · ([[toolforge:ar-senses/review/L1534295|رابط المُفردة في الأداة]])
لم أجد الفعل المتعدي في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:14، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَذِقَ (L1546050) ==
'''حَذِقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1546050|18بك|ويكي بيانات: L1546050]] [[ملف:Wiktionary-logo.svg|وصلة=حَذِقَ|18بك|صفحة ويكاموس]] · الجذر: حذق · ([[toolforge:ar-senses/review/L1546050|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لأنه تفسير لمفردة فرس وهو مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:56، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَحْزَرَ (L1534363) ==
'''أَحْزَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534363|18بك|ويكي بيانات: L1534363]] [[ملف:Wiktionary-logo.svg|وصلة=أَحْزَرَ|18بك|صفحة ويكاموس]] · الجذر: حزر · ([[toolforge:ar-senses/review/L1534363|رابط المُفردة في الأداة]])
حذفت المعنى الأول لأنه خاطئ وغير مرتبط بالمفردة بل يرتبط بـ (أحزّ).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:06، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَزَّ (L1534366) ==
'''اِحْتَزَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534366|18بك|ويكي بيانات: L1534366]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَزَّ|18بك|صفحة ويكاموس]] · الجذر: حزز · ([[toolforge:ar-senses/review/L1534366|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:12، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَزْمَرَ (L1534382) ==
'''حَزْمَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534382|18بك|ويكي بيانات: L1534382]] [[ملف:Wiktionary-logo.svg|وصلة=حَزْمَرَ|18بك|صفحة ويكاموس]] · الجذر: حزمر · ([[toolforge:ar-senses/review/L1534382|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لارتباطه بـ ([[حَزْفَرَ]]).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:56، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَاسَى (L1534416) ==
'''تَحَاسَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534416|18بك|ويكي بيانات: L1534416]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَاسَى|18بك|صفحة ويكاموس]] · الجذر: حسو · ([[toolforge:ar-senses/review/L1534416|رابط المُفردة في الأداة]])
غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:10، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَاسَى (L1534418) ==
'''حَاسَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534418|18بك|ويكي بيانات: L1534418]] [[ملف:Wiktionary-logo.svg|وصلة=حَاسَى|18بك|صفحة ويكاموس]] · الجذر: حسو · ([[toolforge:ar-senses/review/L1534418|رابط المُفردة في الأداة]])
غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:16، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَاقَ (L1534738) ==
'''اِحْتَاقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534738|18بك|ويكي بيانات: L1534738]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَاقَ|18بك|صفحة ويكاموس]] · الجذر: حيق · ([[toolforge:ar-senses/review/L1534738|رابط المُفردة في الأداة]])
دمجت المعنيين لأنها مكرران.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 04:15، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَفَظَ (L1485699) ==
'''اِحْتَفَظَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1485699|18بك|ويكي بيانات: L1485699]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَفَظَ|18بك|صفحة ويكاموس]] · الجذر: حفظ · ([[toolforge:ar-senses/review/L1485699|رابط المُفردة في الأداة]])
لم تضع الأداة بعض أرقام الصفحات والأجزاء.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:19، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَمْحَمَ (L1476725) ==
'''حَمْحَمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1476725|18بك|ويكي بيانات: L1476725]] [[ملف:Wiktionary-logo.svg|وصلة=حَمْحَمَ|18بك|صفحة ويكاموس]] · الجذر: حمحم · ([[toolforge:ar-senses/review/L1476725|رابط المُفردة في الأداة]])
خلل في صندوق المعلومات.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:11، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَيَّفَ (L1534760) ==
'''تَحَيَّفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534760|18بك|ويكي بيانات: L1534760]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَيَّفَ|18بك|صفحة ويكاموس]] · الجذر: حيف · ([[toolforge:ar-senses/review/L1534760|رابط المُفردة في الأداة]])
دمجت المعنيين.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:38، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَشَّكَ (L1534439) ==
'''تَحَشَّكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534439|18بك|ويكي بيانات: L1534439]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَشَّكَ|18بك|صفحة ويكاموس]] · الجذر: حشك · ([[toolforge:ar-senses/review/L1534439|رابط المُفردة في الأداة]])
حرف الشين مشدد.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:12، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْوَالَّ (L1534743) ==
'''اِحْوَالَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534743|18بك|ويكي بيانات: L1534743]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْوَالَّ|18بك|صفحة ويكاموس]] · الجذر: حول · ([[toolforge:ar-senses/review/L1534743|رابط المُفردة في الأداة]])
خلل في صندوق المعلومات.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:59، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِسْتَحَاضَ (L1534730) ==
'''اِسْتَحَاضَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534730|18بك|ويكي بيانات: L1534730]] [[ملف:Wiktionary-logo.svg|وصلة=اِسْتَحَاضَ|18بك|صفحة ويكاموس]] · الجذر: حوض · ([[toolforge:ar-senses/review/L1534730|رابط المُفردة في الأداة]])
الموجود في المصادر استحوض وليس استحاض.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:05، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَاشَ (L1534721) ==
'''اِحْتَاشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534721|18بك|ويكي بيانات: L1534721]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَاشَ|18بك|صفحة ويكاموس]] · الجذر: حوش · ([[toolforge:ar-senses/review/L1534721|رابط المُفردة في الأداة]])
التصريف الموجود في المصادر (احتوش) وليس احتاش.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:34، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِسْتَحَاسَ (L1534716) ==
'''اِسْتَحَاسَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534716|18بك|ويكي بيانات: L1534716]] [[ملف:Wiktionary-logo.svg|وصلة=اِسْتَحَاسَ|18بك|صفحة ويكاموس]] · الجذر: حوس · ([[toolforge:ar-senses/review/L1534716|رابط المُفردة في الأداة]])
استحوس وليس استحاس كما في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:51، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَزْأَلَ (L1534358) ==
'''حَزْأَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534358|18بك|ويكي بيانات: L1534358]] [[ملف:Wiktionary-logo.svg|وصلة=حَزْأَلَ|18بك|صفحة ويكاموس]] · الجذر: حزأل · ([[toolforge:ar-senses/review/L1534358|رابط المُفردة في الأداة]])
مفردة خاطئة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 12:52، 14 أغسطس 2026 (ت ع م)
:فعلا، يبدو أن المُفردة حَزْأَلَ لا توجد. في جدول الأفعال، عندنا فعل واحد من الجذر "ح ز أ ل"، وهو على وزن '''فعلل'''، أي حَزْأَلَ. لكن يبدو أن هذا خاطئ، و أن الوزن الصحيح هو افعللّ، أي احْزَأَلَّ، وهو الذي ذُكِر في معجم [https://app.turath.io/book/7030?page=14881 تاج العروس]. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 21:19، 14 أغسطس 2026 (ت ع م)
:ورد في اللسان أيضًا احزألَّ بمعنى ارتفع وبمعنى اجتمع. [[مستخدم:Michel Bakni|Michel Bakni]] ([[نقاش المستخدم:Michel Bakni|نقاش]]) 21:50، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَنَّشَ (L1534669) ==
'''حَنَّشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534669|18بك|ويكي بيانات: L1534669]] [[ملف:Wiktionary-logo.svg|وصلة=حَنَّشَ|18بك|صفحة ويكاموس]] · الجذر: حنش · ([[toolforge:ar-senses/review/L1534669|رابط المُفردة في الأداة]])
هل هي حَنَّشَ أم حَنَشَ؟ وأظن أن لها معان أخرى.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:28، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْخَنَدَّ (L1532850) ==
'''اِبْخَنَدَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1532850|18بك|ويكي بيانات: L1532850]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْخَنَدَّ|18بك|صفحة ويكاموس]] · الجذر: بخند · ([[toolforge:ar-senses/review/L1532850|رابط المُفردة في الأداة]])
الفعل في المرجع اخْبَنْدَى، لا وجود المفردة اِبْخَنَدَّ--[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 18:52، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَمْيَرَ (L1534650) ==
'''تَحَمْيَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534650|18بك|ويكي بيانات: L1534650]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَمْيَرَ|18بك|صفحة ويكاموس]] · الجذر: حمير · ([[toolforge:ar-senses/review/L1534650|رابط المُفردة في الأداة]])
خطأ في استخراج المعنى، معنى تحمير أي ساء خلقه كما في المصادر أم هذه فيجب أن تكون بغير الياء أي تَحَمَّر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:02، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَبَشَ (L1534178) ==
'''اِحْتَبَشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534178|18بك|ويكي بيانات: L1534178]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَبَشَ|18بك|صفحة ويكاموس]] · الجذر: حبش · ([[toolforge:ar-senses/review/L1534178|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:38، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَثَّرَ (L1534223) ==
'''تَحَثَّرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534223|18بك|ويكي بيانات: L1534223]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَثَّرَ|18بك|صفحة ويكاموس]] · الجذر: حثر · ([[toolforge:ar-senses/review/L1534223|رابط المُفردة في الأداة]])
المعنى لفعل حثر، الرجاء إصلاحه.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:52، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَثْرَفَ (L1534226) ==
'''حَثْرَفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534226|18بك|ويكي بيانات: L1534226]] [[ملف:Wiktionary-logo.svg|وصلة=حَثْرَفَ|18بك|صفحة ويكاموس]] · الجذر: حثرف · ([[toolforge:ar-senses/review/L1534226|رابط المُفردة في الأداة]])
المعنى الصحيح زعزعه وحركه، انظر تاج العروس جزء 23 صفحة 118.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:09، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَظْرَبَ (L1534501) ==
'''تَحَظْرَبَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534501|18بك|ويكي بيانات: L1534501]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَظْرَبَ|18بك|صفحة ويكاموس]] · الجذر: حظرب · ([[toolforge:ar-senses/review/L1534501|رابط المُفردة في الأداة]])
دًمج المعنيان ووُضعت أمثلة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:32، 16 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَافَلَ (L1534527) ==
'''حَافَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534527|18بك|ويكي بيانات: L1534527]] [[ملف:Wiktionary-logo.svg|وصلة=حَافَلَ|18بك|صفحة ويكاموس]] · الجذر: حفل · ([[toolforge:ar-senses/review/L1534527|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر المذكورة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:59، 16 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْقَوْقَفَ (L1489579) ==
'''اِحْقَوْقَفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1489579|18بك|ويكي بيانات: L1489579]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْقَوْقَفَ|18بك|صفحة ويكاموس]] · الجذر: حقف · ([[toolforge:ar-senses/review/L1489579|رابط المُفردة في الأداة]])
المعاني الأربعة مكررة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:52، 17 أغسطس 2026 (ت ع م)
== معجم مقاييس اللغة ==
مرحبا بالزملاء، روابط الكتاب الموجودة في الأداة غير دقيقة وقد كنت أظن أن الاختلاف في مفردة أو اثنتين لكن تبين لي أنها غير دقيقة في جميع المفردات، رقم الصفة صحيح ولكن الرابط بعيد عن الصفحة، تحياتي لكم. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:56، 17 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَكَرَ (L1478743) ==
'''اِحْتَكَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1478743|18بك|ويكي بيانات: L1478743]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَكَرَ|18بك|صفحة ويكاموس]] · الجذر: حكر · ([[toolforge:ar-senses/review/L1478743|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:42، 17 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَكَّرَ (L1534555) ==
'''حَكَّرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534555|18بك|ويكي بيانات: L1534555]] [[ملف:Wiktionary-logo.svg|وصلة=حَكَّرَ|18بك|صفحة ويكاموس]] · الجذر: حكر · ([[toolforge:ar-senses/review/L1534555|رابط المُفردة في الأداة]])
أشك بوجود المفردة المشكلة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:56، 17 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَمِضَ (L1543549) ==
'''حَمِضَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543549|18بك|ويكي بيانات: L1543549]] [[ملف:Wiktionary-logo.svg|وصلة=حَمِضَ|18بك|صفحة ويكاموس]] · الجذر: حمض · ([[toolforge:ar-senses/review/L1543549|رابط المُفردة في الأداة]])
المعاني مختلطة لعدم وضوح حركة الميم في الفعل.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:57، 19 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَسَى (L1486741) ==
'''أَسَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1486741|18بك|ويكي بيانات: L1486741]] [[ملف:Wiktionary-logo.svg|وصلة=أَسَى|18بك|صفحة ويكاموس]] · الجذر: أسي · ([[toolforge:ar-senses/review/L1486741|رابط المُفردة في الأداة]])
الفعل في المراجع أسا من الجذر أسو.--[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 20:03، 20 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِخْتَبَلَ (L1534805) ==
'''اِخْتَبَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534805|18بك|ويكي بيانات: L1534805]] [[ملف:Wiktionary-logo.svg|وصلة=اِخْتَبَلَ|18بك|صفحة ويكاموس]] · الجذر: خبل · ([[toolforge:ar-senses/review/L1534805|رابط المُفردة في الأداة]])
المعنى الثاني مكرر، حذفته.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:03، 21 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَخَاتَلَ (L1487389) ==
'''تَخَاتَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1487389|18بك|ويكي بيانات: L1487389]] [[ملف:Wiktionary-logo.svg|وصلة=تَخَاتَلَ|18بك|صفحة ويكاموس]] · الجذر: ختل · ([[toolforge:ar-senses/review/L1487389|رابط المُفردة في الأداة]])
دُمِج المعنيان.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:09، 21 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَخَاجَأَ (L1534840) ==
'''تَخَاجَأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534840|18بك|ويكي بيانات: L1534840]] [[ملف:Wiktionary-logo.svg|وصلة=تَخَاجَأَ|18بك|صفحة ويكاموس]] · الجذر: خجأ · ([[toolforge:ar-senses/review/L1534840|رابط المُفردة في الأداة]])
لاحظت التباسا أو خلطا بين (تخاجأ وتخاجى وتخاجا).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:22، 22 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَخَارَقَ (L1534942) ==
'''تَخَارَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534942|18بك|ويكي بيانات: L1534942]] [[ملف:Wiktionary-logo.svg|وصلة=تَخَارَقَ|18بك|صفحة ويكاموس]] · الجذر: خرق · ([[toolforge:ar-senses/review/L1534942|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:36، 22 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَآ (L1545136) ==
'''دَآ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1545136|18بك|ويكي بيانات: L1545136]] [[ملف:Wiktionary-logo.svg|وصلة=دَآ|18بك|صفحة ويكاموس]] · الجذر: دأو · ([[toolforge:ar-senses/review/L1545136|رابط المُفردة في الأداة]])
الفعل الصحيح (دَأَى) كما في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:47، 22 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِدْحَوَى (L1535316) ==
'''اِدْحَوَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535316|18بك|ويكي بيانات: L1535316]] [[ملف:Wiktionary-logo.svg|وصلة=اِدْحَوَى|18بك|صفحة ويكاموس]] · الجذر: دحو · ([[toolforge:ar-senses/review/L1535316|رابط المُفردة في الأداة]])
استبدلت المصدر بمصادر أكثر دقة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:49، 23 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَدَرَّهَ (L1535387) ==
'''تَدَرَّهَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535387|18بك|ويكي بيانات: L1535387]] [[ملف:Wiktionary-logo.svg|وصلة=تَدَرَّهَ|18بك|صفحة ويكاموس]] · الجذر: دره · ([[toolforge:ar-senses/review/L1535387|رابط المُفردة في الأداة]])
دره وليس تدره.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:55، 24 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَشَا (L1544094) ==
'''دَشَا''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544094|18بك|ويكي بيانات: L1544094]] [[ملف:Wiktionary-logo.svg|وصلة=دَشَا|18بك|صفحة ويكاموس]] · الجذر: دشو · ([[toolforge:ar-senses/review/L1544094|رابط المُفردة في الأداة]])
أضفت المعنى ووثقته من المعاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:54، 25 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَغِرَ (L1543752) ==
'''دَغِرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543752|18بك|ويكي بيانات: L1543752]] [[ملف:Wiktionary-logo.svg|وصلة=دَغِرَ|18بك|صفحة ويكاموس]] · الجذر: دغر · ([[toolforge:ar-senses/review/L1543752|رابط المُفردة في الأداة]])
للمفردة أكثر من معنى غير مذكور، ولا أدري هي بالكسر أم بالفتح دَغَرَ دَغِرَ.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:03، 25 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَاغَصَ (L1535445) ==
'''دَاغَصَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535445|18بك|ويكي بيانات: L1535445]] [[ملف:Wiktionary-logo.svg|وصلة=دَاغَصَ|18بك|صفحة ويكاموس]] · الجذر: دغص · ([[toolforge:ar-senses/review/L1535445|رابط المُفردة في الأداة]])
حذفت المعاني الثلاثة الأخيرة لأنها مختلطة بمفردة (دَاغَشَ).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:42، 25 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِدَّمَسَ (L1535554) ==
'''اِدَّمَسَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535554|18بك|ويكي بيانات: L1535554]] [[ملف:Wiktionary-logo.svg|وصلة=اِدَّمَسَ|18بك|صفحة ويكاموس]] · الجذر: دمس · ([[toolforge:ar-senses/review/L1535554|رابط المُفردة في الأداة]])
حذفت المصدرين وأضفت تهذيب اللغة لورود المفردة فيه ج=12 ص=263.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:13، 28 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَدَمْشَقَ (L1535561) ==
'''تَدَمْشَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535561|18بك|ويكي بيانات: L1535561]] [[ملف:Wiktionary-logo.svg|وصلة=تَدَمْشَقَ|18بك|صفحة ويكاموس]] · الجذر: دمشق · ([[toolforge:ar-senses/review/L1535561|رابط المُفردة في الأداة]])
المفردة غير موجودة والمثال غير موجود.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:29، 28 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَنَّأَ (L1535578) ==
'''دَنَّأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535578|18بك|ويكي بيانات: L1535578]] [[ملف:Wiktionary-logo.svg|وصلة=دَنَّأَ|18بك|صفحة ويكاموس]] · الجذر: دنأ · ([[toolforge:ar-senses/review/L1535578|رابط المُفردة في الأداة]])
لا أظن الفعل مهموزا.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:19، 28 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِدَّنَى (L1535595) ==
'''اِدَّنَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535595|18بك|ويكي بيانات: L1535595]] [[ملف:Wiktionary-logo.svg|وصلة=اِدَّنَى|18بك|صفحة ويكاموس]] · الجذر: دنو · ([[toolforge:ar-senses/review/L1535595|رابط المُفردة في الأداة]])
المثال في صفحة 273 وأظنه بمعنى مختلف.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:43، 29 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَبْشَبَ (L1537222) ==
'''شَبْشَبَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537222|18بك|ويكي بيانات: L1537222]] [[ملف:Wiktionary-logo.svg|وصلة=شَبْشَبَ|18بك|صفحة ويكاموس]] · الجذر: شبشب · ([[toolforge:ar-senses/review/L1537222|رابط المُفردة في الأداة]])
حذف المعنى الثاني لأنه خطأ من الأداة بسبب وجود خطأ مطبعي في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:13، 31 أغسطس 2026 (ت ع م)
:هل تحويل حركات من فتحة الى الكسرة يحل مشكلة؟ [[مستخدم:يزن البلوي|يزن البلوي]] ([[نقاش المستخدم:يزن البلوي|نقاش]]) 13:32، 1 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِنْشَبَحَ (L1537214) ==
'''اِنْشَبَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537214|18بك|ويكي بيانات: L1537214]] [[ملف:Wiktionary-logo.svg|وصلة=اِنْشَبَحَ|18بك|صفحة ويكاموس]] · الجذر: شبح · ([[toolforge:ar-senses/review/L1537214|رابط المُفردة في الأداة]])
استبدلت مقاييس اللغة بجمهرة اللغة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:33، 2 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَاجَّ (L1537248) ==
'''شَاجَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537248|18بك|ويكي بيانات: L1537248]] [[ملف:Wiktionary-logo.svg|وصلة=شَاجَّ|18بك|صفحة ويكاموس]] · الجذر: شجج · ([[toolforge:ar-senses/review/L1537248|رابط المُفردة في الأداة]])
استخراج خاطئ، لم أجد التصريف في بقية المراجع.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:34، 4 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَرَّى (L1485717) ==
'''تَبَرَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1485717|18بك|ويكي بيانات: L1485717]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَرَّى|18بك|صفحة ويكاموس]] · الجذر: بري · ([[toolforge:ar-senses/review/L1485717|رابط المُفردة في الأداة]])
الفعل في المراجع "تَبرأ" من جذر برأ وليس "تَبَرَّى" من جذر بري --[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 12:29، 5 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَحَطَ (L1489005) ==
'''شَحَطَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1489005|18بك|ويكي بيانات: L1489005]] [[ملف:Wiktionary-logo.svg|وصلة=شَحَطَ|18بك|صفحة ويكاموس]] · الجذر: شحط · ([[toolforge:ar-senses/review/L1489005|رابط المُفردة في الأداة]])
خلل وأخطاء غير معروفة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:19، 5 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَشْحَنَ (L1537270) ==
'''أَشْحَنَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537270|18بك|ويكي بيانات: L1537270]] [[ملف:Wiktionary-logo.svg|وصلة=أَشْحَنَ|18بك|صفحة ويكاموس]] · الجذر: شحن · ([[toolforge:ar-senses/review/L1537270|رابط المُفردة في الأداة]])
المعنى اأخير لـ(أحشن) وليس لـ(أشحن).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:29، 6 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَرَّى (L1537351) ==
'''شَرَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537351|18بك|ويكي بيانات: L1537351]] [[ملف:Wiktionary-logo.svg|وصلة=شَرَّى|18بك|صفحة ويكاموس]] · الجذر: شري · ([[toolforge:ar-senses/review/L1537351|رابط المُفردة في الأداة]])
لا أعلم إن كان حرف الراء مشددا أم لا.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:01، 7 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَرِفَ (L1544475) ==
'''شَرِفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544475|18بك|ويكي بيانات: L1544475]] [[ملف:Wiktionary-logo.svg|وصلة=شَرِفَ|18بك|صفحة ويكاموس]] · الجذر: شرف · ([[toolforge:ar-senses/review/L1544475|رابط المُفردة في الأداة]])
هل هي بضم الراء أم بكسرها؟<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:54، 7 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَشْدَى (L1537300) ==
'''أَشْدَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537300|18بك|ويكي بيانات: L1537300]] [[ملف:Wiktionary-logo.svg|وصلة=أَشْدَى|18بك|صفحة ويكاموس]] · الجذر: شدو · ([[toolforge:ar-senses/review/L1537300|رابط المُفردة في الأداة]])
استخراج الأداة خاطئ.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 23:44، 8 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: جَاجَ (L1544958) ==
'''جَاجَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544958|18بك|ويكي بيانات: L1544958]] [[ملف:Wiktionary-logo.svg|وصلة=جَاجَ|18بك|صفحة ويكاموس]] · الجذر: جوج · ([[toolforge:ar-senses/review/L1544958|رابط المُفردة في الأداة]])
الفعل في المرجع جِيج من جذر جيج.--[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 12:36، 10 سبتمبر 2026 (ت ع م)
dyapnd4o4vmrhvtxx5v5beq9f44k5ri
1159049
1158997
2026-09-10T12:53:29Z
إسلام
12622
/* بلاغ من أداة مراجعة المعاني: جَاثَ (L1544257) */ قسم جديد
1159049
wikitext
text/x-wiki
{{رأس صفحة نقاش}}
== بلاغ من أداة مراجعة المعاني: حَلَّى (L1534604) ==
'''حَلَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534604|18بك|ويكي بيانات: L1534604]] [[ملف:Wiktionary-logo.svg|وصلة=حَلَّى|18بك|صفحة ويكاموس]] · الجذر: حلو · ([[toolforge:ar-senses/review/L1534604|رابط المُفردة في الأداة]])
إبلاغ من الزميل {{مس|رِفْد}}: ''لا يمكن نشرها في ويكاموس عند الضغط على زر النشر يظهر: "خطأ: الصفحة موجودة بالفعل".'' --[[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 11:27، 27 يوليو 2026 (ت ع م)
:شكرا لك @[[مستخدم:رِفْد|رِفْد]] على الإبلاغ. المشكلة في الفعل حَلَّى (وأفعال آخرين) أَنَّه يُوَلَّدُ من جذرين: ح-ل-ي و ح-ل-و. في ويكي بيانات توجد وحدتان معجميتان، واحدة لكل فعل، لكن في ويكاموس لا يُمكن إنشاء صفحتين بنفس الاسم. سأفكر في حل لهذه المشكلة وأوافيك بالجديد. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 11:28، 27 يوليو 2026 (ت ع م)
::حالة أخرى حيث يشترك جذران في نفس صيغة الفعل:
::* جذر ت-ل-و على وزن تفعّل => [[تَتَلَّى]] ([https://ar-senses.toolforge.org/review/L1533461 رابط المُفردة في الأداة]).
::* جذر ت-ل-ي على وزن تفعّل => [[تَتَلَّى]]
::[[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 11:42، 27 يوليو 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِسْتَجَاشَ (L1534157) ==
'''اِسْتَجَاشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534157|18بك|ويكي بيانات: L1534157]] [[ملف:Wiktionary-logo.svg|وصلة=اِسْتَجَاشَ|18بك|صفحة ويكاموس]] · الجذر: جيش · ([[toolforge:ar-senses/review/L1534157|رابط المُفردة في الأداة]])
المعنى الثاني غير موجود في المصدر في صفحة المفردة (ص=603) والحديث الموجود في صفحة 115 غير مفسر بهذا المعنى أيضا. --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:40، 27 يوليو 2026 (ت ع م)
<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. -->
:{{ر|أبو هشام}} بخصوص المعنى الثاني، رجعتُ إلى ص=603 ووجدتُ المعنى حسب الوارد في الأداة: {{اقتباس مضمن|استجاش الأمير من مكان كذا: طلب جيشًا وجمعه. '''و- ت القدر: غلت.'''}}
:{{ر|Michel Bakni}} بخصوص المعنى الثالث (ص=115)، يبدو المعنى صحيحًا لكن الأداة استَنْبَطَتْهُ من مثال وارد في المعجم لا من تعريف للكلمة، ما رأيك؟
:*الاقتباس من المصدر: {{اقتباس مضمن|فَمَرَّ الْجَيْشُ عَلَى غَطَفَانَ '''فَاسْتَجَاشُوهُمْ''' عَلَى بَنِي سُليم، فَهَزَمَتْ بَنُو سُلَيم جيشَ النُّعْمَانِ}}
:*تعريف المعنى كما استخرجَتْهُ الأداة من النص السابق: {{اقتباس مضمن|اِسْتَجَاشَ القومَ على فلان: استنفرهم وحرّضهم عليه}}
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:23، 6 أغسطس 2026 (ت ع م).
::نعم أتفق مع هذا الطرح. [[مستخدم:Michel Bakni|Michel Bakni]] ([[نقاش المستخدم:Michel Bakni|نقاش]]) 14:25، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: جَوَّهَ (L1534145) ==
'''جَوَّهَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534145|18بك|ويكي بيانات: L1534145]] [[ملف:Wiktionary-logo.svg|وصلة=جَوَّهَ|18بك|صفحة ويكاموس]] · الجذر: جوه · ([[toolforge:ar-senses/review/L1534145|رابط المُفردة في الأداة]])
المعنى بهذا التصريف خطأ، لم أعثر على جوّه فلانا أي جعله وجيها، ولم أجد جوّه السقاء أي رقعه بل وجدت جواه في معجم متن اللغة. --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:48، 27 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك، المشكلة هي أن الأداة أخذت الجذر (جَوَهَ) وألحقت به معنى الفرع (وجَّهَ أو أَوْجَهَ، كحال: أَوْجَهْتُهُ أنا ووَجَّهْتُهُ)، سوف نعمل على إصلاحها.
:{{ر|ForzaGreen}} خطوات قادمة:
:#يجب أن نتوثَّق من أن الأداة تُميِّزُ الجذر عن الفرع. في هذه الحالة، أخذت الأداة الجذر ('''جَوَهَ''') وشكَّلتهُ ('''جَوَّهَ''')، ثم ألحقَتْ به معنى خاطئًا للمشتق.
:#بناءً على ما نراهُ هنا وقي حالات أخرى، نحتاج إلى '''خيار للمراجع لتعديل عنوان الصفحة'''، فلو أمكنهُ تبديل العنوان في هذه الحالة إلى '''وجَّهَ''' أو '''أَوْجَهَ''' لكان صحيحًا.
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 13:54، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: سَدَسَ (L1547049) ==
'''سَدَسَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1547049|18بك|ويكي بيانات: L1547049]] [[ملف:Wiktionary-logo.svg|وصلة=سَدَسَ|18بك|صفحة ويكاموس]] · الجذر: سدس · ([[toolforge:ar-senses/review/L1547049|رابط المُفردة في الأداة]])
المعنى الثاني مكرر، استبدلته وأضفت مصادر. --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:04، 28 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك ونعمل على التوثّق من مسألة تكرار المعاني --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 13:58، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: تَسَدَّى (L1536864) ==
'''تَسَدَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1536864|18بك|ويكي بيانات: L1536864]] [[ملف:Wiktionary-logo.svg|وصلة=تَسَدَّى|18بك|صفحة ويكاموس]] · الجذر: سدي · ([[toolforge:ar-senses/review/L1536864|رابط المُفردة في الأداة]])
خلل في رقم صفحة القاموس المحيط، ولا توجد شواهد قوية على المعنى الأول، أظن أن المفردة بحاجة لمراجعة وإعادة ترتيب المعاني.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:44، 29 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} متفّق، {{اقتباس مضمن|والحائكُ يُسَدِّي الثَّوْبَ ويَتَسَدّاه}} أي يحيكه لنفسه.
:{{ر|ForzaGreen}} يبدو أن النموذج اختلَطَ عليه الأمر أثناء دمج المعاني، ربما خصوصًا من لسان العرب ({{اقتباس مضمن|والحائكُ يُسَدِّي الثَّوْبَ ويَتَسَدّاه}})، فخرجَ بالمعنى المبتدع: {{اقتباس مضمن|تَسَدَّى الثوبَ: أقام سَداه لنفسه}}، وليس له مثيل في المصادر.
:'''الخطوات القادمة المقترحة''': أشتَبِهُ في أن النموذج يفقد موثوقيته حين دَمْجَ المعاني من عددٍ كبير من المصادر (5 مصادر في هذه الحالة)، '''أقترح وَضْعَ حدّ أعلى للمصادر التي نستخدمها في استخراج المعنى، ربما 3 للوقت الحاضر'''.
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:10، 6 أغسطس 2026 (ت ع م).
::وضع حد للمصادر آليا قد يحرم المفردة من المصدر الأقوى والأدق. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:30، 6 أغسطس 2026 (ت ع م)
:{{أصلح}} الخلل في رقم صفحة القاموس المحيط، لهذه المُفردة ولمفردات أخرى. يبدو أن المشكل كان سببه عشوائية النموذج اللغوي، إذ كان يُغيِّر رقم الصفحة في أقل من 1% من الحالات. عدّلتُ أداة توليد المعاني حتى لا يتكرر الخطأ.
:بالنسبة للمصادر، أُفضل الإبقاء عليها جميعا. سنُجرب مع {{مس|عباد ديرانية}} تعديل تعليمات النموذج لتحسين المُخْرَجات ولإصلاح مشاكل أخرى، لا سيما المعاني المُكررة. -- [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 23:47، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَسَافَدَ (L1497488) ==
'''تَسَافَدَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1497488|18بك|ويكي بيانات: L1497488]] [[ملف:Wiktionary-logo.svg|وصلة=تَسَافَدَ|18بك|صفحة ويكاموس]] · الجذر: سفد · ([[toolforge:ar-senses/review/L1497488|رابط المُفردة في الأداة]])
اكتفيت بالمعنى الأول بسبب التكرار.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 11:51، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} ملاحظة للعمل على تكرار المعاني، المعنى 1 و2 متماثلان والثاني هو الأوضح للمستخدم المعاصر --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:13، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: سَافَحَ (L1487289) ==
'''سَافَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1487289|18بك|ويكي بيانات: L1487289]] [[ملف:Wiktionary-logo.svg|وصلة=سَافَحَ|18بك|صفحة ويكاموس]] · الجذر: سفح · ([[toolforge:ar-senses/review/L1487289|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لأنه مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:42، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} حالة تكرار أخرى مؤكدة في المعنى 1 والمعنى 2 --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:14، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: تَرَأَّمَ (L1535813) ==
'''تَرَأَّمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535813|18بك|ويكي بيانات: L1535813]] [[ملف:Wiktionary-logo.svg|وصلة=تَرَأَّمَ|18بك|صفحة ويكاموس]] · الجذر: رأم · ([[toolforge:ar-senses/review/L1535813|رابط المُفردة في الأداة]])
دمجت المعنيين وصححت رقم الجزء والصفحة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:58، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} حالة تكرار مؤكّدة بين المعنى 1 و2، كما يأتي:
:#{{اقتباس مضمن|تَرَأَّمَ الشيءَ: أحبَّه وألِفَه وعطف عليه وترحم عليه}}
:#{{اقتباس مضمن|تَرَأَّمَ الصبيَّ: ترحَّم عليه}}
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:26، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: جَاوَى (L1534151) ==
'''جَاوَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534151|18بك|ويكي بيانات: L1534151]] [[ملف:Wiktionary-logo.svg|وصلة=جَاوَى|18بك|صفحة ويكاموس]] · الجذر: جوي · ([[toolforge:ar-senses/review/L1534151|رابط المُفردة في الأداة]])
خطأ: الصفحة 'جَاوَى' موجودة بالفعل <!-- يظهر هكذا: خطأ: الصفحة 'جَاوَى' موجودة بالفعل. --> --[[مستخدم:رِفْد|رِفْد]] ([[نقاش المستخدم:رِفْد|نقاش]]) 22:15، 30 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} أتقصد أنكَ أنشأتَ الصفحة سابقًا عبر الأداة ثم ظهرت لك مرة أخرى في أداة مراجعة المعاني؟ --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:27، 6 أغسطس 2026 (ت ع م).
::مرحبا {{ر|عباد ديرانية}} أعتقد أن الخلل هو وجود صفحة مكررة في ويكي بيانات يلزم دمجها، تحياتي لك. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:59، 6 أغسطس 2026 (ت ع م)
:::+أضيفُ الاقتراح الممتاز '''إضافة تنبيهٍ بالخط الأحمر إلى الأداة في حال لو أن الصفحة أُنْشِأَتْ وحُذِفَتْ سابقًا''' تنبيهًا للمستخدم --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 16:07، 6 أغسطس 2026 (ت ع م).
::::هذا المشكل تكرر مرات عديدة (انظر النقاش أعلاه عن الفعل '''حَلَّى''') والسبب هو المُفردات التي تشترك في نفس الجذر. حاليا لا يوجد حل تقني للمسألة، لكنها في بالي وسأفكر في حل. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 22:48، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَجَاذَى (L1533824) ==
'''تَجَاذَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533824|18بك|ويكي بيانات: L1533824]] [[ملف:Wiktionary-logo.svg|وصلة=تَجَاذَى|18بك|صفحة ويكاموس]] · الجذر: جذي · ([[toolforge:ar-senses/review/L1533824|رابط المُفردة في الأداة]])
خطأ: الصفحة 'تَجَاذَى' موجودة بالفعل <!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:رِفْد|رِفْد]] ([[نقاش المستخدم:رِفْد|نقاش]]) 22:19، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} هذه ملاحظة متكرّرة من المستخدمين، يظهر أننا نحتاجُ إلى '''تحديث الأداة بوتيرة يومية لإزالة الصفحات المنشأة سابقًا'''، إلا لو كان هذا خطأً تقنيًا مختلفًا يُسبِّبُ التكرار --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 15:48، 6 أغسطس 2026 (ت ع م).
::كنت أصلحت هذه الكلمة مع كلمات أخرى لكن لم أصلح بعد مصدر الخطأ، وهو الأفعال التي لها جذور مختلفة لكنها تشترك في نفس الصيغة. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 17:51، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَجْذَى (L1533823) ==
'''أَجْذَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533823|18بك|ويكي بيانات: L1533823]] [[ملف:Wiktionary-logo.svg|وصلة=أَجْذَى|18بك|صفحة ويكاموس]] · الجذر: جذي · ([[toolforge:ar-senses/review/L1533823|رابط المُفردة في الأداة]])
خطأ: الصفحة 'أَجْذَى' موجودة بالفعل <!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:رِفْد|رِفْد]] ([[نقاش المستخدم:رِفْد|نقاش]]) 22:20، 30 يوليو 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: زَأْزَأَ (L1536388) ==
'''زَأْزَأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1536388|18بك|ويكي بيانات: L1536388]] [[ملف:Wiktionary-logo.svg|وصلة=زَأْزَأَ|18بك|صفحة ويكاموس]] · الجذر: زأزأ · ([[toolforge:ar-senses/review/L1536388|رابط المُفردة في الأداة]])
حذفت المعنى الخامس لأنه مزيد بتاء في المراجع.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:35، 4 أغسطس 2026 (ت ع م)
:{{ر|Michel Bakni}} المعنى الخامس مزيدٌ بتاء التأنيث، فهل نُنْشِئُ له صفحةً منفصلةً برأيك أم نضيفه إلى ذات الصفحة مع تحويلة؟
:شرح المعنى الخامس: {{اقتباس مضمن|زَأْزَأَتِ المرأةُ: مشت وحرّكت أعطافها كمشية القِصار}}
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:33، 6 أغسطس 2026 (ت ع م).
::نعم، يلزم إنشاء صفحة لكل فعل بكل تصريف، هذا التصريف: المؤنث المفرد الغائب. [[مستخدم:Michel Bakni|Michel Bakni]] ([[نقاش المستخدم:Michel Bakni|نقاش]]) 14:36، 6 أغسطس 2026 (ت ع م)
:::{{ر|ForzaGreen}} إذًا يلزمنا التوثّق من تمييز النموذج للمؤنّث وتخصيصه صفحة مستقلّة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:54، 6 أغسطس 2026 (ت ع م).
::::أنا رأيي كل المعاني والأمثلة تبقى في صفحة الفعل الرئيسية، والصيغ المُصرفة تحيل إلى الصفحة الرئيسية. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 15:06، 6 أغسطس 2026 (ت ع م)
::::متّفق مع وائل هنا بالواقع، الأفضل هو تخفيف الإحالات إن أمكن وجَمْع تصريفات المذكر والمؤنث والعدد بصفحة واحدة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 15:52، 6 أغسطس 2026 (ت ع م).
:::::لكن الذي يراجع القوالب يفهم أن لكل تصريف صفحة خاصة به لذلك أنا أتفق مع الزميل ميشيل على إنشاء صفحة لكل تصريف، تحياتي لكم. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:10، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَزْعَلَ (L1476504) ==
'''أَزْعَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1476504|18بك|ويكي بيانات: L1476504]] [[ملف:Wiktionary-logo.svg|وصلة=أَزْعَلَ|18بك|صفحة ويكاموس]] · الجذر: زعل · ([[toolforge:ar-senses/review/L1476504|رابط المُفردة في الأداة]])
دمجت المعنى الأول والثالث لأن المعنى الثالث مكرر عن الأول.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 10:04، 4 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك ونعمل على معالجة مسألة المعاني المُكرَّرة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:34، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: زَعِلَ (L1487695) ==
'''زَعِلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1487695|18بك|ويكي بيانات: L1487695]] [[ملف:Wiktionary-logo.svg|وصلة=زَعِلَ|18بك|صفحة ويكاموس]] · الجذر: زعل · ([[toolforge:ar-senses/review/L1487695|رابط المُفردة في الأداة]])
المعنى الأول (مرح) غير موجود في المراجع، والمعنى الثالث بحاجة إلى تدقيق، تحتاج المفردة إلى مراجعة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 10:41، 4 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} من معجم العين: {{اقتباس مضمن|الزَّعِل: النشيط '''الأشر'''. زَعِلَ يَزْعَلُ زَعَلًا.}}، الأشر هنا بمعنى المرح (مصدر [https://www.islamweb.net/ar/library/content/122/137/%D8%A3%D8%B4%D8%B1 من لسان العرب]).
:{{ر|ForzaGreen}} المعنى الثالث فيه اختلاطٌ بين معانٍ عِدّة، مثل: {{اقتباس مضمن|والزعل: '''المتضور جوعا'''}} (الجوهري) و{{اقتباس مضمن|الزَّعَلُ '''كالعَلَزِ مِنَ المَرَض'''}} (لسان العرب)، والمعنى في الأداة جاءَ: {{اقتباس مضمن|زَعِلَ من المرض أو الجوع: تضوّر وتلوّى وقلِق فلم يستقر}}.
:'''الخطوات القادمة المقترحة''': أشتبه أن النموذج اختلط عليه دمج المعنى عبر 5 مصادر، والأفضل والأسهل للمراجع (فمن الصعب جدًا تقصّي 5 مراجع مختلفة) أن '''نضعَ حدًا بين مصدرَيْن إلى ثلاثة مصادر للمعنى الواحد''' --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:48، 6 أغسطس 2026 (ت ع م).
::نعم، في الحقيقة تحتوي بعض المفردات على مراجع كثيرة وأتفق معك على الاستشهاد بمرجعين أو ثلاث بأقصى حد لكن لو يكون انتقاء المراجع يدويا أفضل لاختيار الأنسب والأقرب إلا إذا كان الاختيار الآلي قادرا على انتقاء المرجع الأنسب أو الأقرب أو الأدق. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:21، 6 أغسطس 2026 (ت ع م)
:::إشارة {{ر|عباد ديرانية}} أرجو مراجعة تقليل المراجع آليا فقد تحرم الأداةُ المفردةَ من المراجع الأدق وتضع المراجع الأبعد. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:23، 6 أغسطس 2026 (ت ع م)
::::{{ر|أبو هشام}} لا بأس بذلك، لكن إن تركنا للمُرَاجِعِ اختيار المصادر الأدق فهذا يعني أن عليهم مراجعة 5 - 6 مصادر في بعض الحالات، فما هو الأفضل بالنسبة لك بين هذه الخيارات؟ أهو انتقاء المصادر الأفضل يدويًا أم تقليل عدد المصادر التي وجبت مراجعتها؟ --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 15:51، 6 أغسطس 2026 (ت ع م).
:::::{{ر|عباد ديرانية}} أميل إلى الانتقاء اليدوي أو البشري دون تقليل للمصادر فالمراجِع قادر على انتقاء المصدر الأنسب للمفردة، وإن كان للزملاء رأي آخر فلا أعترض، تحياتي. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:15، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَلَكَ (L1502490) ==
'''أَلَكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1502490|18بك|ويكي بيانات: L1502490]] [[ملف:Wiktionary-logo.svg|وصلة=أَلَكَ|18بك|صفحة ويكاموس]] · الجذر: ألك · ([[toolforge:ar-senses/review/L1502490|رابط المُفردة في الأداة]])
حذفت المرجع الأخير من المعنى الثاني لأن فيه خطأ فقد استُشهد بصفحة 132 من معجم متن اللغة وفيها (أَلَكَ لَجَأٌ يَا فلَان) وهو استشهاد خاطئ لأن (ألك) هنا استفهام وليست فعل.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:33، 5 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك وسوف نعمل على زيادة دقة ضبط المعاني المتقاربة بالأداة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:49، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: اِبْتَسَطَ (L1533014) ==
'''اِبْتَسَطَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533014|18بك|ويكي بيانات: L1533014]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْتَسَطَ|18بك|صفحة ويكاموس]] · الجذر: بسط · ([[toolforge:ar-senses/review/L1533014|رابط المُفردة في الأداة]])
غير موثقة، لا يوجد فيها مصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:04، 5 أغسطس 2026 (ت ع م)
:{{ر|ForzaGreen}} حالة غريبةٌ ليس فيه أي مصدر للمعنى المستخرج! --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:49، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: أَبْشَكَ (L1533037) ==
'''أَبْشَكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533037|18بك|ويكي بيانات: L1533037]] [[ملف:Wiktionary-logo.svg|وصلة=أَبْشَكَ|18بك|صفحة ويكاموس]] · الجذر: بشك · ([[toolforge:ar-senses/review/L1533037|رابط المُفردة في الأداة]])
هذه اللفظة بحاجة لمراجعة فلها عدة معان.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:50، 6 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} هل لكَ أن تُوضِحَ المقصود؟ لم أجد كلمة أبشك في المرجع أصلًا للأسف --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:52، 6 أغسطس 2026 (ت ع م).
::{{ر|عباد ديرانية}} وجدت هذا ('''أبشك''' الكلام: كذب فيه: تخرص فيه كاذبًا.) في معجم متن اللغة ج=1 ص=299، وهذا أيضا (وبَشَكَ الْكَلَامَ يَبْشُكه بَشْكًا و'''أبشَكه''': تَخَرَّصهُ كَاذِبًا،) في لسان العرب ج=10 ص=400، ولم أجد أن معناها '''أسرع'''، تحياتي. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:43، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَاطَأَ (L1496404) ==
'''بَاطَأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1496404|18بك|ويكي بيانات: L1496404]] [[ملف:Wiktionary-logo.svg|وصلة=بَاطَأَ|18بك|صفحة ويكاموس]] · الجذر: بطأ · ([[toolforge:ar-senses/review/L1496404|رابط المُفردة في الأداة]])
لا يوجد التصريف في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:43، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَبْطَحَ (L1533063) ==
'''أَبْطَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533063|18بك|ويكي بيانات: L1533063]] [[ملف:Wiktionary-logo.svg|وصلة=أَبْطَحَ|18بك|صفحة ويكاموس]] · الجذر: بطح · ([[toolforge:ar-senses/review/L1533063|رابط المُفردة في الأداة]])
غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:47، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَطَّحَ (L1533066) ==
'''بَطَّحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533066|18بك|ويكي بيانات: L1533066]] [[ملف:Wiktionary-logo.svg|وصلة=بَطَّحَ|18بك|صفحة ويكاموس]] · الجذر: بطح · ([[toolforge:ar-senses/review/L1533066|رابط المُفردة في الأداة]])
هل هي بطَح أم بطّح؟<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:48، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَطْرَقَ (L1533070) ==
'''تَبَطْرَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533070|18بك|ويكي بيانات: L1533070]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَطْرَقَ|18بك|صفحة ويكاموس]] · الجذر: بطرق · ([[toolforge:ar-senses/review/L1533070|رابط المُفردة في الأداة]])
هذا الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:58، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَهُؤَ (L1545462) ==
'''بَهُؤَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1545462|18بك|ويكي بيانات: L1545462]] [[ملف:Wiktionary-logo.svg|وصلة=بَهُؤَ|18بك|صفحة ويكاموس]] · الجذر: بهأ · ([[toolforge:ar-senses/review/L1545462|رابط المُفردة في الأداة]])
معناها (أنس) كما في لسان العرب ج=1 ص=35 ومعجم متن اللغة ج=1 ص=353.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:29، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَاهَتَ (L1533268) ==
'''تَبَاهَتَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533268|18بك|ويكي بيانات: L1533268]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَاهَتَ|18بك|صفحة ويكاموس]] · الجذر: بهت · ([[toolforge:ar-senses/review/L1533268|رابط المُفردة في الأداة]])
حسنتُ المعنى وأضفت مصدرين.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:01، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَعِرَ (L1544067) ==
'''بَعِرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544067|18بك|ويكي بيانات: L1544067]] [[ملف:Wiktionary-logo.svg|وصلة=بَعِرَ|18بك|صفحة ويكاموس]] · الجذر: بعر · ([[toolforge:ar-senses/review/L1544067|رابط المُفردة في الأداة]])
'''[[بَعِرَ]]''' الجمل بالكسر صار بعيرا كما في القاموس المحيط ص=352.
المفردة (بَعَرَ) وهي موجودة في المشروع '''[[بَعَرَ]]''' فيلزم تحديثها أو حذفها لأنها خاطئة انظر القاموس المحيط ص=694 وإنشاء صفحة جديدة ببيانات صحيحة هي البيانات الموجودة في الأداة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:31، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَعَّقَ (L1533113) ==
'''بَعَّقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533113|18بك|ويكي بيانات: L1533113]] [[ملف:Wiktionary-logo.svg|وصلة=بَعَّقَ|18بك|صفحة ويكاموس]] · الجذر: بعق · ([[toolforge:ar-senses/review/L1533113|رابط المُفردة في الأداة]])
هل هي بَعَّقَ بالتشديد أم بَعَقَ بالتخفيف؟<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:02، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَغْزَلَ (L1533126) ==
'''تَبَغْزَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533126|18بك|ويكي بيانات: L1533126]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَغْزَلَ|18بك|صفحة ويكاموس]] · الجذر: بغزل · ([[toolforge:ar-senses/review/L1533126|رابط المُفردة في الأداة]])
المعنى الصحيح '''تبختر''' وله شواهد في أربعة معاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:13، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَقَّمَ (L1533154) ==
'''بَقَّمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533154|18بك|ويكي بيانات: L1533154]] [[ملف:Wiktionary-logo.svg|وصلة=بَقَّمَ|18بك|صفحة ويكاموس]] · الجذر: بقم · ([[toolforge:ar-senses/review/L1533154|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:44، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَقَّمَ (L1533153) ==
'''تَبَقَّمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533153|18بك|ويكي بيانات: L1533153]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَقَّمَ|18بك|صفحة ويكاموس]] · الجذر: بقم · ([[toolforge:ar-senses/review/L1533153|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:50، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَكِئَ (L1543356) ==
'''بَكِئَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543356|18بك|ويكي بيانات: L1543356]] [[ملف:Wiktionary-logo.svg|وصلة=بَكِئَ|18بك|صفحة ويكاموس]] · الجذر: بكأ · ([[toolforge:ar-senses/review/L1543356|رابط المُفردة في الأداة]])
حذفت المعنى الأول لأنه غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:13، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْتَلَتَ (L1533174) ==
'''اِبْتَلَتَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533174|18بك|ويكي بيانات: L1533174]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْتَلَتَ|18بك|صفحة ويكاموس]] · الجذر: بلت · ([[toolforge:ar-senses/review/L1533174|رابط المُفردة في الأداة]])
المفردة غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:35، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَلْدَحَ (L1533193) ==
'''تَبَلْدَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533193|18بك|ويكي بيانات: L1533193]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَلْدَحَ|18بك|صفحة ويكاموس]] · الجذر: بلدح · ([[toolforge:ar-senses/review/L1533193|رابط المُفردة في الأداة]])
أضفت المعنى الثاني، لم تستخرجه الأداة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:54، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْلَنْدَكَ (L1533194) ==
'''اِبْلَنْدَكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533194|18بك|ويكي بيانات: L1533194]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْلَنْدَكَ|18بك|صفحة ويكاموس]] · الجذر: بلدك · ([[toolforge:ar-senses/review/L1533194|رابط المُفردة في الأداة]])
المعنى خاطئ، والمفردة غير موجودة في المصدر.
:المعنى الصحيح ('''اتسع''') موجود في أربعة معاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:00، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَلَّرَ (L1533196) ==
'''تَبَلَّرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533196|18بك|ويكي بيانات: L1533196]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَلَّرَ|18بك|صفحة ويكاموس]] · الجذر: بلر · ([[toolforge:ar-senses/review/L1533196|رابط المُفردة في الأداة]])
إملاء المفردة خاطئ، والصحيح ('''تَرَبَّل''') كما في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:08، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَقَّعَ (L1533145) ==
'''بَقَّعَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533145|18بك|ويكي بيانات: L1533145]] [[ملف:Wiktionary-logo.svg|وصلة=بَقَّعَ|18بك|صفحة ويكاموس]] · الجذر: بقع · ([[toolforge:ar-senses/review/L1533145|رابط المُفردة في الأداة]])
حذفت المعنى الرابع لأنه ورد بالتخفيف.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:18، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِنْبَقَّ (L1533147) ==
'''اِنْبَقَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533147|18بك|ويكي بيانات: L1533147]] [[ملف:Wiktionary-logo.svg|وصلة=اِنْبَقَّ|18بك|صفحة ويكاموس]] · الجذر: بقق · ([[toolforge:ar-senses/review/L1533147|رابط المُفردة في الأداة]])
المعنى خاطئ ولا شواهد عليه في المعاجم والمفردة الموجودة ('''انبعق''') وليس انبق.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:38، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَلَعَ (L1480240) ==
'''بَلَعَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1480240|18بك|ويكي بيانات: L1480240]] [[ملف:Wiktionary-logo.svg|وصلة=بَلَعَ|18بك|صفحة ويكاموس]] · الجذر: بلع · ([[toolforge:ar-senses/review/L1480240|رابط المُفردة في الأداة]])
خطأ في التشكيل فالفعل بَلِعَ وليس بَلَعَ كما في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:34، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْتَلَقَ (L1533220) ==
'''اِبْتَلَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533220|18بك|ويكي بيانات: L1533220]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْتَلَقَ|18بك|صفحة ويكاموس]] · الجذر: بلق · ([[toolforge:ar-senses/review/L1533220|رابط المُفردة في الأداة]])
لم أجد المفردة في المعاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:06، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَلُقَ (L1543358) ==
'''بَلُقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543358|18بك|ويكي بيانات: L1543358]] [[ملف:Wiktionary-logo.svg|وصلة=بَلُقَ|18بك|صفحة ويكاموس]] · الجذر: بلق · ([[toolforge:ar-senses/review/L1543358|رابط المُفردة في الأداة]])
المفردة بالكسر وليس بالضم، انظر '''[[بَلِقَ]]'''.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:52، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْذَارَّ (L1534290) ==
'''اِحْذَارَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534290|18بك|ويكي بيانات: L1534290]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْذَارَّ|18بك|صفحة ويكاموس]] · الجذر: حذر · ([[toolforge:ar-senses/review/L1534290|رابط المُفردة في الأداة]])
خلل في صندوق المعلومات.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:49، 9 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَاتَنَ (L1534214) ==
'''تَحَاتَنَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534214|18بك|ويكي بيانات: L1534214]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَاتَنَ|18بك|صفحة ويكاموس]] · الجذر: حتن · ([[toolforge:ar-senses/review/L1534214|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لأنه مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 12:31، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَتَنَ (L1534213) ==
'''اِحْتَتَنَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534213|18بك|ويكي بيانات: L1534213]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَتَنَ|18بك|صفحة ويكاموس]] · الجذر: حتن · ([[toolforge:ar-senses/review/L1534213|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 12:37، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَاتَّ (L1496477) ==
'''تَحَاتَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1496477|18بك|ويكي بيانات: L1496477]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَاتَّ|18بك|صفحة ويكاموس]] · الجذر: حتت · ([[toolforge:ar-senses/review/L1496477|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:36، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْزَوْزَى (L1534387) ==
'''اِحْزَوْزَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534387|18بك|ويكي بيانات: L1534387]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْزَوْزَى|18بك|صفحة ويكاموس]] · الجذر: حزو · ([[toolforge:ar-senses/review/L1534387|رابط المُفردة في الأداة]])
المفردة غير موجودة في المصدر ولها أكثر من معنى في المصادر الأخرى.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:02، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَذَّقَ (L1484084) ==
'''تَحَذَّقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1484084|18بك|ويكي بيانات: L1484084]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَذَّقَ|18بك|صفحة ويكاموس]] · الجذر: حذق · ([[toolforge:ar-senses/review/L1484084|رابط المُفردة في الأداة]])
المفردة غير موجودة في المصادر الموجودة، استبدلتها بمصادر أخرى.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:02، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَذَّقَ (L1534295) ==
'''حَذَّقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534295|18بك|ويكي بيانات: L1534295]] [[ملف:Wiktionary-logo.svg|وصلة=حَذَّقَ|18بك|صفحة ويكاموس]] · الجذر: حذق · ([[toolforge:ar-senses/review/L1534295|رابط المُفردة في الأداة]])
لم أجد الفعل المتعدي في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:14، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَذِقَ (L1546050) ==
'''حَذِقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1546050|18بك|ويكي بيانات: L1546050]] [[ملف:Wiktionary-logo.svg|وصلة=حَذِقَ|18بك|صفحة ويكاموس]] · الجذر: حذق · ([[toolforge:ar-senses/review/L1546050|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لأنه تفسير لمفردة فرس وهو مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:56، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَحْزَرَ (L1534363) ==
'''أَحْزَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534363|18بك|ويكي بيانات: L1534363]] [[ملف:Wiktionary-logo.svg|وصلة=أَحْزَرَ|18بك|صفحة ويكاموس]] · الجذر: حزر · ([[toolforge:ar-senses/review/L1534363|رابط المُفردة في الأداة]])
حذفت المعنى الأول لأنه خاطئ وغير مرتبط بالمفردة بل يرتبط بـ (أحزّ).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:06، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَزَّ (L1534366) ==
'''اِحْتَزَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534366|18بك|ويكي بيانات: L1534366]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَزَّ|18بك|صفحة ويكاموس]] · الجذر: حزز · ([[toolforge:ar-senses/review/L1534366|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:12، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَزْمَرَ (L1534382) ==
'''حَزْمَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534382|18بك|ويكي بيانات: L1534382]] [[ملف:Wiktionary-logo.svg|وصلة=حَزْمَرَ|18بك|صفحة ويكاموس]] · الجذر: حزمر · ([[toolforge:ar-senses/review/L1534382|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لارتباطه بـ ([[حَزْفَرَ]]).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:56، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَاسَى (L1534416) ==
'''تَحَاسَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534416|18بك|ويكي بيانات: L1534416]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَاسَى|18بك|صفحة ويكاموس]] · الجذر: حسو · ([[toolforge:ar-senses/review/L1534416|رابط المُفردة في الأداة]])
غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:10، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَاسَى (L1534418) ==
'''حَاسَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534418|18بك|ويكي بيانات: L1534418]] [[ملف:Wiktionary-logo.svg|وصلة=حَاسَى|18بك|صفحة ويكاموس]] · الجذر: حسو · ([[toolforge:ar-senses/review/L1534418|رابط المُفردة في الأداة]])
غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:16، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَاقَ (L1534738) ==
'''اِحْتَاقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534738|18بك|ويكي بيانات: L1534738]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَاقَ|18بك|صفحة ويكاموس]] · الجذر: حيق · ([[toolforge:ar-senses/review/L1534738|رابط المُفردة في الأداة]])
دمجت المعنيين لأنها مكرران.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 04:15، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَفَظَ (L1485699) ==
'''اِحْتَفَظَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1485699|18بك|ويكي بيانات: L1485699]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَفَظَ|18بك|صفحة ويكاموس]] · الجذر: حفظ · ([[toolforge:ar-senses/review/L1485699|رابط المُفردة في الأداة]])
لم تضع الأداة بعض أرقام الصفحات والأجزاء.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:19، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَمْحَمَ (L1476725) ==
'''حَمْحَمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1476725|18بك|ويكي بيانات: L1476725]] [[ملف:Wiktionary-logo.svg|وصلة=حَمْحَمَ|18بك|صفحة ويكاموس]] · الجذر: حمحم · ([[toolforge:ar-senses/review/L1476725|رابط المُفردة في الأداة]])
خلل في صندوق المعلومات.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:11، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَيَّفَ (L1534760) ==
'''تَحَيَّفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534760|18بك|ويكي بيانات: L1534760]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَيَّفَ|18بك|صفحة ويكاموس]] · الجذر: حيف · ([[toolforge:ar-senses/review/L1534760|رابط المُفردة في الأداة]])
دمجت المعنيين.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:38، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَشَّكَ (L1534439) ==
'''تَحَشَّكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534439|18بك|ويكي بيانات: L1534439]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَشَّكَ|18بك|صفحة ويكاموس]] · الجذر: حشك · ([[toolforge:ar-senses/review/L1534439|رابط المُفردة في الأداة]])
حرف الشين مشدد.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:12، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْوَالَّ (L1534743) ==
'''اِحْوَالَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534743|18بك|ويكي بيانات: L1534743]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْوَالَّ|18بك|صفحة ويكاموس]] · الجذر: حول · ([[toolforge:ar-senses/review/L1534743|رابط المُفردة في الأداة]])
خلل في صندوق المعلومات.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:59، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِسْتَحَاضَ (L1534730) ==
'''اِسْتَحَاضَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534730|18بك|ويكي بيانات: L1534730]] [[ملف:Wiktionary-logo.svg|وصلة=اِسْتَحَاضَ|18بك|صفحة ويكاموس]] · الجذر: حوض · ([[toolforge:ar-senses/review/L1534730|رابط المُفردة في الأداة]])
الموجود في المصادر استحوض وليس استحاض.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:05، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَاشَ (L1534721) ==
'''اِحْتَاشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534721|18بك|ويكي بيانات: L1534721]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَاشَ|18بك|صفحة ويكاموس]] · الجذر: حوش · ([[toolforge:ar-senses/review/L1534721|رابط المُفردة في الأداة]])
التصريف الموجود في المصادر (احتوش) وليس احتاش.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:34، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِسْتَحَاسَ (L1534716) ==
'''اِسْتَحَاسَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534716|18بك|ويكي بيانات: L1534716]] [[ملف:Wiktionary-logo.svg|وصلة=اِسْتَحَاسَ|18بك|صفحة ويكاموس]] · الجذر: حوس · ([[toolforge:ar-senses/review/L1534716|رابط المُفردة في الأداة]])
استحوس وليس استحاس كما في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:51، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَزْأَلَ (L1534358) ==
'''حَزْأَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534358|18بك|ويكي بيانات: L1534358]] [[ملف:Wiktionary-logo.svg|وصلة=حَزْأَلَ|18بك|صفحة ويكاموس]] · الجذر: حزأل · ([[toolforge:ar-senses/review/L1534358|رابط المُفردة في الأداة]])
مفردة خاطئة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 12:52، 14 أغسطس 2026 (ت ع م)
:فعلا، يبدو أن المُفردة حَزْأَلَ لا توجد. في جدول الأفعال، عندنا فعل واحد من الجذر "ح ز أ ل"، وهو على وزن '''فعلل'''، أي حَزْأَلَ. لكن يبدو أن هذا خاطئ، و أن الوزن الصحيح هو افعللّ، أي احْزَأَلَّ، وهو الذي ذُكِر في معجم [https://app.turath.io/book/7030?page=14881 تاج العروس]. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 21:19، 14 أغسطس 2026 (ت ع م)
:ورد في اللسان أيضًا احزألَّ بمعنى ارتفع وبمعنى اجتمع. [[مستخدم:Michel Bakni|Michel Bakni]] ([[نقاش المستخدم:Michel Bakni|نقاش]]) 21:50، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَنَّشَ (L1534669) ==
'''حَنَّشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534669|18بك|ويكي بيانات: L1534669]] [[ملف:Wiktionary-logo.svg|وصلة=حَنَّشَ|18بك|صفحة ويكاموس]] · الجذر: حنش · ([[toolforge:ar-senses/review/L1534669|رابط المُفردة في الأداة]])
هل هي حَنَّشَ أم حَنَشَ؟ وأظن أن لها معان أخرى.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:28، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْخَنَدَّ (L1532850) ==
'''اِبْخَنَدَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1532850|18بك|ويكي بيانات: L1532850]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْخَنَدَّ|18بك|صفحة ويكاموس]] · الجذر: بخند · ([[toolforge:ar-senses/review/L1532850|رابط المُفردة في الأداة]])
الفعل في المرجع اخْبَنْدَى، لا وجود المفردة اِبْخَنَدَّ--[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 18:52، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَمْيَرَ (L1534650) ==
'''تَحَمْيَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534650|18بك|ويكي بيانات: L1534650]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَمْيَرَ|18بك|صفحة ويكاموس]] · الجذر: حمير · ([[toolforge:ar-senses/review/L1534650|رابط المُفردة في الأداة]])
خطأ في استخراج المعنى، معنى تحمير أي ساء خلقه كما في المصادر أم هذه فيجب أن تكون بغير الياء أي تَحَمَّر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:02، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَبَشَ (L1534178) ==
'''اِحْتَبَشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534178|18بك|ويكي بيانات: L1534178]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَبَشَ|18بك|صفحة ويكاموس]] · الجذر: حبش · ([[toolforge:ar-senses/review/L1534178|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:38، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَثَّرَ (L1534223) ==
'''تَحَثَّرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534223|18بك|ويكي بيانات: L1534223]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَثَّرَ|18بك|صفحة ويكاموس]] · الجذر: حثر · ([[toolforge:ar-senses/review/L1534223|رابط المُفردة في الأداة]])
المعنى لفعل حثر، الرجاء إصلاحه.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:52، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَثْرَفَ (L1534226) ==
'''حَثْرَفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534226|18بك|ويكي بيانات: L1534226]] [[ملف:Wiktionary-logo.svg|وصلة=حَثْرَفَ|18بك|صفحة ويكاموس]] · الجذر: حثرف · ([[toolforge:ar-senses/review/L1534226|رابط المُفردة في الأداة]])
المعنى الصحيح زعزعه وحركه، انظر تاج العروس جزء 23 صفحة 118.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:09، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَظْرَبَ (L1534501) ==
'''تَحَظْرَبَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534501|18بك|ويكي بيانات: L1534501]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَظْرَبَ|18بك|صفحة ويكاموس]] · الجذر: حظرب · ([[toolforge:ar-senses/review/L1534501|رابط المُفردة في الأداة]])
دًمج المعنيان ووُضعت أمثلة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:32، 16 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَافَلَ (L1534527) ==
'''حَافَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534527|18بك|ويكي بيانات: L1534527]] [[ملف:Wiktionary-logo.svg|وصلة=حَافَلَ|18بك|صفحة ويكاموس]] · الجذر: حفل · ([[toolforge:ar-senses/review/L1534527|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر المذكورة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:59، 16 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْقَوْقَفَ (L1489579) ==
'''اِحْقَوْقَفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1489579|18بك|ويكي بيانات: L1489579]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْقَوْقَفَ|18بك|صفحة ويكاموس]] · الجذر: حقف · ([[toolforge:ar-senses/review/L1489579|رابط المُفردة في الأداة]])
المعاني الأربعة مكررة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:52، 17 أغسطس 2026 (ت ع م)
== معجم مقاييس اللغة ==
مرحبا بالزملاء، روابط الكتاب الموجودة في الأداة غير دقيقة وقد كنت أظن أن الاختلاف في مفردة أو اثنتين لكن تبين لي أنها غير دقيقة في جميع المفردات، رقم الصفة صحيح ولكن الرابط بعيد عن الصفحة، تحياتي لكم. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:56، 17 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَكَرَ (L1478743) ==
'''اِحْتَكَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1478743|18بك|ويكي بيانات: L1478743]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَكَرَ|18بك|صفحة ويكاموس]] · الجذر: حكر · ([[toolforge:ar-senses/review/L1478743|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:42، 17 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَكَّرَ (L1534555) ==
'''حَكَّرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534555|18بك|ويكي بيانات: L1534555]] [[ملف:Wiktionary-logo.svg|وصلة=حَكَّرَ|18بك|صفحة ويكاموس]] · الجذر: حكر · ([[toolforge:ar-senses/review/L1534555|رابط المُفردة في الأداة]])
أشك بوجود المفردة المشكلة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:56، 17 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَمِضَ (L1543549) ==
'''حَمِضَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543549|18بك|ويكي بيانات: L1543549]] [[ملف:Wiktionary-logo.svg|وصلة=حَمِضَ|18بك|صفحة ويكاموس]] · الجذر: حمض · ([[toolforge:ar-senses/review/L1543549|رابط المُفردة في الأداة]])
المعاني مختلطة لعدم وضوح حركة الميم في الفعل.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:57، 19 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَسَى (L1486741) ==
'''أَسَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1486741|18بك|ويكي بيانات: L1486741]] [[ملف:Wiktionary-logo.svg|وصلة=أَسَى|18بك|صفحة ويكاموس]] · الجذر: أسي · ([[toolforge:ar-senses/review/L1486741|رابط المُفردة في الأداة]])
الفعل في المراجع أسا من الجذر أسو.--[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 20:03، 20 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِخْتَبَلَ (L1534805) ==
'''اِخْتَبَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534805|18بك|ويكي بيانات: L1534805]] [[ملف:Wiktionary-logo.svg|وصلة=اِخْتَبَلَ|18بك|صفحة ويكاموس]] · الجذر: خبل · ([[toolforge:ar-senses/review/L1534805|رابط المُفردة في الأداة]])
المعنى الثاني مكرر، حذفته.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:03، 21 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَخَاتَلَ (L1487389) ==
'''تَخَاتَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1487389|18بك|ويكي بيانات: L1487389]] [[ملف:Wiktionary-logo.svg|وصلة=تَخَاتَلَ|18بك|صفحة ويكاموس]] · الجذر: ختل · ([[toolforge:ar-senses/review/L1487389|رابط المُفردة في الأداة]])
دُمِج المعنيان.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:09، 21 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَخَاجَأَ (L1534840) ==
'''تَخَاجَأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534840|18بك|ويكي بيانات: L1534840]] [[ملف:Wiktionary-logo.svg|وصلة=تَخَاجَأَ|18بك|صفحة ويكاموس]] · الجذر: خجأ · ([[toolforge:ar-senses/review/L1534840|رابط المُفردة في الأداة]])
لاحظت التباسا أو خلطا بين (تخاجأ وتخاجى وتخاجا).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:22، 22 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَخَارَقَ (L1534942) ==
'''تَخَارَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534942|18بك|ويكي بيانات: L1534942]] [[ملف:Wiktionary-logo.svg|وصلة=تَخَارَقَ|18بك|صفحة ويكاموس]] · الجذر: خرق · ([[toolforge:ar-senses/review/L1534942|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:36، 22 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَآ (L1545136) ==
'''دَآ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1545136|18بك|ويكي بيانات: L1545136]] [[ملف:Wiktionary-logo.svg|وصلة=دَآ|18بك|صفحة ويكاموس]] · الجذر: دأو · ([[toolforge:ar-senses/review/L1545136|رابط المُفردة في الأداة]])
الفعل الصحيح (دَأَى) كما في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:47، 22 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِدْحَوَى (L1535316) ==
'''اِدْحَوَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535316|18بك|ويكي بيانات: L1535316]] [[ملف:Wiktionary-logo.svg|وصلة=اِدْحَوَى|18بك|صفحة ويكاموس]] · الجذر: دحو · ([[toolforge:ar-senses/review/L1535316|رابط المُفردة في الأداة]])
استبدلت المصدر بمصادر أكثر دقة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:49، 23 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَدَرَّهَ (L1535387) ==
'''تَدَرَّهَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535387|18بك|ويكي بيانات: L1535387]] [[ملف:Wiktionary-logo.svg|وصلة=تَدَرَّهَ|18بك|صفحة ويكاموس]] · الجذر: دره · ([[toolforge:ar-senses/review/L1535387|رابط المُفردة في الأداة]])
دره وليس تدره.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:55، 24 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَشَا (L1544094) ==
'''دَشَا''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544094|18بك|ويكي بيانات: L1544094]] [[ملف:Wiktionary-logo.svg|وصلة=دَشَا|18بك|صفحة ويكاموس]] · الجذر: دشو · ([[toolforge:ar-senses/review/L1544094|رابط المُفردة في الأداة]])
أضفت المعنى ووثقته من المعاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:54، 25 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَغِرَ (L1543752) ==
'''دَغِرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543752|18بك|ويكي بيانات: L1543752]] [[ملف:Wiktionary-logo.svg|وصلة=دَغِرَ|18بك|صفحة ويكاموس]] · الجذر: دغر · ([[toolforge:ar-senses/review/L1543752|رابط المُفردة في الأداة]])
للمفردة أكثر من معنى غير مذكور، ولا أدري هي بالكسر أم بالفتح دَغَرَ دَغِرَ.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:03، 25 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَاغَصَ (L1535445) ==
'''دَاغَصَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535445|18بك|ويكي بيانات: L1535445]] [[ملف:Wiktionary-logo.svg|وصلة=دَاغَصَ|18بك|صفحة ويكاموس]] · الجذر: دغص · ([[toolforge:ar-senses/review/L1535445|رابط المُفردة في الأداة]])
حذفت المعاني الثلاثة الأخيرة لأنها مختلطة بمفردة (دَاغَشَ).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:42، 25 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِدَّمَسَ (L1535554) ==
'''اِدَّمَسَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535554|18بك|ويكي بيانات: L1535554]] [[ملف:Wiktionary-logo.svg|وصلة=اِدَّمَسَ|18بك|صفحة ويكاموس]] · الجذر: دمس · ([[toolforge:ar-senses/review/L1535554|رابط المُفردة في الأداة]])
حذفت المصدرين وأضفت تهذيب اللغة لورود المفردة فيه ج=12 ص=263.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:13، 28 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَدَمْشَقَ (L1535561) ==
'''تَدَمْشَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535561|18بك|ويكي بيانات: L1535561]] [[ملف:Wiktionary-logo.svg|وصلة=تَدَمْشَقَ|18بك|صفحة ويكاموس]] · الجذر: دمشق · ([[toolforge:ar-senses/review/L1535561|رابط المُفردة في الأداة]])
المفردة غير موجودة والمثال غير موجود.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:29، 28 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَنَّأَ (L1535578) ==
'''دَنَّأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535578|18بك|ويكي بيانات: L1535578]] [[ملف:Wiktionary-logo.svg|وصلة=دَنَّأَ|18بك|صفحة ويكاموس]] · الجذر: دنأ · ([[toolforge:ar-senses/review/L1535578|رابط المُفردة في الأداة]])
لا أظن الفعل مهموزا.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:19، 28 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِدَّنَى (L1535595) ==
'''اِدَّنَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535595|18بك|ويكي بيانات: L1535595]] [[ملف:Wiktionary-logo.svg|وصلة=اِدَّنَى|18بك|صفحة ويكاموس]] · الجذر: دنو · ([[toolforge:ar-senses/review/L1535595|رابط المُفردة في الأداة]])
المثال في صفحة 273 وأظنه بمعنى مختلف.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:43، 29 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَبْشَبَ (L1537222) ==
'''شَبْشَبَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537222|18بك|ويكي بيانات: L1537222]] [[ملف:Wiktionary-logo.svg|وصلة=شَبْشَبَ|18بك|صفحة ويكاموس]] · الجذر: شبشب · ([[toolforge:ar-senses/review/L1537222|رابط المُفردة في الأداة]])
حذف المعنى الثاني لأنه خطأ من الأداة بسبب وجود خطأ مطبعي في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:13، 31 أغسطس 2026 (ت ع م)
:هل تحويل حركات من فتحة الى الكسرة يحل مشكلة؟ [[مستخدم:يزن البلوي|يزن البلوي]] ([[نقاش المستخدم:يزن البلوي|نقاش]]) 13:32، 1 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِنْشَبَحَ (L1537214) ==
'''اِنْشَبَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537214|18بك|ويكي بيانات: L1537214]] [[ملف:Wiktionary-logo.svg|وصلة=اِنْشَبَحَ|18بك|صفحة ويكاموس]] · الجذر: شبح · ([[toolforge:ar-senses/review/L1537214|رابط المُفردة في الأداة]])
استبدلت مقاييس اللغة بجمهرة اللغة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:33، 2 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَاجَّ (L1537248) ==
'''شَاجَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537248|18بك|ويكي بيانات: L1537248]] [[ملف:Wiktionary-logo.svg|وصلة=شَاجَّ|18بك|صفحة ويكاموس]] · الجذر: شجج · ([[toolforge:ar-senses/review/L1537248|رابط المُفردة في الأداة]])
استخراج خاطئ، لم أجد التصريف في بقية المراجع.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:34، 4 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَرَّى (L1485717) ==
'''تَبَرَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1485717|18بك|ويكي بيانات: L1485717]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَرَّى|18بك|صفحة ويكاموس]] · الجذر: بري · ([[toolforge:ar-senses/review/L1485717|رابط المُفردة في الأداة]])
الفعل في المراجع "تَبرأ" من جذر برأ وليس "تَبَرَّى" من جذر بري --[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 12:29، 5 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَحَطَ (L1489005) ==
'''شَحَطَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1489005|18بك|ويكي بيانات: L1489005]] [[ملف:Wiktionary-logo.svg|وصلة=شَحَطَ|18بك|صفحة ويكاموس]] · الجذر: شحط · ([[toolforge:ar-senses/review/L1489005|رابط المُفردة في الأداة]])
خلل وأخطاء غير معروفة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:19، 5 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَشْحَنَ (L1537270) ==
'''أَشْحَنَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537270|18بك|ويكي بيانات: L1537270]] [[ملف:Wiktionary-logo.svg|وصلة=أَشْحَنَ|18بك|صفحة ويكاموس]] · الجذر: شحن · ([[toolforge:ar-senses/review/L1537270|رابط المُفردة في الأداة]])
المعنى اأخير لـ(أحشن) وليس لـ(أشحن).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:29، 6 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَرَّى (L1537351) ==
'''شَرَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537351|18بك|ويكي بيانات: L1537351]] [[ملف:Wiktionary-logo.svg|وصلة=شَرَّى|18بك|صفحة ويكاموس]] · الجذر: شري · ([[toolforge:ar-senses/review/L1537351|رابط المُفردة في الأداة]])
لا أعلم إن كان حرف الراء مشددا أم لا.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:01، 7 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَرِفَ (L1544475) ==
'''شَرِفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544475|18بك|ويكي بيانات: L1544475]] [[ملف:Wiktionary-logo.svg|وصلة=شَرِفَ|18بك|صفحة ويكاموس]] · الجذر: شرف · ([[toolforge:ar-senses/review/L1544475|رابط المُفردة في الأداة]])
هل هي بضم الراء أم بكسرها؟<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:54، 7 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَشْدَى (L1537300) ==
'''أَشْدَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537300|18بك|ويكي بيانات: L1537300]] [[ملف:Wiktionary-logo.svg|وصلة=أَشْدَى|18بك|صفحة ويكاموس]] · الجذر: شدو · ([[toolforge:ar-senses/review/L1537300|رابط المُفردة في الأداة]])
استخراج الأداة خاطئ.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 23:44، 8 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: جَاجَ (L1544958) ==
'''جَاجَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544958|18بك|ويكي بيانات: L1544958]] [[ملف:Wiktionary-logo.svg|وصلة=جَاجَ|18بك|صفحة ويكاموس]] · الجذر: جوج · ([[toolforge:ar-senses/review/L1544958|رابط المُفردة في الأداة]])
الفعل في المرجع جِيج من جذر جيج.--[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 12:36، 10 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: جَاثَ (L1544257) ==
'''جَاثَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544257|18بك|ويكي بيانات: L1544257]] [[ملف:Wiktionary-logo.svg|وصلة=جَاثَ|18بك|صفحة ويكاموس]] · الجذر: جوث · ([[toolforge:ar-senses/review/L1544257|رابط المُفردة في الأداة]])
الفعل في المراجع جوث، وهناك فعل أخر جأث بمعنى آخر، لكن لم أجد المفردة "جأث" بهذا الشكل. --[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 12:53، 10 سبتمبر 2026 (ت ع م)
326q7o8k1va7osvjxkuionaqtmp28hn
1159144
1159049
2026-09-11T11:39:17Z
إسلام
12622
/* بلاغ من أداة مراجعة المعاني: حَسَى (L1495990) */ قسم جديد
1159144
wikitext
text/x-wiki
{{رأس صفحة نقاش}}
== بلاغ من أداة مراجعة المعاني: حَلَّى (L1534604) ==
'''حَلَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534604|18بك|ويكي بيانات: L1534604]] [[ملف:Wiktionary-logo.svg|وصلة=حَلَّى|18بك|صفحة ويكاموس]] · الجذر: حلو · ([[toolforge:ar-senses/review/L1534604|رابط المُفردة في الأداة]])
إبلاغ من الزميل {{مس|رِفْد}}: ''لا يمكن نشرها في ويكاموس عند الضغط على زر النشر يظهر: "خطأ: الصفحة موجودة بالفعل".'' --[[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 11:27، 27 يوليو 2026 (ت ع م)
:شكرا لك @[[مستخدم:رِفْد|رِفْد]] على الإبلاغ. المشكلة في الفعل حَلَّى (وأفعال آخرين) أَنَّه يُوَلَّدُ من جذرين: ح-ل-ي و ح-ل-و. في ويكي بيانات توجد وحدتان معجميتان، واحدة لكل فعل، لكن في ويكاموس لا يُمكن إنشاء صفحتين بنفس الاسم. سأفكر في حل لهذه المشكلة وأوافيك بالجديد. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 11:28، 27 يوليو 2026 (ت ع م)
::حالة أخرى حيث يشترك جذران في نفس صيغة الفعل:
::* جذر ت-ل-و على وزن تفعّل => [[تَتَلَّى]] ([https://ar-senses.toolforge.org/review/L1533461 رابط المُفردة في الأداة]).
::* جذر ت-ل-ي على وزن تفعّل => [[تَتَلَّى]]
::[[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 11:42، 27 يوليو 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِسْتَجَاشَ (L1534157) ==
'''اِسْتَجَاشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534157|18بك|ويكي بيانات: L1534157]] [[ملف:Wiktionary-logo.svg|وصلة=اِسْتَجَاشَ|18بك|صفحة ويكاموس]] · الجذر: جيش · ([[toolforge:ar-senses/review/L1534157|رابط المُفردة في الأداة]])
المعنى الثاني غير موجود في المصدر في صفحة المفردة (ص=603) والحديث الموجود في صفحة 115 غير مفسر بهذا المعنى أيضا. --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:40، 27 يوليو 2026 (ت ع م)
<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. -->
:{{ر|أبو هشام}} بخصوص المعنى الثاني، رجعتُ إلى ص=603 ووجدتُ المعنى حسب الوارد في الأداة: {{اقتباس مضمن|استجاش الأمير من مكان كذا: طلب جيشًا وجمعه. '''و- ت القدر: غلت.'''}}
:{{ر|Michel Bakni}} بخصوص المعنى الثالث (ص=115)، يبدو المعنى صحيحًا لكن الأداة استَنْبَطَتْهُ من مثال وارد في المعجم لا من تعريف للكلمة، ما رأيك؟
:*الاقتباس من المصدر: {{اقتباس مضمن|فَمَرَّ الْجَيْشُ عَلَى غَطَفَانَ '''فَاسْتَجَاشُوهُمْ''' عَلَى بَنِي سُليم، فَهَزَمَتْ بَنُو سُلَيم جيشَ النُّعْمَانِ}}
:*تعريف المعنى كما استخرجَتْهُ الأداة من النص السابق: {{اقتباس مضمن|اِسْتَجَاشَ القومَ على فلان: استنفرهم وحرّضهم عليه}}
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:23، 6 أغسطس 2026 (ت ع م).
::نعم أتفق مع هذا الطرح. [[مستخدم:Michel Bakni|Michel Bakni]] ([[نقاش المستخدم:Michel Bakni|نقاش]]) 14:25، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: جَوَّهَ (L1534145) ==
'''جَوَّهَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534145|18بك|ويكي بيانات: L1534145]] [[ملف:Wiktionary-logo.svg|وصلة=جَوَّهَ|18بك|صفحة ويكاموس]] · الجذر: جوه · ([[toolforge:ar-senses/review/L1534145|رابط المُفردة في الأداة]])
المعنى بهذا التصريف خطأ، لم أعثر على جوّه فلانا أي جعله وجيها، ولم أجد جوّه السقاء أي رقعه بل وجدت جواه في معجم متن اللغة. --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:48، 27 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك، المشكلة هي أن الأداة أخذت الجذر (جَوَهَ) وألحقت به معنى الفرع (وجَّهَ أو أَوْجَهَ، كحال: أَوْجَهْتُهُ أنا ووَجَّهْتُهُ)، سوف نعمل على إصلاحها.
:{{ر|ForzaGreen}} خطوات قادمة:
:#يجب أن نتوثَّق من أن الأداة تُميِّزُ الجذر عن الفرع. في هذه الحالة، أخذت الأداة الجذر ('''جَوَهَ''') وشكَّلتهُ ('''جَوَّهَ''')، ثم ألحقَتْ به معنى خاطئًا للمشتق.
:#بناءً على ما نراهُ هنا وقي حالات أخرى، نحتاج إلى '''خيار للمراجع لتعديل عنوان الصفحة'''، فلو أمكنهُ تبديل العنوان في هذه الحالة إلى '''وجَّهَ''' أو '''أَوْجَهَ''' لكان صحيحًا.
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 13:54، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: سَدَسَ (L1547049) ==
'''سَدَسَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1547049|18بك|ويكي بيانات: L1547049]] [[ملف:Wiktionary-logo.svg|وصلة=سَدَسَ|18بك|صفحة ويكاموس]] · الجذر: سدس · ([[toolforge:ar-senses/review/L1547049|رابط المُفردة في الأداة]])
المعنى الثاني مكرر، استبدلته وأضفت مصادر. --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:04، 28 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك ونعمل على التوثّق من مسألة تكرار المعاني --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 13:58، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: تَسَدَّى (L1536864) ==
'''تَسَدَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1536864|18بك|ويكي بيانات: L1536864]] [[ملف:Wiktionary-logo.svg|وصلة=تَسَدَّى|18بك|صفحة ويكاموس]] · الجذر: سدي · ([[toolforge:ar-senses/review/L1536864|رابط المُفردة في الأداة]])
خلل في رقم صفحة القاموس المحيط، ولا توجد شواهد قوية على المعنى الأول، أظن أن المفردة بحاجة لمراجعة وإعادة ترتيب المعاني.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:44، 29 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} متفّق، {{اقتباس مضمن|والحائكُ يُسَدِّي الثَّوْبَ ويَتَسَدّاه}} أي يحيكه لنفسه.
:{{ر|ForzaGreen}} يبدو أن النموذج اختلَطَ عليه الأمر أثناء دمج المعاني، ربما خصوصًا من لسان العرب ({{اقتباس مضمن|والحائكُ يُسَدِّي الثَّوْبَ ويَتَسَدّاه}})، فخرجَ بالمعنى المبتدع: {{اقتباس مضمن|تَسَدَّى الثوبَ: أقام سَداه لنفسه}}، وليس له مثيل في المصادر.
:'''الخطوات القادمة المقترحة''': أشتَبِهُ في أن النموذج يفقد موثوقيته حين دَمْجَ المعاني من عددٍ كبير من المصادر (5 مصادر في هذه الحالة)، '''أقترح وَضْعَ حدّ أعلى للمصادر التي نستخدمها في استخراج المعنى، ربما 3 للوقت الحاضر'''.
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:10، 6 أغسطس 2026 (ت ع م).
::وضع حد للمصادر آليا قد يحرم المفردة من المصدر الأقوى والأدق. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:30، 6 أغسطس 2026 (ت ع م)
:{{أصلح}} الخلل في رقم صفحة القاموس المحيط، لهذه المُفردة ولمفردات أخرى. يبدو أن المشكل كان سببه عشوائية النموذج اللغوي، إذ كان يُغيِّر رقم الصفحة في أقل من 1% من الحالات. عدّلتُ أداة توليد المعاني حتى لا يتكرر الخطأ.
:بالنسبة للمصادر، أُفضل الإبقاء عليها جميعا. سنُجرب مع {{مس|عباد ديرانية}} تعديل تعليمات النموذج لتحسين المُخْرَجات ولإصلاح مشاكل أخرى، لا سيما المعاني المُكررة. -- [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 23:47، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَسَافَدَ (L1497488) ==
'''تَسَافَدَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1497488|18بك|ويكي بيانات: L1497488]] [[ملف:Wiktionary-logo.svg|وصلة=تَسَافَدَ|18بك|صفحة ويكاموس]] · الجذر: سفد · ([[toolforge:ar-senses/review/L1497488|رابط المُفردة في الأداة]])
اكتفيت بالمعنى الأول بسبب التكرار.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 11:51، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} ملاحظة للعمل على تكرار المعاني، المعنى 1 و2 متماثلان والثاني هو الأوضح للمستخدم المعاصر --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:13، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: سَافَحَ (L1487289) ==
'''سَافَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1487289|18بك|ويكي بيانات: L1487289]] [[ملف:Wiktionary-logo.svg|وصلة=سَافَحَ|18بك|صفحة ويكاموس]] · الجذر: سفح · ([[toolforge:ar-senses/review/L1487289|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لأنه مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:42، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} حالة تكرار أخرى مؤكدة في المعنى 1 والمعنى 2 --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:14، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: تَرَأَّمَ (L1535813) ==
'''تَرَأَّمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535813|18بك|ويكي بيانات: L1535813]] [[ملف:Wiktionary-logo.svg|وصلة=تَرَأَّمَ|18بك|صفحة ويكاموس]] · الجذر: رأم · ([[toolforge:ar-senses/review/L1535813|رابط المُفردة في الأداة]])
دمجت المعنيين وصححت رقم الجزء والصفحة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:58، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} حالة تكرار مؤكّدة بين المعنى 1 و2، كما يأتي:
:#{{اقتباس مضمن|تَرَأَّمَ الشيءَ: أحبَّه وألِفَه وعطف عليه وترحم عليه}}
:#{{اقتباس مضمن|تَرَأَّمَ الصبيَّ: ترحَّم عليه}}
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:26، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: جَاوَى (L1534151) ==
'''جَاوَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534151|18بك|ويكي بيانات: L1534151]] [[ملف:Wiktionary-logo.svg|وصلة=جَاوَى|18بك|صفحة ويكاموس]] · الجذر: جوي · ([[toolforge:ar-senses/review/L1534151|رابط المُفردة في الأداة]])
خطأ: الصفحة 'جَاوَى' موجودة بالفعل <!-- يظهر هكذا: خطأ: الصفحة 'جَاوَى' موجودة بالفعل. --> --[[مستخدم:رِفْد|رِفْد]] ([[نقاش المستخدم:رِفْد|نقاش]]) 22:15، 30 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} أتقصد أنكَ أنشأتَ الصفحة سابقًا عبر الأداة ثم ظهرت لك مرة أخرى في أداة مراجعة المعاني؟ --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:27، 6 أغسطس 2026 (ت ع م).
::مرحبا {{ر|عباد ديرانية}} أعتقد أن الخلل هو وجود صفحة مكررة في ويكي بيانات يلزم دمجها، تحياتي لك. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:59، 6 أغسطس 2026 (ت ع م)
:::+أضيفُ الاقتراح الممتاز '''إضافة تنبيهٍ بالخط الأحمر إلى الأداة في حال لو أن الصفحة أُنْشِأَتْ وحُذِفَتْ سابقًا''' تنبيهًا للمستخدم --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 16:07، 6 أغسطس 2026 (ت ع م).
::::هذا المشكل تكرر مرات عديدة (انظر النقاش أعلاه عن الفعل '''حَلَّى''') والسبب هو المُفردات التي تشترك في نفس الجذر. حاليا لا يوجد حل تقني للمسألة، لكنها في بالي وسأفكر في حل. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 22:48، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَجَاذَى (L1533824) ==
'''تَجَاذَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533824|18بك|ويكي بيانات: L1533824]] [[ملف:Wiktionary-logo.svg|وصلة=تَجَاذَى|18بك|صفحة ويكاموس]] · الجذر: جذي · ([[toolforge:ar-senses/review/L1533824|رابط المُفردة في الأداة]])
خطأ: الصفحة 'تَجَاذَى' موجودة بالفعل <!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:رِفْد|رِفْد]] ([[نقاش المستخدم:رِفْد|نقاش]]) 22:19، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} هذه ملاحظة متكرّرة من المستخدمين، يظهر أننا نحتاجُ إلى '''تحديث الأداة بوتيرة يومية لإزالة الصفحات المنشأة سابقًا'''، إلا لو كان هذا خطأً تقنيًا مختلفًا يُسبِّبُ التكرار --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 15:48، 6 أغسطس 2026 (ت ع م).
::كنت أصلحت هذه الكلمة مع كلمات أخرى لكن لم أصلح بعد مصدر الخطأ، وهو الأفعال التي لها جذور مختلفة لكنها تشترك في نفس الصيغة. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 17:51، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَجْذَى (L1533823) ==
'''أَجْذَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533823|18بك|ويكي بيانات: L1533823]] [[ملف:Wiktionary-logo.svg|وصلة=أَجْذَى|18بك|صفحة ويكاموس]] · الجذر: جذي · ([[toolforge:ar-senses/review/L1533823|رابط المُفردة في الأداة]])
خطأ: الصفحة 'أَجْذَى' موجودة بالفعل <!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:رِفْد|رِفْد]] ([[نقاش المستخدم:رِفْد|نقاش]]) 22:20، 30 يوليو 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: زَأْزَأَ (L1536388) ==
'''زَأْزَأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1536388|18بك|ويكي بيانات: L1536388]] [[ملف:Wiktionary-logo.svg|وصلة=زَأْزَأَ|18بك|صفحة ويكاموس]] · الجذر: زأزأ · ([[toolforge:ar-senses/review/L1536388|رابط المُفردة في الأداة]])
حذفت المعنى الخامس لأنه مزيد بتاء في المراجع.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:35، 4 أغسطس 2026 (ت ع م)
:{{ر|Michel Bakni}} المعنى الخامس مزيدٌ بتاء التأنيث، فهل نُنْشِئُ له صفحةً منفصلةً برأيك أم نضيفه إلى ذات الصفحة مع تحويلة؟
:شرح المعنى الخامس: {{اقتباس مضمن|زَأْزَأَتِ المرأةُ: مشت وحرّكت أعطافها كمشية القِصار}}
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:33، 6 أغسطس 2026 (ت ع م).
::نعم، يلزم إنشاء صفحة لكل فعل بكل تصريف، هذا التصريف: المؤنث المفرد الغائب. [[مستخدم:Michel Bakni|Michel Bakni]] ([[نقاش المستخدم:Michel Bakni|نقاش]]) 14:36، 6 أغسطس 2026 (ت ع م)
:::{{ر|ForzaGreen}} إذًا يلزمنا التوثّق من تمييز النموذج للمؤنّث وتخصيصه صفحة مستقلّة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:54، 6 أغسطس 2026 (ت ع م).
::::أنا رأيي كل المعاني والأمثلة تبقى في صفحة الفعل الرئيسية، والصيغ المُصرفة تحيل إلى الصفحة الرئيسية. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 15:06، 6 أغسطس 2026 (ت ع م)
::::متّفق مع وائل هنا بالواقع، الأفضل هو تخفيف الإحالات إن أمكن وجَمْع تصريفات المذكر والمؤنث والعدد بصفحة واحدة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 15:52، 6 أغسطس 2026 (ت ع م).
:::::لكن الذي يراجع القوالب يفهم أن لكل تصريف صفحة خاصة به لذلك أنا أتفق مع الزميل ميشيل على إنشاء صفحة لكل تصريف، تحياتي لكم. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:10، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَزْعَلَ (L1476504) ==
'''أَزْعَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1476504|18بك|ويكي بيانات: L1476504]] [[ملف:Wiktionary-logo.svg|وصلة=أَزْعَلَ|18بك|صفحة ويكاموس]] · الجذر: زعل · ([[toolforge:ar-senses/review/L1476504|رابط المُفردة في الأداة]])
دمجت المعنى الأول والثالث لأن المعنى الثالث مكرر عن الأول.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 10:04، 4 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك ونعمل على معالجة مسألة المعاني المُكرَّرة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:34، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: زَعِلَ (L1487695) ==
'''زَعِلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1487695|18بك|ويكي بيانات: L1487695]] [[ملف:Wiktionary-logo.svg|وصلة=زَعِلَ|18بك|صفحة ويكاموس]] · الجذر: زعل · ([[toolforge:ar-senses/review/L1487695|رابط المُفردة في الأداة]])
المعنى الأول (مرح) غير موجود في المراجع، والمعنى الثالث بحاجة إلى تدقيق، تحتاج المفردة إلى مراجعة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 10:41، 4 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} من معجم العين: {{اقتباس مضمن|الزَّعِل: النشيط '''الأشر'''. زَعِلَ يَزْعَلُ زَعَلًا.}}، الأشر هنا بمعنى المرح (مصدر [https://www.islamweb.net/ar/library/content/122/137/%D8%A3%D8%B4%D8%B1 من لسان العرب]).
:{{ر|ForzaGreen}} المعنى الثالث فيه اختلاطٌ بين معانٍ عِدّة، مثل: {{اقتباس مضمن|والزعل: '''المتضور جوعا'''}} (الجوهري) و{{اقتباس مضمن|الزَّعَلُ '''كالعَلَزِ مِنَ المَرَض'''}} (لسان العرب)، والمعنى في الأداة جاءَ: {{اقتباس مضمن|زَعِلَ من المرض أو الجوع: تضوّر وتلوّى وقلِق فلم يستقر}}.
:'''الخطوات القادمة المقترحة''': أشتبه أن النموذج اختلط عليه دمج المعنى عبر 5 مصادر، والأفضل والأسهل للمراجع (فمن الصعب جدًا تقصّي 5 مراجع مختلفة) أن '''نضعَ حدًا بين مصدرَيْن إلى ثلاثة مصادر للمعنى الواحد''' --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:48، 6 أغسطس 2026 (ت ع م).
::نعم، في الحقيقة تحتوي بعض المفردات على مراجع كثيرة وأتفق معك على الاستشهاد بمرجعين أو ثلاث بأقصى حد لكن لو يكون انتقاء المراجع يدويا أفضل لاختيار الأنسب والأقرب إلا إذا كان الاختيار الآلي قادرا على انتقاء المرجع الأنسب أو الأقرب أو الأدق. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:21، 6 أغسطس 2026 (ت ع م)
:::إشارة {{ر|عباد ديرانية}} أرجو مراجعة تقليل المراجع آليا فقد تحرم الأداةُ المفردةَ من المراجع الأدق وتضع المراجع الأبعد. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:23، 6 أغسطس 2026 (ت ع م)
::::{{ر|أبو هشام}} لا بأس بذلك، لكن إن تركنا للمُرَاجِعِ اختيار المصادر الأدق فهذا يعني أن عليهم مراجعة 5 - 6 مصادر في بعض الحالات، فما هو الأفضل بالنسبة لك بين هذه الخيارات؟ أهو انتقاء المصادر الأفضل يدويًا أم تقليل عدد المصادر التي وجبت مراجعتها؟ --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 15:51، 6 أغسطس 2026 (ت ع م).
:::::{{ر|عباد ديرانية}} أميل إلى الانتقاء اليدوي أو البشري دون تقليل للمصادر فالمراجِع قادر على انتقاء المصدر الأنسب للمفردة، وإن كان للزملاء رأي آخر فلا أعترض، تحياتي. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:15، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَلَكَ (L1502490) ==
'''أَلَكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1502490|18بك|ويكي بيانات: L1502490]] [[ملف:Wiktionary-logo.svg|وصلة=أَلَكَ|18بك|صفحة ويكاموس]] · الجذر: ألك · ([[toolforge:ar-senses/review/L1502490|رابط المُفردة في الأداة]])
حذفت المرجع الأخير من المعنى الثاني لأن فيه خطأ فقد استُشهد بصفحة 132 من معجم متن اللغة وفيها (أَلَكَ لَجَأٌ يَا فلَان) وهو استشهاد خاطئ لأن (ألك) هنا استفهام وليست فعل.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:33، 5 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك وسوف نعمل على زيادة دقة ضبط المعاني المتقاربة بالأداة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:49، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: اِبْتَسَطَ (L1533014) ==
'''اِبْتَسَطَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533014|18بك|ويكي بيانات: L1533014]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْتَسَطَ|18بك|صفحة ويكاموس]] · الجذر: بسط · ([[toolforge:ar-senses/review/L1533014|رابط المُفردة في الأداة]])
غير موثقة، لا يوجد فيها مصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:04، 5 أغسطس 2026 (ت ع م)
:{{ر|ForzaGreen}} حالة غريبةٌ ليس فيه أي مصدر للمعنى المستخرج! --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:49، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: أَبْشَكَ (L1533037) ==
'''أَبْشَكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533037|18بك|ويكي بيانات: L1533037]] [[ملف:Wiktionary-logo.svg|وصلة=أَبْشَكَ|18بك|صفحة ويكاموس]] · الجذر: بشك · ([[toolforge:ar-senses/review/L1533037|رابط المُفردة في الأداة]])
هذه اللفظة بحاجة لمراجعة فلها عدة معان.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:50، 6 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} هل لكَ أن تُوضِحَ المقصود؟ لم أجد كلمة أبشك في المرجع أصلًا للأسف --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:52، 6 أغسطس 2026 (ت ع م).
::{{ر|عباد ديرانية}} وجدت هذا ('''أبشك''' الكلام: كذب فيه: تخرص فيه كاذبًا.) في معجم متن اللغة ج=1 ص=299، وهذا أيضا (وبَشَكَ الْكَلَامَ يَبْشُكه بَشْكًا و'''أبشَكه''': تَخَرَّصهُ كَاذِبًا،) في لسان العرب ج=10 ص=400، ولم أجد أن معناها '''أسرع'''، تحياتي. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:43، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَاطَأَ (L1496404) ==
'''بَاطَأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1496404|18بك|ويكي بيانات: L1496404]] [[ملف:Wiktionary-logo.svg|وصلة=بَاطَأَ|18بك|صفحة ويكاموس]] · الجذر: بطأ · ([[toolforge:ar-senses/review/L1496404|رابط المُفردة في الأداة]])
لا يوجد التصريف في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:43، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَبْطَحَ (L1533063) ==
'''أَبْطَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533063|18بك|ويكي بيانات: L1533063]] [[ملف:Wiktionary-logo.svg|وصلة=أَبْطَحَ|18بك|صفحة ويكاموس]] · الجذر: بطح · ([[toolforge:ar-senses/review/L1533063|رابط المُفردة في الأداة]])
غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:47، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَطَّحَ (L1533066) ==
'''بَطَّحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533066|18بك|ويكي بيانات: L1533066]] [[ملف:Wiktionary-logo.svg|وصلة=بَطَّحَ|18بك|صفحة ويكاموس]] · الجذر: بطح · ([[toolforge:ar-senses/review/L1533066|رابط المُفردة في الأداة]])
هل هي بطَح أم بطّح؟<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:48، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَطْرَقَ (L1533070) ==
'''تَبَطْرَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533070|18بك|ويكي بيانات: L1533070]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَطْرَقَ|18بك|صفحة ويكاموس]] · الجذر: بطرق · ([[toolforge:ar-senses/review/L1533070|رابط المُفردة في الأداة]])
هذا الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:58، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَهُؤَ (L1545462) ==
'''بَهُؤَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1545462|18بك|ويكي بيانات: L1545462]] [[ملف:Wiktionary-logo.svg|وصلة=بَهُؤَ|18بك|صفحة ويكاموس]] · الجذر: بهأ · ([[toolforge:ar-senses/review/L1545462|رابط المُفردة في الأداة]])
معناها (أنس) كما في لسان العرب ج=1 ص=35 ومعجم متن اللغة ج=1 ص=353.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:29، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَاهَتَ (L1533268) ==
'''تَبَاهَتَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533268|18بك|ويكي بيانات: L1533268]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَاهَتَ|18بك|صفحة ويكاموس]] · الجذر: بهت · ([[toolforge:ar-senses/review/L1533268|رابط المُفردة في الأداة]])
حسنتُ المعنى وأضفت مصدرين.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:01، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَعِرَ (L1544067) ==
'''بَعِرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544067|18بك|ويكي بيانات: L1544067]] [[ملف:Wiktionary-logo.svg|وصلة=بَعِرَ|18بك|صفحة ويكاموس]] · الجذر: بعر · ([[toolforge:ar-senses/review/L1544067|رابط المُفردة في الأداة]])
'''[[بَعِرَ]]''' الجمل بالكسر صار بعيرا كما في القاموس المحيط ص=352.
المفردة (بَعَرَ) وهي موجودة في المشروع '''[[بَعَرَ]]''' فيلزم تحديثها أو حذفها لأنها خاطئة انظر القاموس المحيط ص=694 وإنشاء صفحة جديدة ببيانات صحيحة هي البيانات الموجودة في الأداة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:31، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَعَّقَ (L1533113) ==
'''بَعَّقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533113|18بك|ويكي بيانات: L1533113]] [[ملف:Wiktionary-logo.svg|وصلة=بَعَّقَ|18بك|صفحة ويكاموس]] · الجذر: بعق · ([[toolforge:ar-senses/review/L1533113|رابط المُفردة في الأداة]])
هل هي بَعَّقَ بالتشديد أم بَعَقَ بالتخفيف؟<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:02، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَغْزَلَ (L1533126) ==
'''تَبَغْزَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533126|18بك|ويكي بيانات: L1533126]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَغْزَلَ|18بك|صفحة ويكاموس]] · الجذر: بغزل · ([[toolforge:ar-senses/review/L1533126|رابط المُفردة في الأداة]])
المعنى الصحيح '''تبختر''' وله شواهد في أربعة معاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:13، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَقَّمَ (L1533154) ==
'''بَقَّمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533154|18بك|ويكي بيانات: L1533154]] [[ملف:Wiktionary-logo.svg|وصلة=بَقَّمَ|18بك|صفحة ويكاموس]] · الجذر: بقم · ([[toolforge:ar-senses/review/L1533154|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:44، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَقَّمَ (L1533153) ==
'''تَبَقَّمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533153|18بك|ويكي بيانات: L1533153]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَقَّمَ|18بك|صفحة ويكاموس]] · الجذر: بقم · ([[toolforge:ar-senses/review/L1533153|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:50، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَكِئَ (L1543356) ==
'''بَكِئَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543356|18بك|ويكي بيانات: L1543356]] [[ملف:Wiktionary-logo.svg|وصلة=بَكِئَ|18بك|صفحة ويكاموس]] · الجذر: بكأ · ([[toolforge:ar-senses/review/L1543356|رابط المُفردة في الأداة]])
حذفت المعنى الأول لأنه غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:13، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْتَلَتَ (L1533174) ==
'''اِبْتَلَتَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533174|18بك|ويكي بيانات: L1533174]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْتَلَتَ|18بك|صفحة ويكاموس]] · الجذر: بلت · ([[toolforge:ar-senses/review/L1533174|رابط المُفردة في الأداة]])
المفردة غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:35، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَلْدَحَ (L1533193) ==
'''تَبَلْدَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533193|18بك|ويكي بيانات: L1533193]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَلْدَحَ|18بك|صفحة ويكاموس]] · الجذر: بلدح · ([[toolforge:ar-senses/review/L1533193|رابط المُفردة في الأداة]])
أضفت المعنى الثاني، لم تستخرجه الأداة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:54، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْلَنْدَكَ (L1533194) ==
'''اِبْلَنْدَكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533194|18بك|ويكي بيانات: L1533194]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْلَنْدَكَ|18بك|صفحة ويكاموس]] · الجذر: بلدك · ([[toolforge:ar-senses/review/L1533194|رابط المُفردة في الأداة]])
المعنى خاطئ، والمفردة غير موجودة في المصدر.
:المعنى الصحيح ('''اتسع''') موجود في أربعة معاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:00، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَلَّرَ (L1533196) ==
'''تَبَلَّرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533196|18بك|ويكي بيانات: L1533196]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَلَّرَ|18بك|صفحة ويكاموس]] · الجذر: بلر · ([[toolforge:ar-senses/review/L1533196|رابط المُفردة في الأداة]])
إملاء المفردة خاطئ، والصحيح ('''تَرَبَّل''') كما في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:08، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَقَّعَ (L1533145) ==
'''بَقَّعَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533145|18بك|ويكي بيانات: L1533145]] [[ملف:Wiktionary-logo.svg|وصلة=بَقَّعَ|18بك|صفحة ويكاموس]] · الجذر: بقع · ([[toolforge:ar-senses/review/L1533145|رابط المُفردة في الأداة]])
حذفت المعنى الرابع لأنه ورد بالتخفيف.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:18، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِنْبَقَّ (L1533147) ==
'''اِنْبَقَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533147|18بك|ويكي بيانات: L1533147]] [[ملف:Wiktionary-logo.svg|وصلة=اِنْبَقَّ|18بك|صفحة ويكاموس]] · الجذر: بقق · ([[toolforge:ar-senses/review/L1533147|رابط المُفردة في الأداة]])
المعنى خاطئ ولا شواهد عليه في المعاجم والمفردة الموجودة ('''انبعق''') وليس انبق.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:38، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَلَعَ (L1480240) ==
'''بَلَعَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1480240|18بك|ويكي بيانات: L1480240]] [[ملف:Wiktionary-logo.svg|وصلة=بَلَعَ|18بك|صفحة ويكاموس]] · الجذر: بلع · ([[toolforge:ar-senses/review/L1480240|رابط المُفردة في الأداة]])
خطأ في التشكيل فالفعل بَلِعَ وليس بَلَعَ كما في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:34، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْتَلَقَ (L1533220) ==
'''اِبْتَلَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533220|18بك|ويكي بيانات: L1533220]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْتَلَقَ|18بك|صفحة ويكاموس]] · الجذر: بلق · ([[toolforge:ar-senses/review/L1533220|رابط المُفردة في الأداة]])
لم أجد المفردة في المعاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:06، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَلُقَ (L1543358) ==
'''بَلُقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543358|18بك|ويكي بيانات: L1543358]] [[ملف:Wiktionary-logo.svg|وصلة=بَلُقَ|18بك|صفحة ويكاموس]] · الجذر: بلق · ([[toolforge:ar-senses/review/L1543358|رابط المُفردة في الأداة]])
المفردة بالكسر وليس بالضم، انظر '''[[بَلِقَ]]'''.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:52، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْذَارَّ (L1534290) ==
'''اِحْذَارَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534290|18بك|ويكي بيانات: L1534290]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْذَارَّ|18بك|صفحة ويكاموس]] · الجذر: حذر · ([[toolforge:ar-senses/review/L1534290|رابط المُفردة في الأداة]])
خلل في صندوق المعلومات.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:49، 9 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَاتَنَ (L1534214) ==
'''تَحَاتَنَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534214|18بك|ويكي بيانات: L1534214]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَاتَنَ|18بك|صفحة ويكاموس]] · الجذر: حتن · ([[toolforge:ar-senses/review/L1534214|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لأنه مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 12:31، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَتَنَ (L1534213) ==
'''اِحْتَتَنَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534213|18بك|ويكي بيانات: L1534213]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَتَنَ|18بك|صفحة ويكاموس]] · الجذر: حتن · ([[toolforge:ar-senses/review/L1534213|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 12:37، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَاتَّ (L1496477) ==
'''تَحَاتَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1496477|18بك|ويكي بيانات: L1496477]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَاتَّ|18بك|صفحة ويكاموس]] · الجذر: حتت · ([[toolforge:ar-senses/review/L1496477|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:36، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْزَوْزَى (L1534387) ==
'''اِحْزَوْزَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534387|18بك|ويكي بيانات: L1534387]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْزَوْزَى|18بك|صفحة ويكاموس]] · الجذر: حزو · ([[toolforge:ar-senses/review/L1534387|رابط المُفردة في الأداة]])
المفردة غير موجودة في المصدر ولها أكثر من معنى في المصادر الأخرى.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:02، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَذَّقَ (L1484084) ==
'''تَحَذَّقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1484084|18بك|ويكي بيانات: L1484084]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَذَّقَ|18بك|صفحة ويكاموس]] · الجذر: حذق · ([[toolforge:ar-senses/review/L1484084|رابط المُفردة في الأداة]])
المفردة غير موجودة في المصادر الموجودة، استبدلتها بمصادر أخرى.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:02، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَذَّقَ (L1534295) ==
'''حَذَّقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534295|18بك|ويكي بيانات: L1534295]] [[ملف:Wiktionary-logo.svg|وصلة=حَذَّقَ|18بك|صفحة ويكاموس]] · الجذر: حذق · ([[toolforge:ar-senses/review/L1534295|رابط المُفردة في الأداة]])
لم أجد الفعل المتعدي في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:14، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَذِقَ (L1546050) ==
'''حَذِقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1546050|18بك|ويكي بيانات: L1546050]] [[ملف:Wiktionary-logo.svg|وصلة=حَذِقَ|18بك|صفحة ويكاموس]] · الجذر: حذق · ([[toolforge:ar-senses/review/L1546050|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لأنه تفسير لمفردة فرس وهو مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:56، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَحْزَرَ (L1534363) ==
'''أَحْزَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534363|18بك|ويكي بيانات: L1534363]] [[ملف:Wiktionary-logo.svg|وصلة=أَحْزَرَ|18بك|صفحة ويكاموس]] · الجذر: حزر · ([[toolforge:ar-senses/review/L1534363|رابط المُفردة في الأداة]])
حذفت المعنى الأول لأنه خاطئ وغير مرتبط بالمفردة بل يرتبط بـ (أحزّ).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:06، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَزَّ (L1534366) ==
'''اِحْتَزَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534366|18بك|ويكي بيانات: L1534366]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَزَّ|18بك|صفحة ويكاموس]] · الجذر: حزز · ([[toolforge:ar-senses/review/L1534366|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:12، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَزْمَرَ (L1534382) ==
'''حَزْمَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534382|18بك|ويكي بيانات: L1534382]] [[ملف:Wiktionary-logo.svg|وصلة=حَزْمَرَ|18بك|صفحة ويكاموس]] · الجذر: حزمر · ([[toolforge:ar-senses/review/L1534382|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لارتباطه بـ ([[حَزْفَرَ]]).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:56، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَاسَى (L1534416) ==
'''تَحَاسَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534416|18بك|ويكي بيانات: L1534416]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَاسَى|18بك|صفحة ويكاموس]] · الجذر: حسو · ([[toolforge:ar-senses/review/L1534416|رابط المُفردة في الأداة]])
غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:10، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَاسَى (L1534418) ==
'''حَاسَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534418|18بك|ويكي بيانات: L1534418]] [[ملف:Wiktionary-logo.svg|وصلة=حَاسَى|18بك|صفحة ويكاموس]] · الجذر: حسو · ([[toolforge:ar-senses/review/L1534418|رابط المُفردة في الأداة]])
غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:16، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَاقَ (L1534738) ==
'''اِحْتَاقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534738|18بك|ويكي بيانات: L1534738]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَاقَ|18بك|صفحة ويكاموس]] · الجذر: حيق · ([[toolforge:ar-senses/review/L1534738|رابط المُفردة في الأداة]])
دمجت المعنيين لأنها مكرران.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 04:15، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَفَظَ (L1485699) ==
'''اِحْتَفَظَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1485699|18بك|ويكي بيانات: L1485699]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَفَظَ|18بك|صفحة ويكاموس]] · الجذر: حفظ · ([[toolforge:ar-senses/review/L1485699|رابط المُفردة في الأداة]])
لم تضع الأداة بعض أرقام الصفحات والأجزاء.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:19، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَمْحَمَ (L1476725) ==
'''حَمْحَمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1476725|18بك|ويكي بيانات: L1476725]] [[ملف:Wiktionary-logo.svg|وصلة=حَمْحَمَ|18بك|صفحة ويكاموس]] · الجذر: حمحم · ([[toolforge:ar-senses/review/L1476725|رابط المُفردة في الأداة]])
خلل في صندوق المعلومات.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:11، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَيَّفَ (L1534760) ==
'''تَحَيَّفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534760|18بك|ويكي بيانات: L1534760]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَيَّفَ|18بك|صفحة ويكاموس]] · الجذر: حيف · ([[toolforge:ar-senses/review/L1534760|رابط المُفردة في الأداة]])
دمجت المعنيين.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:38، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَشَّكَ (L1534439) ==
'''تَحَشَّكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534439|18بك|ويكي بيانات: L1534439]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَشَّكَ|18بك|صفحة ويكاموس]] · الجذر: حشك · ([[toolforge:ar-senses/review/L1534439|رابط المُفردة في الأداة]])
حرف الشين مشدد.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:12، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْوَالَّ (L1534743) ==
'''اِحْوَالَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534743|18بك|ويكي بيانات: L1534743]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْوَالَّ|18بك|صفحة ويكاموس]] · الجذر: حول · ([[toolforge:ar-senses/review/L1534743|رابط المُفردة في الأداة]])
خلل في صندوق المعلومات.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:59، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِسْتَحَاضَ (L1534730) ==
'''اِسْتَحَاضَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534730|18بك|ويكي بيانات: L1534730]] [[ملف:Wiktionary-logo.svg|وصلة=اِسْتَحَاضَ|18بك|صفحة ويكاموس]] · الجذر: حوض · ([[toolforge:ar-senses/review/L1534730|رابط المُفردة في الأداة]])
الموجود في المصادر استحوض وليس استحاض.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:05، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَاشَ (L1534721) ==
'''اِحْتَاشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534721|18بك|ويكي بيانات: L1534721]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَاشَ|18بك|صفحة ويكاموس]] · الجذر: حوش · ([[toolforge:ar-senses/review/L1534721|رابط المُفردة في الأداة]])
التصريف الموجود في المصادر (احتوش) وليس احتاش.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:34، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِسْتَحَاسَ (L1534716) ==
'''اِسْتَحَاسَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534716|18بك|ويكي بيانات: L1534716]] [[ملف:Wiktionary-logo.svg|وصلة=اِسْتَحَاسَ|18بك|صفحة ويكاموس]] · الجذر: حوس · ([[toolforge:ar-senses/review/L1534716|رابط المُفردة في الأداة]])
استحوس وليس استحاس كما في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:51، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَزْأَلَ (L1534358) ==
'''حَزْأَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534358|18بك|ويكي بيانات: L1534358]] [[ملف:Wiktionary-logo.svg|وصلة=حَزْأَلَ|18بك|صفحة ويكاموس]] · الجذر: حزأل · ([[toolforge:ar-senses/review/L1534358|رابط المُفردة في الأداة]])
مفردة خاطئة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 12:52، 14 أغسطس 2026 (ت ع م)
:فعلا، يبدو أن المُفردة حَزْأَلَ لا توجد. في جدول الأفعال، عندنا فعل واحد من الجذر "ح ز أ ل"، وهو على وزن '''فعلل'''، أي حَزْأَلَ. لكن يبدو أن هذا خاطئ، و أن الوزن الصحيح هو افعللّ، أي احْزَأَلَّ، وهو الذي ذُكِر في معجم [https://app.turath.io/book/7030?page=14881 تاج العروس]. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 21:19، 14 أغسطس 2026 (ت ع م)
:ورد في اللسان أيضًا احزألَّ بمعنى ارتفع وبمعنى اجتمع. [[مستخدم:Michel Bakni|Michel Bakni]] ([[نقاش المستخدم:Michel Bakni|نقاش]]) 21:50، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَنَّشَ (L1534669) ==
'''حَنَّشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534669|18بك|ويكي بيانات: L1534669]] [[ملف:Wiktionary-logo.svg|وصلة=حَنَّشَ|18بك|صفحة ويكاموس]] · الجذر: حنش · ([[toolforge:ar-senses/review/L1534669|رابط المُفردة في الأداة]])
هل هي حَنَّشَ أم حَنَشَ؟ وأظن أن لها معان أخرى.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:28، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْخَنَدَّ (L1532850) ==
'''اِبْخَنَدَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1532850|18بك|ويكي بيانات: L1532850]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْخَنَدَّ|18بك|صفحة ويكاموس]] · الجذر: بخند · ([[toolforge:ar-senses/review/L1532850|رابط المُفردة في الأداة]])
الفعل في المرجع اخْبَنْدَى، لا وجود المفردة اِبْخَنَدَّ--[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 18:52، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَمْيَرَ (L1534650) ==
'''تَحَمْيَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534650|18بك|ويكي بيانات: L1534650]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَمْيَرَ|18بك|صفحة ويكاموس]] · الجذر: حمير · ([[toolforge:ar-senses/review/L1534650|رابط المُفردة في الأداة]])
خطأ في استخراج المعنى، معنى تحمير أي ساء خلقه كما في المصادر أم هذه فيجب أن تكون بغير الياء أي تَحَمَّر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:02، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَبَشَ (L1534178) ==
'''اِحْتَبَشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534178|18بك|ويكي بيانات: L1534178]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَبَشَ|18بك|صفحة ويكاموس]] · الجذر: حبش · ([[toolforge:ar-senses/review/L1534178|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:38، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَثَّرَ (L1534223) ==
'''تَحَثَّرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534223|18بك|ويكي بيانات: L1534223]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَثَّرَ|18بك|صفحة ويكاموس]] · الجذر: حثر · ([[toolforge:ar-senses/review/L1534223|رابط المُفردة في الأداة]])
المعنى لفعل حثر، الرجاء إصلاحه.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:52، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَثْرَفَ (L1534226) ==
'''حَثْرَفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534226|18بك|ويكي بيانات: L1534226]] [[ملف:Wiktionary-logo.svg|وصلة=حَثْرَفَ|18بك|صفحة ويكاموس]] · الجذر: حثرف · ([[toolforge:ar-senses/review/L1534226|رابط المُفردة في الأداة]])
المعنى الصحيح زعزعه وحركه، انظر تاج العروس جزء 23 صفحة 118.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:09، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَظْرَبَ (L1534501) ==
'''تَحَظْرَبَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534501|18بك|ويكي بيانات: L1534501]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَظْرَبَ|18بك|صفحة ويكاموس]] · الجذر: حظرب · ([[toolforge:ar-senses/review/L1534501|رابط المُفردة في الأداة]])
دًمج المعنيان ووُضعت أمثلة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:32، 16 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَافَلَ (L1534527) ==
'''حَافَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534527|18بك|ويكي بيانات: L1534527]] [[ملف:Wiktionary-logo.svg|وصلة=حَافَلَ|18بك|صفحة ويكاموس]] · الجذر: حفل · ([[toolforge:ar-senses/review/L1534527|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر المذكورة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:59، 16 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْقَوْقَفَ (L1489579) ==
'''اِحْقَوْقَفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1489579|18بك|ويكي بيانات: L1489579]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْقَوْقَفَ|18بك|صفحة ويكاموس]] · الجذر: حقف · ([[toolforge:ar-senses/review/L1489579|رابط المُفردة في الأداة]])
المعاني الأربعة مكررة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:52، 17 أغسطس 2026 (ت ع م)
== معجم مقاييس اللغة ==
مرحبا بالزملاء، روابط الكتاب الموجودة في الأداة غير دقيقة وقد كنت أظن أن الاختلاف في مفردة أو اثنتين لكن تبين لي أنها غير دقيقة في جميع المفردات، رقم الصفة صحيح ولكن الرابط بعيد عن الصفحة، تحياتي لكم. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:56، 17 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَكَرَ (L1478743) ==
'''اِحْتَكَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1478743|18بك|ويكي بيانات: L1478743]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَكَرَ|18بك|صفحة ويكاموس]] · الجذر: حكر · ([[toolforge:ar-senses/review/L1478743|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:42، 17 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَكَّرَ (L1534555) ==
'''حَكَّرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534555|18بك|ويكي بيانات: L1534555]] [[ملف:Wiktionary-logo.svg|وصلة=حَكَّرَ|18بك|صفحة ويكاموس]] · الجذر: حكر · ([[toolforge:ar-senses/review/L1534555|رابط المُفردة في الأداة]])
أشك بوجود المفردة المشكلة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:56، 17 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَمِضَ (L1543549) ==
'''حَمِضَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543549|18بك|ويكي بيانات: L1543549]] [[ملف:Wiktionary-logo.svg|وصلة=حَمِضَ|18بك|صفحة ويكاموس]] · الجذر: حمض · ([[toolforge:ar-senses/review/L1543549|رابط المُفردة في الأداة]])
المعاني مختلطة لعدم وضوح حركة الميم في الفعل.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:57، 19 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَسَى (L1486741) ==
'''أَسَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1486741|18بك|ويكي بيانات: L1486741]] [[ملف:Wiktionary-logo.svg|وصلة=أَسَى|18بك|صفحة ويكاموس]] · الجذر: أسي · ([[toolforge:ar-senses/review/L1486741|رابط المُفردة في الأداة]])
الفعل في المراجع أسا من الجذر أسو.--[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 20:03، 20 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِخْتَبَلَ (L1534805) ==
'''اِخْتَبَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534805|18بك|ويكي بيانات: L1534805]] [[ملف:Wiktionary-logo.svg|وصلة=اِخْتَبَلَ|18بك|صفحة ويكاموس]] · الجذر: خبل · ([[toolforge:ar-senses/review/L1534805|رابط المُفردة في الأداة]])
المعنى الثاني مكرر، حذفته.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:03، 21 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَخَاتَلَ (L1487389) ==
'''تَخَاتَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1487389|18بك|ويكي بيانات: L1487389]] [[ملف:Wiktionary-logo.svg|وصلة=تَخَاتَلَ|18بك|صفحة ويكاموس]] · الجذر: ختل · ([[toolforge:ar-senses/review/L1487389|رابط المُفردة في الأداة]])
دُمِج المعنيان.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:09، 21 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَخَاجَأَ (L1534840) ==
'''تَخَاجَأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534840|18بك|ويكي بيانات: L1534840]] [[ملف:Wiktionary-logo.svg|وصلة=تَخَاجَأَ|18بك|صفحة ويكاموس]] · الجذر: خجأ · ([[toolforge:ar-senses/review/L1534840|رابط المُفردة في الأداة]])
لاحظت التباسا أو خلطا بين (تخاجأ وتخاجى وتخاجا).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:22، 22 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَخَارَقَ (L1534942) ==
'''تَخَارَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534942|18بك|ويكي بيانات: L1534942]] [[ملف:Wiktionary-logo.svg|وصلة=تَخَارَقَ|18بك|صفحة ويكاموس]] · الجذر: خرق · ([[toolforge:ar-senses/review/L1534942|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:36، 22 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَآ (L1545136) ==
'''دَآ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1545136|18بك|ويكي بيانات: L1545136]] [[ملف:Wiktionary-logo.svg|وصلة=دَآ|18بك|صفحة ويكاموس]] · الجذر: دأو · ([[toolforge:ar-senses/review/L1545136|رابط المُفردة في الأداة]])
الفعل الصحيح (دَأَى) كما في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:47، 22 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِدْحَوَى (L1535316) ==
'''اِدْحَوَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535316|18بك|ويكي بيانات: L1535316]] [[ملف:Wiktionary-logo.svg|وصلة=اِدْحَوَى|18بك|صفحة ويكاموس]] · الجذر: دحو · ([[toolforge:ar-senses/review/L1535316|رابط المُفردة في الأداة]])
استبدلت المصدر بمصادر أكثر دقة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:49، 23 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَدَرَّهَ (L1535387) ==
'''تَدَرَّهَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535387|18بك|ويكي بيانات: L1535387]] [[ملف:Wiktionary-logo.svg|وصلة=تَدَرَّهَ|18بك|صفحة ويكاموس]] · الجذر: دره · ([[toolforge:ar-senses/review/L1535387|رابط المُفردة في الأداة]])
دره وليس تدره.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:55، 24 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَشَا (L1544094) ==
'''دَشَا''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544094|18بك|ويكي بيانات: L1544094]] [[ملف:Wiktionary-logo.svg|وصلة=دَشَا|18بك|صفحة ويكاموس]] · الجذر: دشو · ([[toolforge:ar-senses/review/L1544094|رابط المُفردة في الأداة]])
أضفت المعنى ووثقته من المعاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:54، 25 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَغِرَ (L1543752) ==
'''دَغِرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543752|18بك|ويكي بيانات: L1543752]] [[ملف:Wiktionary-logo.svg|وصلة=دَغِرَ|18بك|صفحة ويكاموس]] · الجذر: دغر · ([[toolforge:ar-senses/review/L1543752|رابط المُفردة في الأداة]])
للمفردة أكثر من معنى غير مذكور، ولا أدري هي بالكسر أم بالفتح دَغَرَ دَغِرَ.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:03، 25 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَاغَصَ (L1535445) ==
'''دَاغَصَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535445|18بك|ويكي بيانات: L1535445]] [[ملف:Wiktionary-logo.svg|وصلة=دَاغَصَ|18بك|صفحة ويكاموس]] · الجذر: دغص · ([[toolforge:ar-senses/review/L1535445|رابط المُفردة في الأداة]])
حذفت المعاني الثلاثة الأخيرة لأنها مختلطة بمفردة (دَاغَشَ).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:42، 25 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِدَّمَسَ (L1535554) ==
'''اِدَّمَسَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535554|18بك|ويكي بيانات: L1535554]] [[ملف:Wiktionary-logo.svg|وصلة=اِدَّمَسَ|18بك|صفحة ويكاموس]] · الجذر: دمس · ([[toolforge:ar-senses/review/L1535554|رابط المُفردة في الأداة]])
حذفت المصدرين وأضفت تهذيب اللغة لورود المفردة فيه ج=12 ص=263.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:13، 28 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَدَمْشَقَ (L1535561) ==
'''تَدَمْشَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535561|18بك|ويكي بيانات: L1535561]] [[ملف:Wiktionary-logo.svg|وصلة=تَدَمْشَقَ|18بك|صفحة ويكاموس]] · الجذر: دمشق · ([[toolforge:ar-senses/review/L1535561|رابط المُفردة في الأداة]])
المفردة غير موجودة والمثال غير موجود.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:29، 28 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَنَّأَ (L1535578) ==
'''دَنَّأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535578|18بك|ويكي بيانات: L1535578]] [[ملف:Wiktionary-logo.svg|وصلة=دَنَّأَ|18بك|صفحة ويكاموس]] · الجذر: دنأ · ([[toolforge:ar-senses/review/L1535578|رابط المُفردة في الأداة]])
لا أظن الفعل مهموزا.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:19، 28 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِدَّنَى (L1535595) ==
'''اِدَّنَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535595|18بك|ويكي بيانات: L1535595]] [[ملف:Wiktionary-logo.svg|وصلة=اِدَّنَى|18بك|صفحة ويكاموس]] · الجذر: دنو · ([[toolforge:ar-senses/review/L1535595|رابط المُفردة في الأداة]])
المثال في صفحة 273 وأظنه بمعنى مختلف.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:43، 29 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَبْشَبَ (L1537222) ==
'''شَبْشَبَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537222|18بك|ويكي بيانات: L1537222]] [[ملف:Wiktionary-logo.svg|وصلة=شَبْشَبَ|18بك|صفحة ويكاموس]] · الجذر: شبشب · ([[toolforge:ar-senses/review/L1537222|رابط المُفردة في الأداة]])
حذف المعنى الثاني لأنه خطأ من الأداة بسبب وجود خطأ مطبعي في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:13، 31 أغسطس 2026 (ت ع م)
:هل تحويل حركات من فتحة الى الكسرة يحل مشكلة؟ [[مستخدم:يزن البلوي|يزن البلوي]] ([[نقاش المستخدم:يزن البلوي|نقاش]]) 13:32، 1 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِنْشَبَحَ (L1537214) ==
'''اِنْشَبَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537214|18بك|ويكي بيانات: L1537214]] [[ملف:Wiktionary-logo.svg|وصلة=اِنْشَبَحَ|18بك|صفحة ويكاموس]] · الجذر: شبح · ([[toolforge:ar-senses/review/L1537214|رابط المُفردة في الأداة]])
استبدلت مقاييس اللغة بجمهرة اللغة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:33، 2 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَاجَّ (L1537248) ==
'''شَاجَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537248|18بك|ويكي بيانات: L1537248]] [[ملف:Wiktionary-logo.svg|وصلة=شَاجَّ|18بك|صفحة ويكاموس]] · الجذر: شجج · ([[toolforge:ar-senses/review/L1537248|رابط المُفردة في الأداة]])
استخراج خاطئ، لم أجد التصريف في بقية المراجع.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:34، 4 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَرَّى (L1485717) ==
'''تَبَرَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1485717|18بك|ويكي بيانات: L1485717]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَرَّى|18بك|صفحة ويكاموس]] · الجذر: بري · ([[toolforge:ar-senses/review/L1485717|رابط المُفردة في الأداة]])
الفعل في المراجع "تَبرأ" من جذر برأ وليس "تَبَرَّى" من جذر بري --[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 12:29، 5 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَحَطَ (L1489005) ==
'''شَحَطَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1489005|18بك|ويكي بيانات: L1489005]] [[ملف:Wiktionary-logo.svg|وصلة=شَحَطَ|18بك|صفحة ويكاموس]] · الجذر: شحط · ([[toolforge:ar-senses/review/L1489005|رابط المُفردة في الأداة]])
خلل وأخطاء غير معروفة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:19، 5 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَشْحَنَ (L1537270) ==
'''أَشْحَنَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537270|18بك|ويكي بيانات: L1537270]] [[ملف:Wiktionary-logo.svg|وصلة=أَشْحَنَ|18بك|صفحة ويكاموس]] · الجذر: شحن · ([[toolforge:ar-senses/review/L1537270|رابط المُفردة في الأداة]])
المعنى اأخير لـ(أحشن) وليس لـ(أشحن).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:29، 6 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَرَّى (L1537351) ==
'''شَرَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537351|18بك|ويكي بيانات: L1537351]] [[ملف:Wiktionary-logo.svg|وصلة=شَرَّى|18بك|صفحة ويكاموس]] · الجذر: شري · ([[toolforge:ar-senses/review/L1537351|رابط المُفردة في الأداة]])
لا أعلم إن كان حرف الراء مشددا أم لا.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:01، 7 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَرِفَ (L1544475) ==
'''شَرِفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544475|18بك|ويكي بيانات: L1544475]] [[ملف:Wiktionary-logo.svg|وصلة=شَرِفَ|18بك|صفحة ويكاموس]] · الجذر: شرف · ([[toolforge:ar-senses/review/L1544475|رابط المُفردة في الأداة]])
هل هي بضم الراء أم بكسرها؟<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:54، 7 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَشْدَى (L1537300) ==
'''أَشْدَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537300|18بك|ويكي بيانات: L1537300]] [[ملف:Wiktionary-logo.svg|وصلة=أَشْدَى|18بك|صفحة ويكاموس]] · الجذر: شدو · ([[toolforge:ar-senses/review/L1537300|رابط المُفردة في الأداة]])
استخراج الأداة خاطئ.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 23:44، 8 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: جَاجَ (L1544958) ==
'''جَاجَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544958|18بك|ويكي بيانات: L1544958]] [[ملف:Wiktionary-logo.svg|وصلة=جَاجَ|18بك|صفحة ويكاموس]] · الجذر: جوج · ([[toolforge:ar-senses/review/L1544958|رابط المُفردة في الأداة]])
الفعل في المرجع جِيج من جذر جيج.--[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 12:36، 10 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: جَاثَ (L1544257) ==
'''جَاثَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544257|18بك|ويكي بيانات: L1544257]] [[ملف:Wiktionary-logo.svg|وصلة=جَاثَ|18بك|صفحة ويكاموس]] · الجذر: جوث · ([[toolforge:ar-senses/review/L1544257|رابط المُفردة في الأداة]])
الفعل في المراجع جوث، وهناك فعل أخر جأث بمعنى آخر، لكن لم أجد المفردة "جأث" بهذا الشكل. --[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 12:53، 10 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَسَى (L1495990) ==
'''حَسَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1495990|18بك|ويكي بيانات: L1495990]] [[ملف:Wiktionary-logo.svg|وصلة=حَسَى|18بك|صفحة ويكاموس]] · الجذر: حسي · ([[toolforge:ar-senses/review/L1495990|رابط المُفردة في الأداة]])
<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. -->الفعل حَسَا وليس حسى.--[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 11:39، 11 سبتمبر 2026 (ت ع م)
sdd84sqro8np5jxo1x0a4auiju06lrs
1159145
1159144
2026-09-11T11:40:01Z
إسلام
12622
/* بلاغ من أداة مراجعة المعاني: حَسَى (L1495990) */
1159145
wikitext
text/x-wiki
{{رأس صفحة نقاش}}
== بلاغ من أداة مراجعة المعاني: حَلَّى (L1534604) ==
'''حَلَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534604|18بك|ويكي بيانات: L1534604]] [[ملف:Wiktionary-logo.svg|وصلة=حَلَّى|18بك|صفحة ويكاموس]] · الجذر: حلو · ([[toolforge:ar-senses/review/L1534604|رابط المُفردة في الأداة]])
إبلاغ من الزميل {{مس|رِفْد}}: ''لا يمكن نشرها في ويكاموس عند الضغط على زر النشر يظهر: "خطأ: الصفحة موجودة بالفعل".'' --[[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 11:27، 27 يوليو 2026 (ت ع م)
:شكرا لك @[[مستخدم:رِفْد|رِفْد]] على الإبلاغ. المشكلة في الفعل حَلَّى (وأفعال آخرين) أَنَّه يُوَلَّدُ من جذرين: ح-ل-ي و ح-ل-و. في ويكي بيانات توجد وحدتان معجميتان، واحدة لكل فعل، لكن في ويكاموس لا يُمكن إنشاء صفحتين بنفس الاسم. سأفكر في حل لهذه المشكلة وأوافيك بالجديد. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 11:28، 27 يوليو 2026 (ت ع م)
::حالة أخرى حيث يشترك جذران في نفس صيغة الفعل:
::* جذر ت-ل-و على وزن تفعّل => [[تَتَلَّى]] ([https://ar-senses.toolforge.org/review/L1533461 رابط المُفردة في الأداة]).
::* جذر ت-ل-ي على وزن تفعّل => [[تَتَلَّى]]
::[[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 11:42، 27 يوليو 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِسْتَجَاشَ (L1534157) ==
'''اِسْتَجَاشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534157|18بك|ويكي بيانات: L1534157]] [[ملف:Wiktionary-logo.svg|وصلة=اِسْتَجَاشَ|18بك|صفحة ويكاموس]] · الجذر: جيش · ([[toolforge:ar-senses/review/L1534157|رابط المُفردة في الأداة]])
المعنى الثاني غير موجود في المصدر في صفحة المفردة (ص=603) والحديث الموجود في صفحة 115 غير مفسر بهذا المعنى أيضا. --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:40، 27 يوليو 2026 (ت ع م)
<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. -->
:{{ر|أبو هشام}} بخصوص المعنى الثاني، رجعتُ إلى ص=603 ووجدتُ المعنى حسب الوارد في الأداة: {{اقتباس مضمن|استجاش الأمير من مكان كذا: طلب جيشًا وجمعه. '''و- ت القدر: غلت.'''}}
:{{ر|Michel Bakni}} بخصوص المعنى الثالث (ص=115)، يبدو المعنى صحيحًا لكن الأداة استَنْبَطَتْهُ من مثال وارد في المعجم لا من تعريف للكلمة، ما رأيك؟
:*الاقتباس من المصدر: {{اقتباس مضمن|فَمَرَّ الْجَيْشُ عَلَى غَطَفَانَ '''فَاسْتَجَاشُوهُمْ''' عَلَى بَنِي سُليم، فَهَزَمَتْ بَنُو سُلَيم جيشَ النُّعْمَانِ}}
:*تعريف المعنى كما استخرجَتْهُ الأداة من النص السابق: {{اقتباس مضمن|اِسْتَجَاشَ القومَ على فلان: استنفرهم وحرّضهم عليه}}
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:23، 6 أغسطس 2026 (ت ع م).
::نعم أتفق مع هذا الطرح. [[مستخدم:Michel Bakni|Michel Bakni]] ([[نقاش المستخدم:Michel Bakni|نقاش]]) 14:25، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: جَوَّهَ (L1534145) ==
'''جَوَّهَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534145|18بك|ويكي بيانات: L1534145]] [[ملف:Wiktionary-logo.svg|وصلة=جَوَّهَ|18بك|صفحة ويكاموس]] · الجذر: جوه · ([[toolforge:ar-senses/review/L1534145|رابط المُفردة في الأداة]])
المعنى بهذا التصريف خطأ، لم أعثر على جوّه فلانا أي جعله وجيها، ولم أجد جوّه السقاء أي رقعه بل وجدت جواه في معجم متن اللغة. --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:48، 27 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك، المشكلة هي أن الأداة أخذت الجذر (جَوَهَ) وألحقت به معنى الفرع (وجَّهَ أو أَوْجَهَ، كحال: أَوْجَهْتُهُ أنا ووَجَّهْتُهُ)، سوف نعمل على إصلاحها.
:{{ر|ForzaGreen}} خطوات قادمة:
:#يجب أن نتوثَّق من أن الأداة تُميِّزُ الجذر عن الفرع. في هذه الحالة، أخذت الأداة الجذر ('''جَوَهَ''') وشكَّلتهُ ('''جَوَّهَ''')، ثم ألحقَتْ به معنى خاطئًا للمشتق.
:#بناءً على ما نراهُ هنا وقي حالات أخرى، نحتاج إلى '''خيار للمراجع لتعديل عنوان الصفحة'''، فلو أمكنهُ تبديل العنوان في هذه الحالة إلى '''وجَّهَ''' أو '''أَوْجَهَ''' لكان صحيحًا.
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 13:54، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: سَدَسَ (L1547049) ==
'''سَدَسَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1547049|18بك|ويكي بيانات: L1547049]] [[ملف:Wiktionary-logo.svg|وصلة=سَدَسَ|18بك|صفحة ويكاموس]] · الجذر: سدس · ([[toolforge:ar-senses/review/L1547049|رابط المُفردة في الأداة]])
المعنى الثاني مكرر، استبدلته وأضفت مصادر. --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:04، 28 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك ونعمل على التوثّق من مسألة تكرار المعاني --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 13:58، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: تَسَدَّى (L1536864) ==
'''تَسَدَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1536864|18بك|ويكي بيانات: L1536864]] [[ملف:Wiktionary-logo.svg|وصلة=تَسَدَّى|18بك|صفحة ويكاموس]] · الجذر: سدي · ([[toolforge:ar-senses/review/L1536864|رابط المُفردة في الأداة]])
خلل في رقم صفحة القاموس المحيط، ولا توجد شواهد قوية على المعنى الأول، أظن أن المفردة بحاجة لمراجعة وإعادة ترتيب المعاني.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:44، 29 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} متفّق، {{اقتباس مضمن|والحائكُ يُسَدِّي الثَّوْبَ ويَتَسَدّاه}} أي يحيكه لنفسه.
:{{ر|ForzaGreen}} يبدو أن النموذج اختلَطَ عليه الأمر أثناء دمج المعاني، ربما خصوصًا من لسان العرب ({{اقتباس مضمن|والحائكُ يُسَدِّي الثَّوْبَ ويَتَسَدّاه}})، فخرجَ بالمعنى المبتدع: {{اقتباس مضمن|تَسَدَّى الثوبَ: أقام سَداه لنفسه}}، وليس له مثيل في المصادر.
:'''الخطوات القادمة المقترحة''': أشتَبِهُ في أن النموذج يفقد موثوقيته حين دَمْجَ المعاني من عددٍ كبير من المصادر (5 مصادر في هذه الحالة)، '''أقترح وَضْعَ حدّ أعلى للمصادر التي نستخدمها في استخراج المعنى، ربما 3 للوقت الحاضر'''.
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:10، 6 أغسطس 2026 (ت ع م).
::وضع حد للمصادر آليا قد يحرم المفردة من المصدر الأقوى والأدق. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:30، 6 أغسطس 2026 (ت ع م)
:{{أصلح}} الخلل في رقم صفحة القاموس المحيط، لهذه المُفردة ولمفردات أخرى. يبدو أن المشكل كان سببه عشوائية النموذج اللغوي، إذ كان يُغيِّر رقم الصفحة في أقل من 1% من الحالات. عدّلتُ أداة توليد المعاني حتى لا يتكرر الخطأ.
:بالنسبة للمصادر، أُفضل الإبقاء عليها جميعا. سنُجرب مع {{مس|عباد ديرانية}} تعديل تعليمات النموذج لتحسين المُخْرَجات ولإصلاح مشاكل أخرى، لا سيما المعاني المُكررة. -- [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 23:47، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَسَافَدَ (L1497488) ==
'''تَسَافَدَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1497488|18بك|ويكي بيانات: L1497488]] [[ملف:Wiktionary-logo.svg|وصلة=تَسَافَدَ|18بك|صفحة ويكاموس]] · الجذر: سفد · ([[toolforge:ar-senses/review/L1497488|رابط المُفردة في الأداة]])
اكتفيت بالمعنى الأول بسبب التكرار.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 11:51، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} ملاحظة للعمل على تكرار المعاني، المعنى 1 و2 متماثلان والثاني هو الأوضح للمستخدم المعاصر --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:13، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: سَافَحَ (L1487289) ==
'''سَافَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1487289|18بك|ويكي بيانات: L1487289]] [[ملف:Wiktionary-logo.svg|وصلة=سَافَحَ|18بك|صفحة ويكاموس]] · الجذر: سفح · ([[toolforge:ar-senses/review/L1487289|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لأنه مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:42، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} حالة تكرار أخرى مؤكدة في المعنى 1 والمعنى 2 --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:14، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: تَرَأَّمَ (L1535813) ==
'''تَرَأَّمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535813|18بك|ويكي بيانات: L1535813]] [[ملف:Wiktionary-logo.svg|وصلة=تَرَأَّمَ|18بك|صفحة ويكاموس]] · الجذر: رأم · ([[toolforge:ar-senses/review/L1535813|رابط المُفردة في الأداة]])
دمجت المعنيين وصححت رقم الجزء والصفحة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:58، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} حالة تكرار مؤكّدة بين المعنى 1 و2، كما يأتي:
:#{{اقتباس مضمن|تَرَأَّمَ الشيءَ: أحبَّه وألِفَه وعطف عليه وترحم عليه}}
:#{{اقتباس مضمن|تَرَأَّمَ الصبيَّ: ترحَّم عليه}}
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:26، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: جَاوَى (L1534151) ==
'''جَاوَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534151|18بك|ويكي بيانات: L1534151]] [[ملف:Wiktionary-logo.svg|وصلة=جَاوَى|18بك|صفحة ويكاموس]] · الجذر: جوي · ([[toolforge:ar-senses/review/L1534151|رابط المُفردة في الأداة]])
خطأ: الصفحة 'جَاوَى' موجودة بالفعل <!-- يظهر هكذا: خطأ: الصفحة 'جَاوَى' موجودة بالفعل. --> --[[مستخدم:رِفْد|رِفْد]] ([[نقاش المستخدم:رِفْد|نقاش]]) 22:15، 30 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} أتقصد أنكَ أنشأتَ الصفحة سابقًا عبر الأداة ثم ظهرت لك مرة أخرى في أداة مراجعة المعاني؟ --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:27، 6 أغسطس 2026 (ت ع م).
::مرحبا {{ر|عباد ديرانية}} أعتقد أن الخلل هو وجود صفحة مكررة في ويكي بيانات يلزم دمجها، تحياتي لك. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:59، 6 أغسطس 2026 (ت ع م)
:::+أضيفُ الاقتراح الممتاز '''إضافة تنبيهٍ بالخط الأحمر إلى الأداة في حال لو أن الصفحة أُنْشِأَتْ وحُذِفَتْ سابقًا''' تنبيهًا للمستخدم --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 16:07، 6 أغسطس 2026 (ت ع م).
::::هذا المشكل تكرر مرات عديدة (انظر النقاش أعلاه عن الفعل '''حَلَّى''') والسبب هو المُفردات التي تشترك في نفس الجذر. حاليا لا يوجد حل تقني للمسألة، لكنها في بالي وسأفكر في حل. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 22:48، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَجَاذَى (L1533824) ==
'''تَجَاذَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533824|18بك|ويكي بيانات: L1533824]] [[ملف:Wiktionary-logo.svg|وصلة=تَجَاذَى|18بك|صفحة ويكاموس]] · الجذر: جذي · ([[toolforge:ar-senses/review/L1533824|رابط المُفردة في الأداة]])
خطأ: الصفحة 'تَجَاذَى' موجودة بالفعل <!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:رِفْد|رِفْد]] ([[نقاش المستخدم:رِفْد|نقاش]]) 22:19، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} هذه ملاحظة متكرّرة من المستخدمين، يظهر أننا نحتاجُ إلى '''تحديث الأداة بوتيرة يومية لإزالة الصفحات المنشأة سابقًا'''، إلا لو كان هذا خطأً تقنيًا مختلفًا يُسبِّبُ التكرار --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 15:48، 6 أغسطس 2026 (ت ع م).
::كنت أصلحت هذه الكلمة مع كلمات أخرى لكن لم أصلح بعد مصدر الخطأ، وهو الأفعال التي لها جذور مختلفة لكنها تشترك في نفس الصيغة. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 17:51، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَجْذَى (L1533823) ==
'''أَجْذَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533823|18بك|ويكي بيانات: L1533823]] [[ملف:Wiktionary-logo.svg|وصلة=أَجْذَى|18بك|صفحة ويكاموس]] · الجذر: جذي · ([[toolforge:ar-senses/review/L1533823|رابط المُفردة في الأداة]])
خطأ: الصفحة 'أَجْذَى' موجودة بالفعل <!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:رِفْد|رِفْد]] ([[نقاش المستخدم:رِفْد|نقاش]]) 22:20، 30 يوليو 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: زَأْزَأَ (L1536388) ==
'''زَأْزَأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1536388|18بك|ويكي بيانات: L1536388]] [[ملف:Wiktionary-logo.svg|وصلة=زَأْزَأَ|18بك|صفحة ويكاموس]] · الجذر: زأزأ · ([[toolforge:ar-senses/review/L1536388|رابط المُفردة في الأداة]])
حذفت المعنى الخامس لأنه مزيد بتاء في المراجع.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:35، 4 أغسطس 2026 (ت ع م)
:{{ر|Michel Bakni}} المعنى الخامس مزيدٌ بتاء التأنيث، فهل نُنْشِئُ له صفحةً منفصلةً برأيك أم نضيفه إلى ذات الصفحة مع تحويلة؟
:شرح المعنى الخامس: {{اقتباس مضمن|زَأْزَأَتِ المرأةُ: مشت وحرّكت أعطافها كمشية القِصار}}
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:33، 6 أغسطس 2026 (ت ع م).
::نعم، يلزم إنشاء صفحة لكل فعل بكل تصريف، هذا التصريف: المؤنث المفرد الغائب. [[مستخدم:Michel Bakni|Michel Bakni]] ([[نقاش المستخدم:Michel Bakni|نقاش]]) 14:36، 6 أغسطس 2026 (ت ع م)
:::{{ر|ForzaGreen}} إذًا يلزمنا التوثّق من تمييز النموذج للمؤنّث وتخصيصه صفحة مستقلّة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:54، 6 أغسطس 2026 (ت ع م).
::::أنا رأيي كل المعاني والأمثلة تبقى في صفحة الفعل الرئيسية، والصيغ المُصرفة تحيل إلى الصفحة الرئيسية. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 15:06، 6 أغسطس 2026 (ت ع م)
::::متّفق مع وائل هنا بالواقع، الأفضل هو تخفيف الإحالات إن أمكن وجَمْع تصريفات المذكر والمؤنث والعدد بصفحة واحدة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 15:52، 6 أغسطس 2026 (ت ع م).
:::::لكن الذي يراجع القوالب يفهم أن لكل تصريف صفحة خاصة به لذلك أنا أتفق مع الزميل ميشيل على إنشاء صفحة لكل تصريف، تحياتي لكم. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:10، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَزْعَلَ (L1476504) ==
'''أَزْعَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1476504|18بك|ويكي بيانات: L1476504]] [[ملف:Wiktionary-logo.svg|وصلة=أَزْعَلَ|18بك|صفحة ويكاموس]] · الجذر: زعل · ([[toolforge:ar-senses/review/L1476504|رابط المُفردة في الأداة]])
دمجت المعنى الأول والثالث لأن المعنى الثالث مكرر عن الأول.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 10:04، 4 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك ونعمل على معالجة مسألة المعاني المُكرَّرة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:34، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: زَعِلَ (L1487695) ==
'''زَعِلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1487695|18بك|ويكي بيانات: L1487695]] [[ملف:Wiktionary-logo.svg|وصلة=زَعِلَ|18بك|صفحة ويكاموس]] · الجذر: زعل · ([[toolforge:ar-senses/review/L1487695|رابط المُفردة في الأداة]])
المعنى الأول (مرح) غير موجود في المراجع، والمعنى الثالث بحاجة إلى تدقيق، تحتاج المفردة إلى مراجعة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 10:41، 4 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} من معجم العين: {{اقتباس مضمن|الزَّعِل: النشيط '''الأشر'''. زَعِلَ يَزْعَلُ زَعَلًا.}}، الأشر هنا بمعنى المرح (مصدر [https://www.islamweb.net/ar/library/content/122/137/%D8%A3%D8%B4%D8%B1 من لسان العرب]).
:{{ر|ForzaGreen}} المعنى الثالث فيه اختلاطٌ بين معانٍ عِدّة، مثل: {{اقتباس مضمن|والزعل: '''المتضور جوعا'''}} (الجوهري) و{{اقتباس مضمن|الزَّعَلُ '''كالعَلَزِ مِنَ المَرَض'''}} (لسان العرب)، والمعنى في الأداة جاءَ: {{اقتباس مضمن|زَعِلَ من المرض أو الجوع: تضوّر وتلوّى وقلِق فلم يستقر}}.
:'''الخطوات القادمة المقترحة''': أشتبه أن النموذج اختلط عليه دمج المعنى عبر 5 مصادر، والأفضل والأسهل للمراجع (فمن الصعب جدًا تقصّي 5 مراجع مختلفة) أن '''نضعَ حدًا بين مصدرَيْن إلى ثلاثة مصادر للمعنى الواحد''' --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:48، 6 أغسطس 2026 (ت ع م).
::نعم، في الحقيقة تحتوي بعض المفردات على مراجع كثيرة وأتفق معك على الاستشهاد بمرجعين أو ثلاث بأقصى حد لكن لو يكون انتقاء المراجع يدويا أفضل لاختيار الأنسب والأقرب إلا إذا كان الاختيار الآلي قادرا على انتقاء المرجع الأنسب أو الأقرب أو الأدق. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:21، 6 أغسطس 2026 (ت ع م)
:::إشارة {{ر|عباد ديرانية}} أرجو مراجعة تقليل المراجع آليا فقد تحرم الأداةُ المفردةَ من المراجع الأدق وتضع المراجع الأبعد. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:23، 6 أغسطس 2026 (ت ع م)
::::{{ر|أبو هشام}} لا بأس بذلك، لكن إن تركنا للمُرَاجِعِ اختيار المصادر الأدق فهذا يعني أن عليهم مراجعة 5 - 6 مصادر في بعض الحالات، فما هو الأفضل بالنسبة لك بين هذه الخيارات؟ أهو انتقاء المصادر الأفضل يدويًا أم تقليل عدد المصادر التي وجبت مراجعتها؟ --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 15:51، 6 أغسطس 2026 (ت ع م).
:::::{{ر|عباد ديرانية}} أميل إلى الانتقاء اليدوي أو البشري دون تقليل للمصادر فالمراجِع قادر على انتقاء المصدر الأنسب للمفردة، وإن كان للزملاء رأي آخر فلا أعترض، تحياتي. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:15، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَلَكَ (L1502490) ==
'''أَلَكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1502490|18بك|ويكي بيانات: L1502490]] [[ملف:Wiktionary-logo.svg|وصلة=أَلَكَ|18بك|صفحة ويكاموس]] · الجذر: ألك · ([[toolforge:ar-senses/review/L1502490|رابط المُفردة في الأداة]])
حذفت المرجع الأخير من المعنى الثاني لأن فيه خطأ فقد استُشهد بصفحة 132 من معجم متن اللغة وفيها (أَلَكَ لَجَأٌ يَا فلَان) وهو استشهاد خاطئ لأن (ألك) هنا استفهام وليست فعل.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:33، 5 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك وسوف نعمل على زيادة دقة ضبط المعاني المتقاربة بالأداة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:49، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: اِبْتَسَطَ (L1533014) ==
'''اِبْتَسَطَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533014|18بك|ويكي بيانات: L1533014]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْتَسَطَ|18بك|صفحة ويكاموس]] · الجذر: بسط · ([[toolforge:ar-senses/review/L1533014|رابط المُفردة في الأداة]])
غير موثقة، لا يوجد فيها مصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:04، 5 أغسطس 2026 (ت ع م)
:{{ر|ForzaGreen}} حالة غريبةٌ ليس فيه أي مصدر للمعنى المستخرج! --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:49، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: أَبْشَكَ (L1533037) ==
'''أَبْشَكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533037|18بك|ويكي بيانات: L1533037]] [[ملف:Wiktionary-logo.svg|وصلة=أَبْشَكَ|18بك|صفحة ويكاموس]] · الجذر: بشك · ([[toolforge:ar-senses/review/L1533037|رابط المُفردة في الأداة]])
هذه اللفظة بحاجة لمراجعة فلها عدة معان.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:50، 6 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} هل لكَ أن تُوضِحَ المقصود؟ لم أجد كلمة أبشك في المرجع أصلًا للأسف --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:52، 6 أغسطس 2026 (ت ع م).
::{{ر|عباد ديرانية}} وجدت هذا ('''أبشك''' الكلام: كذب فيه: تخرص فيه كاذبًا.) في معجم متن اللغة ج=1 ص=299، وهذا أيضا (وبَشَكَ الْكَلَامَ يَبْشُكه بَشْكًا و'''أبشَكه''': تَخَرَّصهُ كَاذِبًا،) في لسان العرب ج=10 ص=400، ولم أجد أن معناها '''أسرع'''، تحياتي. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:43، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَاطَأَ (L1496404) ==
'''بَاطَأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1496404|18بك|ويكي بيانات: L1496404]] [[ملف:Wiktionary-logo.svg|وصلة=بَاطَأَ|18بك|صفحة ويكاموس]] · الجذر: بطأ · ([[toolforge:ar-senses/review/L1496404|رابط المُفردة في الأداة]])
لا يوجد التصريف في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:43، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَبْطَحَ (L1533063) ==
'''أَبْطَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533063|18بك|ويكي بيانات: L1533063]] [[ملف:Wiktionary-logo.svg|وصلة=أَبْطَحَ|18بك|صفحة ويكاموس]] · الجذر: بطح · ([[toolforge:ar-senses/review/L1533063|رابط المُفردة في الأداة]])
غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:47، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَطَّحَ (L1533066) ==
'''بَطَّحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533066|18بك|ويكي بيانات: L1533066]] [[ملف:Wiktionary-logo.svg|وصلة=بَطَّحَ|18بك|صفحة ويكاموس]] · الجذر: بطح · ([[toolforge:ar-senses/review/L1533066|رابط المُفردة في الأداة]])
هل هي بطَح أم بطّح؟<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:48، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَطْرَقَ (L1533070) ==
'''تَبَطْرَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533070|18بك|ويكي بيانات: L1533070]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَطْرَقَ|18بك|صفحة ويكاموس]] · الجذر: بطرق · ([[toolforge:ar-senses/review/L1533070|رابط المُفردة في الأداة]])
هذا الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:58، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَهُؤَ (L1545462) ==
'''بَهُؤَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1545462|18بك|ويكي بيانات: L1545462]] [[ملف:Wiktionary-logo.svg|وصلة=بَهُؤَ|18بك|صفحة ويكاموس]] · الجذر: بهأ · ([[toolforge:ar-senses/review/L1545462|رابط المُفردة في الأداة]])
معناها (أنس) كما في لسان العرب ج=1 ص=35 ومعجم متن اللغة ج=1 ص=353.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:29، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَاهَتَ (L1533268) ==
'''تَبَاهَتَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533268|18بك|ويكي بيانات: L1533268]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَاهَتَ|18بك|صفحة ويكاموس]] · الجذر: بهت · ([[toolforge:ar-senses/review/L1533268|رابط المُفردة في الأداة]])
حسنتُ المعنى وأضفت مصدرين.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:01، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَعِرَ (L1544067) ==
'''بَعِرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544067|18بك|ويكي بيانات: L1544067]] [[ملف:Wiktionary-logo.svg|وصلة=بَعِرَ|18بك|صفحة ويكاموس]] · الجذر: بعر · ([[toolforge:ar-senses/review/L1544067|رابط المُفردة في الأداة]])
'''[[بَعِرَ]]''' الجمل بالكسر صار بعيرا كما في القاموس المحيط ص=352.
المفردة (بَعَرَ) وهي موجودة في المشروع '''[[بَعَرَ]]''' فيلزم تحديثها أو حذفها لأنها خاطئة انظر القاموس المحيط ص=694 وإنشاء صفحة جديدة ببيانات صحيحة هي البيانات الموجودة في الأداة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:31، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَعَّقَ (L1533113) ==
'''بَعَّقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533113|18بك|ويكي بيانات: L1533113]] [[ملف:Wiktionary-logo.svg|وصلة=بَعَّقَ|18بك|صفحة ويكاموس]] · الجذر: بعق · ([[toolforge:ar-senses/review/L1533113|رابط المُفردة في الأداة]])
هل هي بَعَّقَ بالتشديد أم بَعَقَ بالتخفيف؟<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:02، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَغْزَلَ (L1533126) ==
'''تَبَغْزَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533126|18بك|ويكي بيانات: L1533126]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَغْزَلَ|18بك|صفحة ويكاموس]] · الجذر: بغزل · ([[toolforge:ar-senses/review/L1533126|رابط المُفردة في الأداة]])
المعنى الصحيح '''تبختر''' وله شواهد في أربعة معاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:13، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَقَّمَ (L1533154) ==
'''بَقَّمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533154|18بك|ويكي بيانات: L1533154]] [[ملف:Wiktionary-logo.svg|وصلة=بَقَّمَ|18بك|صفحة ويكاموس]] · الجذر: بقم · ([[toolforge:ar-senses/review/L1533154|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:44، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَقَّمَ (L1533153) ==
'''تَبَقَّمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533153|18بك|ويكي بيانات: L1533153]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَقَّمَ|18بك|صفحة ويكاموس]] · الجذر: بقم · ([[toolforge:ar-senses/review/L1533153|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:50، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَكِئَ (L1543356) ==
'''بَكِئَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543356|18بك|ويكي بيانات: L1543356]] [[ملف:Wiktionary-logo.svg|وصلة=بَكِئَ|18بك|صفحة ويكاموس]] · الجذر: بكأ · ([[toolforge:ar-senses/review/L1543356|رابط المُفردة في الأداة]])
حذفت المعنى الأول لأنه غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:13، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْتَلَتَ (L1533174) ==
'''اِبْتَلَتَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533174|18بك|ويكي بيانات: L1533174]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْتَلَتَ|18بك|صفحة ويكاموس]] · الجذر: بلت · ([[toolforge:ar-senses/review/L1533174|رابط المُفردة في الأداة]])
المفردة غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:35، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَلْدَحَ (L1533193) ==
'''تَبَلْدَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533193|18بك|ويكي بيانات: L1533193]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَلْدَحَ|18بك|صفحة ويكاموس]] · الجذر: بلدح · ([[toolforge:ar-senses/review/L1533193|رابط المُفردة في الأداة]])
أضفت المعنى الثاني، لم تستخرجه الأداة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:54، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْلَنْدَكَ (L1533194) ==
'''اِبْلَنْدَكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533194|18بك|ويكي بيانات: L1533194]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْلَنْدَكَ|18بك|صفحة ويكاموس]] · الجذر: بلدك · ([[toolforge:ar-senses/review/L1533194|رابط المُفردة في الأداة]])
المعنى خاطئ، والمفردة غير موجودة في المصدر.
:المعنى الصحيح ('''اتسع''') موجود في أربعة معاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:00، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَلَّرَ (L1533196) ==
'''تَبَلَّرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533196|18بك|ويكي بيانات: L1533196]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَلَّرَ|18بك|صفحة ويكاموس]] · الجذر: بلر · ([[toolforge:ar-senses/review/L1533196|رابط المُفردة في الأداة]])
إملاء المفردة خاطئ، والصحيح ('''تَرَبَّل''') كما في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:08، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَقَّعَ (L1533145) ==
'''بَقَّعَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533145|18بك|ويكي بيانات: L1533145]] [[ملف:Wiktionary-logo.svg|وصلة=بَقَّعَ|18بك|صفحة ويكاموس]] · الجذر: بقع · ([[toolforge:ar-senses/review/L1533145|رابط المُفردة في الأداة]])
حذفت المعنى الرابع لأنه ورد بالتخفيف.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:18، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِنْبَقَّ (L1533147) ==
'''اِنْبَقَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533147|18بك|ويكي بيانات: L1533147]] [[ملف:Wiktionary-logo.svg|وصلة=اِنْبَقَّ|18بك|صفحة ويكاموس]] · الجذر: بقق · ([[toolforge:ar-senses/review/L1533147|رابط المُفردة في الأداة]])
المعنى خاطئ ولا شواهد عليه في المعاجم والمفردة الموجودة ('''انبعق''') وليس انبق.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:38، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَلَعَ (L1480240) ==
'''بَلَعَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1480240|18بك|ويكي بيانات: L1480240]] [[ملف:Wiktionary-logo.svg|وصلة=بَلَعَ|18بك|صفحة ويكاموس]] · الجذر: بلع · ([[toolforge:ar-senses/review/L1480240|رابط المُفردة في الأداة]])
خطأ في التشكيل فالفعل بَلِعَ وليس بَلَعَ كما في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:34، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْتَلَقَ (L1533220) ==
'''اِبْتَلَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533220|18بك|ويكي بيانات: L1533220]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْتَلَقَ|18بك|صفحة ويكاموس]] · الجذر: بلق · ([[toolforge:ar-senses/review/L1533220|رابط المُفردة في الأداة]])
لم أجد المفردة في المعاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:06، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَلُقَ (L1543358) ==
'''بَلُقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543358|18بك|ويكي بيانات: L1543358]] [[ملف:Wiktionary-logo.svg|وصلة=بَلُقَ|18بك|صفحة ويكاموس]] · الجذر: بلق · ([[toolforge:ar-senses/review/L1543358|رابط المُفردة في الأداة]])
المفردة بالكسر وليس بالضم، انظر '''[[بَلِقَ]]'''.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:52، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْذَارَّ (L1534290) ==
'''اِحْذَارَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534290|18بك|ويكي بيانات: L1534290]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْذَارَّ|18بك|صفحة ويكاموس]] · الجذر: حذر · ([[toolforge:ar-senses/review/L1534290|رابط المُفردة في الأداة]])
خلل في صندوق المعلومات.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:49، 9 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَاتَنَ (L1534214) ==
'''تَحَاتَنَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534214|18بك|ويكي بيانات: L1534214]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَاتَنَ|18بك|صفحة ويكاموس]] · الجذر: حتن · ([[toolforge:ar-senses/review/L1534214|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لأنه مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 12:31، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَتَنَ (L1534213) ==
'''اِحْتَتَنَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534213|18بك|ويكي بيانات: L1534213]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَتَنَ|18بك|صفحة ويكاموس]] · الجذر: حتن · ([[toolforge:ar-senses/review/L1534213|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 12:37، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَاتَّ (L1496477) ==
'''تَحَاتَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1496477|18بك|ويكي بيانات: L1496477]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَاتَّ|18بك|صفحة ويكاموس]] · الجذر: حتت · ([[toolforge:ar-senses/review/L1496477|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:36، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْزَوْزَى (L1534387) ==
'''اِحْزَوْزَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534387|18بك|ويكي بيانات: L1534387]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْزَوْزَى|18بك|صفحة ويكاموس]] · الجذر: حزو · ([[toolforge:ar-senses/review/L1534387|رابط المُفردة في الأداة]])
المفردة غير موجودة في المصدر ولها أكثر من معنى في المصادر الأخرى.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:02، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَذَّقَ (L1484084) ==
'''تَحَذَّقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1484084|18بك|ويكي بيانات: L1484084]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَذَّقَ|18بك|صفحة ويكاموس]] · الجذر: حذق · ([[toolforge:ar-senses/review/L1484084|رابط المُفردة في الأداة]])
المفردة غير موجودة في المصادر الموجودة، استبدلتها بمصادر أخرى.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:02، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَذَّقَ (L1534295) ==
'''حَذَّقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534295|18بك|ويكي بيانات: L1534295]] [[ملف:Wiktionary-logo.svg|وصلة=حَذَّقَ|18بك|صفحة ويكاموس]] · الجذر: حذق · ([[toolforge:ar-senses/review/L1534295|رابط المُفردة في الأداة]])
لم أجد الفعل المتعدي في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:14، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَذِقَ (L1546050) ==
'''حَذِقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1546050|18بك|ويكي بيانات: L1546050]] [[ملف:Wiktionary-logo.svg|وصلة=حَذِقَ|18بك|صفحة ويكاموس]] · الجذر: حذق · ([[toolforge:ar-senses/review/L1546050|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لأنه تفسير لمفردة فرس وهو مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:56، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَحْزَرَ (L1534363) ==
'''أَحْزَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534363|18بك|ويكي بيانات: L1534363]] [[ملف:Wiktionary-logo.svg|وصلة=أَحْزَرَ|18بك|صفحة ويكاموس]] · الجذر: حزر · ([[toolforge:ar-senses/review/L1534363|رابط المُفردة في الأداة]])
حذفت المعنى الأول لأنه خاطئ وغير مرتبط بالمفردة بل يرتبط بـ (أحزّ).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:06، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَزَّ (L1534366) ==
'''اِحْتَزَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534366|18بك|ويكي بيانات: L1534366]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَزَّ|18بك|صفحة ويكاموس]] · الجذر: حزز · ([[toolforge:ar-senses/review/L1534366|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:12، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَزْمَرَ (L1534382) ==
'''حَزْمَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534382|18بك|ويكي بيانات: L1534382]] [[ملف:Wiktionary-logo.svg|وصلة=حَزْمَرَ|18بك|صفحة ويكاموس]] · الجذر: حزمر · ([[toolforge:ar-senses/review/L1534382|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لارتباطه بـ ([[حَزْفَرَ]]).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:56، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَاسَى (L1534416) ==
'''تَحَاسَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534416|18بك|ويكي بيانات: L1534416]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَاسَى|18بك|صفحة ويكاموس]] · الجذر: حسو · ([[toolforge:ar-senses/review/L1534416|رابط المُفردة في الأداة]])
غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:10، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَاسَى (L1534418) ==
'''حَاسَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534418|18بك|ويكي بيانات: L1534418]] [[ملف:Wiktionary-logo.svg|وصلة=حَاسَى|18بك|صفحة ويكاموس]] · الجذر: حسو · ([[toolforge:ar-senses/review/L1534418|رابط المُفردة في الأداة]])
غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:16، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَاقَ (L1534738) ==
'''اِحْتَاقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534738|18بك|ويكي بيانات: L1534738]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَاقَ|18بك|صفحة ويكاموس]] · الجذر: حيق · ([[toolforge:ar-senses/review/L1534738|رابط المُفردة في الأداة]])
دمجت المعنيين لأنها مكرران.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 04:15، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَفَظَ (L1485699) ==
'''اِحْتَفَظَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1485699|18بك|ويكي بيانات: L1485699]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَفَظَ|18بك|صفحة ويكاموس]] · الجذر: حفظ · ([[toolforge:ar-senses/review/L1485699|رابط المُفردة في الأداة]])
لم تضع الأداة بعض أرقام الصفحات والأجزاء.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:19، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَمْحَمَ (L1476725) ==
'''حَمْحَمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1476725|18بك|ويكي بيانات: L1476725]] [[ملف:Wiktionary-logo.svg|وصلة=حَمْحَمَ|18بك|صفحة ويكاموس]] · الجذر: حمحم · ([[toolforge:ar-senses/review/L1476725|رابط المُفردة في الأداة]])
خلل في صندوق المعلومات.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:11، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَيَّفَ (L1534760) ==
'''تَحَيَّفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534760|18بك|ويكي بيانات: L1534760]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَيَّفَ|18بك|صفحة ويكاموس]] · الجذر: حيف · ([[toolforge:ar-senses/review/L1534760|رابط المُفردة في الأداة]])
دمجت المعنيين.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:38، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَشَّكَ (L1534439) ==
'''تَحَشَّكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534439|18بك|ويكي بيانات: L1534439]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَشَّكَ|18بك|صفحة ويكاموس]] · الجذر: حشك · ([[toolforge:ar-senses/review/L1534439|رابط المُفردة في الأداة]])
حرف الشين مشدد.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:12، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْوَالَّ (L1534743) ==
'''اِحْوَالَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534743|18بك|ويكي بيانات: L1534743]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْوَالَّ|18بك|صفحة ويكاموس]] · الجذر: حول · ([[toolforge:ar-senses/review/L1534743|رابط المُفردة في الأداة]])
خلل في صندوق المعلومات.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:59، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِسْتَحَاضَ (L1534730) ==
'''اِسْتَحَاضَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534730|18بك|ويكي بيانات: L1534730]] [[ملف:Wiktionary-logo.svg|وصلة=اِسْتَحَاضَ|18بك|صفحة ويكاموس]] · الجذر: حوض · ([[toolforge:ar-senses/review/L1534730|رابط المُفردة في الأداة]])
الموجود في المصادر استحوض وليس استحاض.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:05، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَاشَ (L1534721) ==
'''اِحْتَاشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534721|18بك|ويكي بيانات: L1534721]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَاشَ|18بك|صفحة ويكاموس]] · الجذر: حوش · ([[toolforge:ar-senses/review/L1534721|رابط المُفردة في الأداة]])
التصريف الموجود في المصادر (احتوش) وليس احتاش.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:34، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِسْتَحَاسَ (L1534716) ==
'''اِسْتَحَاسَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534716|18بك|ويكي بيانات: L1534716]] [[ملف:Wiktionary-logo.svg|وصلة=اِسْتَحَاسَ|18بك|صفحة ويكاموس]] · الجذر: حوس · ([[toolforge:ar-senses/review/L1534716|رابط المُفردة في الأداة]])
استحوس وليس استحاس كما في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:51، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَزْأَلَ (L1534358) ==
'''حَزْأَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534358|18بك|ويكي بيانات: L1534358]] [[ملف:Wiktionary-logo.svg|وصلة=حَزْأَلَ|18بك|صفحة ويكاموس]] · الجذر: حزأل · ([[toolforge:ar-senses/review/L1534358|رابط المُفردة في الأداة]])
مفردة خاطئة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 12:52، 14 أغسطس 2026 (ت ع م)
:فعلا، يبدو أن المُفردة حَزْأَلَ لا توجد. في جدول الأفعال، عندنا فعل واحد من الجذر "ح ز أ ل"، وهو على وزن '''فعلل'''، أي حَزْأَلَ. لكن يبدو أن هذا خاطئ، و أن الوزن الصحيح هو افعللّ، أي احْزَأَلَّ، وهو الذي ذُكِر في معجم [https://app.turath.io/book/7030?page=14881 تاج العروس]. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 21:19، 14 أغسطس 2026 (ت ع م)
:ورد في اللسان أيضًا احزألَّ بمعنى ارتفع وبمعنى اجتمع. [[مستخدم:Michel Bakni|Michel Bakni]] ([[نقاش المستخدم:Michel Bakni|نقاش]]) 21:50، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَنَّشَ (L1534669) ==
'''حَنَّشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534669|18بك|ويكي بيانات: L1534669]] [[ملف:Wiktionary-logo.svg|وصلة=حَنَّشَ|18بك|صفحة ويكاموس]] · الجذر: حنش · ([[toolforge:ar-senses/review/L1534669|رابط المُفردة في الأداة]])
هل هي حَنَّشَ أم حَنَشَ؟ وأظن أن لها معان أخرى.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:28، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْخَنَدَّ (L1532850) ==
'''اِبْخَنَدَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1532850|18بك|ويكي بيانات: L1532850]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْخَنَدَّ|18بك|صفحة ويكاموس]] · الجذر: بخند · ([[toolforge:ar-senses/review/L1532850|رابط المُفردة في الأداة]])
الفعل في المرجع اخْبَنْدَى، لا وجود المفردة اِبْخَنَدَّ--[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 18:52، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَمْيَرَ (L1534650) ==
'''تَحَمْيَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534650|18بك|ويكي بيانات: L1534650]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَمْيَرَ|18بك|صفحة ويكاموس]] · الجذر: حمير · ([[toolforge:ar-senses/review/L1534650|رابط المُفردة في الأداة]])
خطأ في استخراج المعنى، معنى تحمير أي ساء خلقه كما في المصادر أم هذه فيجب أن تكون بغير الياء أي تَحَمَّر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:02، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَبَشَ (L1534178) ==
'''اِحْتَبَشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534178|18بك|ويكي بيانات: L1534178]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَبَشَ|18بك|صفحة ويكاموس]] · الجذر: حبش · ([[toolforge:ar-senses/review/L1534178|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:38، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَثَّرَ (L1534223) ==
'''تَحَثَّرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534223|18بك|ويكي بيانات: L1534223]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَثَّرَ|18بك|صفحة ويكاموس]] · الجذر: حثر · ([[toolforge:ar-senses/review/L1534223|رابط المُفردة في الأداة]])
المعنى لفعل حثر، الرجاء إصلاحه.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:52، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَثْرَفَ (L1534226) ==
'''حَثْرَفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534226|18بك|ويكي بيانات: L1534226]] [[ملف:Wiktionary-logo.svg|وصلة=حَثْرَفَ|18بك|صفحة ويكاموس]] · الجذر: حثرف · ([[toolforge:ar-senses/review/L1534226|رابط المُفردة في الأداة]])
المعنى الصحيح زعزعه وحركه، انظر تاج العروس جزء 23 صفحة 118.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:09، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَظْرَبَ (L1534501) ==
'''تَحَظْرَبَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534501|18بك|ويكي بيانات: L1534501]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَظْرَبَ|18بك|صفحة ويكاموس]] · الجذر: حظرب · ([[toolforge:ar-senses/review/L1534501|رابط المُفردة في الأداة]])
دًمج المعنيان ووُضعت أمثلة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:32، 16 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَافَلَ (L1534527) ==
'''حَافَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534527|18بك|ويكي بيانات: L1534527]] [[ملف:Wiktionary-logo.svg|وصلة=حَافَلَ|18بك|صفحة ويكاموس]] · الجذر: حفل · ([[toolforge:ar-senses/review/L1534527|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر المذكورة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:59، 16 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْقَوْقَفَ (L1489579) ==
'''اِحْقَوْقَفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1489579|18بك|ويكي بيانات: L1489579]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْقَوْقَفَ|18بك|صفحة ويكاموس]] · الجذر: حقف · ([[toolforge:ar-senses/review/L1489579|رابط المُفردة في الأداة]])
المعاني الأربعة مكررة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:52، 17 أغسطس 2026 (ت ع م)
== معجم مقاييس اللغة ==
مرحبا بالزملاء، روابط الكتاب الموجودة في الأداة غير دقيقة وقد كنت أظن أن الاختلاف في مفردة أو اثنتين لكن تبين لي أنها غير دقيقة في جميع المفردات، رقم الصفة صحيح ولكن الرابط بعيد عن الصفحة، تحياتي لكم. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:56، 17 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَكَرَ (L1478743) ==
'''اِحْتَكَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1478743|18بك|ويكي بيانات: L1478743]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَكَرَ|18بك|صفحة ويكاموس]] · الجذر: حكر · ([[toolforge:ar-senses/review/L1478743|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:42، 17 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَكَّرَ (L1534555) ==
'''حَكَّرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534555|18بك|ويكي بيانات: L1534555]] [[ملف:Wiktionary-logo.svg|وصلة=حَكَّرَ|18بك|صفحة ويكاموس]] · الجذر: حكر · ([[toolforge:ar-senses/review/L1534555|رابط المُفردة في الأداة]])
أشك بوجود المفردة المشكلة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:56، 17 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَمِضَ (L1543549) ==
'''حَمِضَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543549|18بك|ويكي بيانات: L1543549]] [[ملف:Wiktionary-logo.svg|وصلة=حَمِضَ|18بك|صفحة ويكاموس]] · الجذر: حمض · ([[toolforge:ar-senses/review/L1543549|رابط المُفردة في الأداة]])
المعاني مختلطة لعدم وضوح حركة الميم في الفعل.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:57، 19 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَسَى (L1486741) ==
'''أَسَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1486741|18بك|ويكي بيانات: L1486741]] [[ملف:Wiktionary-logo.svg|وصلة=أَسَى|18بك|صفحة ويكاموس]] · الجذر: أسي · ([[toolforge:ar-senses/review/L1486741|رابط المُفردة في الأداة]])
الفعل في المراجع أسا من الجذر أسو.--[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 20:03، 20 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِخْتَبَلَ (L1534805) ==
'''اِخْتَبَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534805|18بك|ويكي بيانات: L1534805]] [[ملف:Wiktionary-logo.svg|وصلة=اِخْتَبَلَ|18بك|صفحة ويكاموس]] · الجذر: خبل · ([[toolforge:ar-senses/review/L1534805|رابط المُفردة في الأداة]])
المعنى الثاني مكرر، حذفته.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:03، 21 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَخَاتَلَ (L1487389) ==
'''تَخَاتَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1487389|18بك|ويكي بيانات: L1487389]] [[ملف:Wiktionary-logo.svg|وصلة=تَخَاتَلَ|18بك|صفحة ويكاموس]] · الجذر: ختل · ([[toolforge:ar-senses/review/L1487389|رابط المُفردة في الأداة]])
دُمِج المعنيان.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:09، 21 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَخَاجَأَ (L1534840) ==
'''تَخَاجَأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534840|18بك|ويكي بيانات: L1534840]] [[ملف:Wiktionary-logo.svg|وصلة=تَخَاجَأَ|18بك|صفحة ويكاموس]] · الجذر: خجأ · ([[toolforge:ar-senses/review/L1534840|رابط المُفردة في الأداة]])
لاحظت التباسا أو خلطا بين (تخاجأ وتخاجى وتخاجا).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:22، 22 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَخَارَقَ (L1534942) ==
'''تَخَارَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534942|18بك|ويكي بيانات: L1534942]] [[ملف:Wiktionary-logo.svg|وصلة=تَخَارَقَ|18بك|صفحة ويكاموس]] · الجذر: خرق · ([[toolforge:ar-senses/review/L1534942|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:36، 22 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَآ (L1545136) ==
'''دَآ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1545136|18بك|ويكي بيانات: L1545136]] [[ملف:Wiktionary-logo.svg|وصلة=دَآ|18بك|صفحة ويكاموس]] · الجذر: دأو · ([[toolforge:ar-senses/review/L1545136|رابط المُفردة في الأداة]])
الفعل الصحيح (دَأَى) كما في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:47، 22 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِدْحَوَى (L1535316) ==
'''اِدْحَوَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535316|18بك|ويكي بيانات: L1535316]] [[ملف:Wiktionary-logo.svg|وصلة=اِدْحَوَى|18بك|صفحة ويكاموس]] · الجذر: دحو · ([[toolforge:ar-senses/review/L1535316|رابط المُفردة في الأداة]])
استبدلت المصدر بمصادر أكثر دقة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:49، 23 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَدَرَّهَ (L1535387) ==
'''تَدَرَّهَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535387|18بك|ويكي بيانات: L1535387]] [[ملف:Wiktionary-logo.svg|وصلة=تَدَرَّهَ|18بك|صفحة ويكاموس]] · الجذر: دره · ([[toolforge:ar-senses/review/L1535387|رابط المُفردة في الأداة]])
دره وليس تدره.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:55، 24 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَشَا (L1544094) ==
'''دَشَا''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544094|18بك|ويكي بيانات: L1544094]] [[ملف:Wiktionary-logo.svg|وصلة=دَشَا|18بك|صفحة ويكاموس]] · الجذر: دشو · ([[toolforge:ar-senses/review/L1544094|رابط المُفردة في الأداة]])
أضفت المعنى ووثقته من المعاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:54، 25 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَغِرَ (L1543752) ==
'''دَغِرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543752|18بك|ويكي بيانات: L1543752]] [[ملف:Wiktionary-logo.svg|وصلة=دَغِرَ|18بك|صفحة ويكاموس]] · الجذر: دغر · ([[toolforge:ar-senses/review/L1543752|رابط المُفردة في الأداة]])
للمفردة أكثر من معنى غير مذكور، ولا أدري هي بالكسر أم بالفتح دَغَرَ دَغِرَ.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:03، 25 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَاغَصَ (L1535445) ==
'''دَاغَصَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535445|18بك|ويكي بيانات: L1535445]] [[ملف:Wiktionary-logo.svg|وصلة=دَاغَصَ|18بك|صفحة ويكاموس]] · الجذر: دغص · ([[toolforge:ar-senses/review/L1535445|رابط المُفردة في الأداة]])
حذفت المعاني الثلاثة الأخيرة لأنها مختلطة بمفردة (دَاغَشَ).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:42، 25 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِدَّمَسَ (L1535554) ==
'''اِدَّمَسَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535554|18بك|ويكي بيانات: L1535554]] [[ملف:Wiktionary-logo.svg|وصلة=اِدَّمَسَ|18بك|صفحة ويكاموس]] · الجذر: دمس · ([[toolforge:ar-senses/review/L1535554|رابط المُفردة في الأداة]])
حذفت المصدرين وأضفت تهذيب اللغة لورود المفردة فيه ج=12 ص=263.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:13، 28 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَدَمْشَقَ (L1535561) ==
'''تَدَمْشَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535561|18بك|ويكي بيانات: L1535561]] [[ملف:Wiktionary-logo.svg|وصلة=تَدَمْشَقَ|18بك|صفحة ويكاموس]] · الجذر: دمشق · ([[toolforge:ar-senses/review/L1535561|رابط المُفردة في الأداة]])
المفردة غير موجودة والمثال غير موجود.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:29، 28 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَنَّأَ (L1535578) ==
'''دَنَّأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535578|18بك|ويكي بيانات: L1535578]] [[ملف:Wiktionary-logo.svg|وصلة=دَنَّأَ|18بك|صفحة ويكاموس]] · الجذر: دنأ · ([[toolforge:ar-senses/review/L1535578|رابط المُفردة في الأداة]])
لا أظن الفعل مهموزا.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:19، 28 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِدَّنَى (L1535595) ==
'''اِدَّنَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535595|18بك|ويكي بيانات: L1535595]] [[ملف:Wiktionary-logo.svg|وصلة=اِدَّنَى|18بك|صفحة ويكاموس]] · الجذر: دنو · ([[toolforge:ar-senses/review/L1535595|رابط المُفردة في الأداة]])
المثال في صفحة 273 وأظنه بمعنى مختلف.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:43، 29 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَبْشَبَ (L1537222) ==
'''شَبْشَبَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537222|18بك|ويكي بيانات: L1537222]] [[ملف:Wiktionary-logo.svg|وصلة=شَبْشَبَ|18بك|صفحة ويكاموس]] · الجذر: شبشب · ([[toolforge:ar-senses/review/L1537222|رابط المُفردة في الأداة]])
حذف المعنى الثاني لأنه خطأ من الأداة بسبب وجود خطأ مطبعي في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:13، 31 أغسطس 2026 (ت ع م)
:هل تحويل حركات من فتحة الى الكسرة يحل مشكلة؟ [[مستخدم:يزن البلوي|يزن البلوي]] ([[نقاش المستخدم:يزن البلوي|نقاش]]) 13:32، 1 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِنْشَبَحَ (L1537214) ==
'''اِنْشَبَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537214|18بك|ويكي بيانات: L1537214]] [[ملف:Wiktionary-logo.svg|وصلة=اِنْشَبَحَ|18بك|صفحة ويكاموس]] · الجذر: شبح · ([[toolforge:ar-senses/review/L1537214|رابط المُفردة في الأداة]])
استبدلت مقاييس اللغة بجمهرة اللغة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:33، 2 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَاجَّ (L1537248) ==
'''شَاجَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537248|18بك|ويكي بيانات: L1537248]] [[ملف:Wiktionary-logo.svg|وصلة=شَاجَّ|18بك|صفحة ويكاموس]] · الجذر: شجج · ([[toolforge:ar-senses/review/L1537248|رابط المُفردة في الأداة]])
استخراج خاطئ، لم أجد التصريف في بقية المراجع.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:34، 4 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَرَّى (L1485717) ==
'''تَبَرَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1485717|18بك|ويكي بيانات: L1485717]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَرَّى|18بك|صفحة ويكاموس]] · الجذر: بري · ([[toolforge:ar-senses/review/L1485717|رابط المُفردة في الأداة]])
الفعل في المراجع "تَبرأ" من جذر برأ وليس "تَبَرَّى" من جذر بري --[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 12:29، 5 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَحَطَ (L1489005) ==
'''شَحَطَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1489005|18بك|ويكي بيانات: L1489005]] [[ملف:Wiktionary-logo.svg|وصلة=شَحَطَ|18بك|صفحة ويكاموس]] · الجذر: شحط · ([[toolforge:ar-senses/review/L1489005|رابط المُفردة في الأداة]])
خلل وأخطاء غير معروفة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:19، 5 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَشْحَنَ (L1537270) ==
'''أَشْحَنَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537270|18بك|ويكي بيانات: L1537270]] [[ملف:Wiktionary-logo.svg|وصلة=أَشْحَنَ|18بك|صفحة ويكاموس]] · الجذر: شحن · ([[toolforge:ar-senses/review/L1537270|رابط المُفردة في الأداة]])
المعنى اأخير لـ(أحشن) وليس لـ(أشحن).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:29، 6 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَرَّى (L1537351) ==
'''شَرَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537351|18بك|ويكي بيانات: L1537351]] [[ملف:Wiktionary-logo.svg|وصلة=شَرَّى|18بك|صفحة ويكاموس]] · الجذر: شري · ([[toolforge:ar-senses/review/L1537351|رابط المُفردة في الأداة]])
لا أعلم إن كان حرف الراء مشددا أم لا.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:01، 7 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَرِفَ (L1544475) ==
'''شَرِفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544475|18بك|ويكي بيانات: L1544475]] [[ملف:Wiktionary-logo.svg|وصلة=شَرِفَ|18بك|صفحة ويكاموس]] · الجذر: شرف · ([[toolforge:ar-senses/review/L1544475|رابط المُفردة في الأداة]])
هل هي بضم الراء أم بكسرها؟<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:54، 7 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَشْدَى (L1537300) ==
'''أَشْدَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537300|18بك|ويكي بيانات: L1537300]] [[ملف:Wiktionary-logo.svg|وصلة=أَشْدَى|18بك|صفحة ويكاموس]] · الجذر: شدو · ([[toolforge:ar-senses/review/L1537300|رابط المُفردة في الأداة]])
استخراج الأداة خاطئ.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 23:44، 8 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: جَاجَ (L1544958) ==
'''جَاجَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544958|18بك|ويكي بيانات: L1544958]] [[ملف:Wiktionary-logo.svg|وصلة=جَاجَ|18بك|صفحة ويكاموس]] · الجذر: جوج · ([[toolforge:ar-senses/review/L1544958|رابط المُفردة في الأداة]])
الفعل في المرجع جِيج من جذر جيج.--[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 12:36، 10 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: جَاثَ (L1544257) ==
'''جَاثَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544257|18بك|ويكي بيانات: L1544257]] [[ملف:Wiktionary-logo.svg|وصلة=جَاثَ|18بك|صفحة ويكاموس]] · الجذر: جوث · ([[toolforge:ar-senses/review/L1544257|رابط المُفردة في الأداة]])
الفعل في المراجع جوث، وهناك فعل أخر جأث بمعنى آخر، لكن لم أجد المفردة "جأث" بهذا الشكل. --[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 12:53، 10 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَسَى (L1495990) ==
'''حَسَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1495990|18بك|ويكي بيانات: L1495990]] [[ملف:Wiktionary-logo.svg|وصلة=حَسَى|18بك|صفحة ويكاموس]] · الجذر: حسي · ([[toolforge:ar-senses/review/L1495990|رابط المُفردة في الأداة]])
<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. -->الفعل حَسَا من جذر حسو وليس حسى.--[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 11:39، 11 سبتمبر 2026 (ت ع م)
bpbhp9mau6wjyokhkmd3r4c0y64acap
1159146
1159145
2026-09-11T11:41:36Z
إسلام
12622
/* بلاغ من أداة مراجعة المعاني: جَاثَ (L1544257) */
1159146
wikitext
text/x-wiki
{{رأس صفحة نقاش}}
== بلاغ من أداة مراجعة المعاني: حَلَّى (L1534604) ==
'''حَلَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534604|18بك|ويكي بيانات: L1534604]] [[ملف:Wiktionary-logo.svg|وصلة=حَلَّى|18بك|صفحة ويكاموس]] · الجذر: حلو · ([[toolforge:ar-senses/review/L1534604|رابط المُفردة في الأداة]])
إبلاغ من الزميل {{مس|رِفْد}}: ''لا يمكن نشرها في ويكاموس عند الضغط على زر النشر يظهر: "خطأ: الصفحة موجودة بالفعل".'' --[[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 11:27، 27 يوليو 2026 (ت ع م)
:شكرا لك @[[مستخدم:رِفْد|رِفْد]] على الإبلاغ. المشكلة في الفعل حَلَّى (وأفعال آخرين) أَنَّه يُوَلَّدُ من جذرين: ح-ل-ي و ح-ل-و. في ويكي بيانات توجد وحدتان معجميتان، واحدة لكل فعل، لكن في ويكاموس لا يُمكن إنشاء صفحتين بنفس الاسم. سأفكر في حل لهذه المشكلة وأوافيك بالجديد. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 11:28، 27 يوليو 2026 (ت ع م)
::حالة أخرى حيث يشترك جذران في نفس صيغة الفعل:
::* جذر ت-ل-و على وزن تفعّل => [[تَتَلَّى]] ([https://ar-senses.toolforge.org/review/L1533461 رابط المُفردة في الأداة]).
::* جذر ت-ل-ي على وزن تفعّل => [[تَتَلَّى]]
::[[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 11:42، 27 يوليو 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِسْتَجَاشَ (L1534157) ==
'''اِسْتَجَاشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534157|18بك|ويكي بيانات: L1534157]] [[ملف:Wiktionary-logo.svg|وصلة=اِسْتَجَاشَ|18بك|صفحة ويكاموس]] · الجذر: جيش · ([[toolforge:ar-senses/review/L1534157|رابط المُفردة في الأداة]])
المعنى الثاني غير موجود في المصدر في صفحة المفردة (ص=603) والحديث الموجود في صفحة 115 غير مفسر بهذا المعنى أيضا. --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:40، 27 يوليو 2026 (ت ع م)
<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. -->
:{{ر|أبو هشام}} بخصوص المعنى الثاني، رجعتُ إلى ص=603 ووجدتُ المعنى حسب الوارد في الأداة: {{اقتباس مضمن|استجاش الأمير من مكان كذا: طلب جيشًا وجمعه. '''و- ت القدر: غلت.'''}}
:{{ر|Michel Bakni}} بخصوص المعنى الثالث (ص=115)، يبدو المعنى صحيحًا لكن الأداة استَنْبَطَتْهُ من مثال وارد في المعجم لا من تعريف للكلمة، ما رأيك؟
:*الاقتباس من المصدر: {{اقتباس مضمن|فَمَرَّ الْجَيْشُ عَلَى غَطَفَانَ '''فَاسْتَجَاشُوهُمْ''' عَلَى بَنِي سُليم، فَهَزَمَتْ بَنُو سُلَيم جيشَ النُّعْمَانِ}}
:*تعريف المعنى كما استخرجَتْهُ الأداة من النص السابق: {{اقتباس مضمن|اِسْتَجَاشَ القومَ على فلان: استنفرهم وحرّضهم عليه}}
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:23، 6 أغسطس 2026 (ت ع م).
::نعم أتفق مع هذا الطرح. [[مستخدم:Michel Bakni|Michel Bakni]] ([[نقاش المستخدم:Michel Bakni|نقاش]]) 14:25، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: جَوَّهَ (L1534145) ==
'''جَوَّهَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534145|18بك|ويكي بيانات: L1534145]] [[ملف:Wiktionary-logo.svg|وصلة=جَوَّهَ|18بك|صفحة ويكاموس]] · الجذر: جوه · ([[toolforge:ar-senses/review/L1534145|رابط المُفردة في الأداة]])
المعنى بهذا التصريف خطأ، لم أعثر على جوّه فلانا أي جعله وجيها، ولم أجد جوّه السقاء أي رقعه بل وجدت جواه في معجم متن اللغة. --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:48، 27 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك، المشكلة هي أن الأداة أخذت الجذر (جَوَهَ) وألحقت به معنى الفرع (وجَّهَ أو أَوْجَهَ، كحال: أَوْجَهْتُهُ أنا ووَجَّهْتُهُ)، سوف نعمل على إصلاحها.
:{{ر|ForzaGreen}} خطوات قادمة:
:#يجب أن نتوثَّق من أن الأداة تُميِّزُ الجذر عن الفرع. في هذه الحالة، أخذت الأداة الجذر ('''جَوَهَ''') وشكَّلتهُ ('''جَوَّهَ''')، ثم ألحقَتْ به معنى خاطئًا للمشتق.
:#بناءً على ما نراهُ هنا وقي حالات أخرى، نحتاج إلى '''خيار للمراجع لتعديل عنوان الصفحة'''، فلو أمكنهُ تبديل العنوان في هذه الحالة إلى '''وجَّهَ''' أو '''أَوْجَهَ''' لكان صحيحًا.
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 13:54، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: سَدَسَ (L1547049) ==
'''سَدَسَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1547049|18بك|ويكي بيانات: L1547049]] [[ملف:Wiktionary-logo.svg|وصلة=سَدَسَ|18بك|صفحة ويكاموس]] · الجذر: سدس · ([[toolforge:ar-senses/review/L1547049|رابط المُفردة في الأداة]])
المعنى الثاني مكرر، استبدلته وأضفت مصادر. --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:04، 28 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك ونعمل على التوثّق من مسألة تكرار المعاني --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 13:58، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: تَسَدَّى (L1536864) ==
'''تَسَدَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1536864|18بك|ويكي بيانات: L1536864]] [[ملف:Wiktionary-logo.svg|وصلة=تَسَدَّى|18بك|صفحة ويكاموس]] · الجذر: سدي · ([[toolforge:ar-senses/review/L1536864|رابط المُفردة في الأداة]])
خلل في رقم صفحة القاموس المحيط، ولا توجد شواهد قوية على المعنى الأول، أظن أن المفردة بحاجة لمراجعة وإعادة ترتيب المعاني.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:44، 29 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} متفّق، {{اقتباس مضمن|والحائكُ يُسَدِّي الثَّوْبَ ويَتَسَدّاه}} أي يحيكه لنفسه.
:{{ر|ForzaGreen}} يبدو أن النموذج اختلَطَ عليه الأمر أثناء دمج المعاني، ربما خصوصًا من لسان العرب ({{اقتباس مضمن|والحائكُ يُسَدِّي الثَّوْبَ ويَتَسَدّاه}})، فخرجَ بالمعنى المبتدع: {{اقتباس مضمن|تَسَدَّى الثوبَ: أقام سَداه لنفسه}}، وليس له مثيل في المصادر.
:'''الخطوات القادمة المقترحة''': أشتَبِهُ في أن النموذج يفقد موثوقيته حين دَمْجَ المعاني من عددٍ كبير من المصادر (5 مصادر في هذه الحالة)، '''أقترح وَضْعَ حدّ أعلى للمصادر التي نستخدمها في استخراج المعنى، ربما 3 للوقت الحاضر'''.
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:10، 6 أغسطس 2026 (ت ع م).
::وضع حد للمصادر آليا قد يحرم المفردة من المصدر الأقوى والأدق. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:30، 6 أغسطس 2026 (ت ع م)
:{{أصلح}} الخلل في رقم صفحة القاموس المحيط، لهذه المُفردة ولمفردات أخرى. يبدو أن المشكل كان سببه عشوائية النموذج اللغوي، إذ كان يُغيِّر رقم الصفحة في أقل من 1% من الحالات. عدّلتُ أداة توليد المعاني حتى لا يتكرر الخطأ.
:بالنسبة للمصادر، أُفضل الإبقاء عليها جميعا. سنُجرب مع {{مس|عباد ديرانية}} تعديل تعليمات النموذج لتحسين المُخْرَجات ولإصلاح مشاكل أخرى، لا سيما المعاني المُكررة. -- [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 23:47، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَسَافَدَ (L1497488) ==
'''تَسَافَدَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1497488|18بك|ويكي بيانات: L1497488]] [[ملف:Wiktionary-logo.svg|وصلة=تَسَافَدَ|18بك|صفحة ويكاموس]] · الجذر: سفد · ([[toolforge:ar-senses/review/L1497488|رابط المُفردة في الأداة]])
اكتفيت بالمعنى الأول بسبب التكرار.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 11:51، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} ملاحظة للعمل على تكرار المعاني، المعنى 1 و2 متماثلان والثاني هو الأوضح للمستخدم المعاصر --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:13، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: سَافَحَ (L1487289) ==
'''سَافَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1487289|18بك|ويكي بيانات: L1487289]] [[ملف:Wiktionary-logo.svg|وصلة=سَافَحَ|18بك|صفحة ويكاموس]] · الجذر: سفح · ([[toolforge:ar-senses/review/L1487289|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لأنه مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:42، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} حالة تكرار أخرى مؤكدة في المعنى 1 والمعنى 2 --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:14، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: تَرَأَّمَ (L1535813) ==
'''تَرَأَّمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535813|18بك|ويكي بيانات: L1535813]] [[ملف:Wiktionary-logo.svg|وصلة=تَرَأَّمَ|18بك|صفحة ويكاموس]] · الجذر: رأم · ([[toolforge:ar-senses/review/L1535813|رابط المُفردة في الأداة]])
دمجت المعنيين وصححت رقم الجزء والصفحة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:58، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} حالة تكرار مؤكّدة بين المعنى 1 و2، كما يأتي:
:#{{اقتباس مضمن|تَرَأَّمَ الشيءَ: أحبَّه وألِفَه وعطف عليه وترحم عليه}}
:#{{اقتباس مضمن|تَرَأَّمَ الصبيَّ: ترحَّم عليه}}
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:26، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: جَاوَى (L1534151) ==
'''جَاوَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534151|18بك|ويكي بيانات: L1534151]] [[ملف:Wiktionary-logo.svg|وصلة=جَاوَى|18بك|صفحة ويكاموس]] · الجذر: جوي · ([[toolforge:ar-senses/review/L1534151|رابط المُفردة في الأداة]])
خطأ: الصفحة 'جَاوَى' موجودة بالفعل <!-- يظهر هكذا: خطأ: الصفحة 'جَاوَى' موجودة بالفعل. --> --[[مستخدم:رِفْد|رِفْد]] ([[نقاش المستخدم:رِفْد|نقاش]]) 22:15، 30 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} أتقصد أنكَ أنشأتَ الصفحة سابقًا عبر الأداة ثم ظهرت لك مرة أخرى في أداة مراجعة المعاني؟ --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:27، 6 أغسطس 2026 (ت ع م).
::مرحبا {{ر|عباد ديرانية}} أعتقد أن الخلل هو وجود صفحة مكررة في ويكي بيانات يلزم دمجها، تحياتي لك. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:59، 6 أغسطس 2026 (ت ع م)
:::+أضيفُ الاقتراح الممتاز '''إضافة تنبيهٍ بالخط الأحمر إلى الأداة في حال لو أن الصفحة أُنْشِأَتْ وحُذِفَتْ سابقًا''' تنبيهًا للمستخدم --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 16:07، 6 أغسطس 2026 (ت ع م).
::::هذا المشكل تكرر مرات عديدة (انظر النقاش أعلاه عن الفعل '''حَلَّى''') والسبب هو المُفردات التي تشترك في نفس الجذر. حاليا لا يوجد حل تقني للمسألة، لكنها في بالي وسأفكر في حل. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 22:48، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَجَاذَى (L1533824) ==
'''تَجَاذَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533824|18بك|ويكي بيانات: L1533824]] [[ملف:Wiktionary-logo.svg|وصلة=تَجَاذَى|18بك|صفحة ويكاموس]] · الجذر: جذي · ([[toolforge:ar-senses/review/L1533824|رابط المُفردة في الأداة]])
خطأ: الصفحة 'تَجَاذَى' موجودة بالفعل <!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:رِفْد|رِفْد]] ([[نقاش المستخدم:رِفْد|نقاش]]) 22:19، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} هذه ملاحظة متكرّرة من المستخدمين، يظهر أننا نحتاجُ إلى '''تحديث الأداة بوتيرة يومية لإزالة الصفحات المنشأة سابقًا'''، إلا لو كان هذا خطأً تقنيًا مختلفًا يُسبِّبُ التكرار --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 15:48، 6 أغسطس 2026 (ت ع م).
::كنت أصلحت هذه الكلمة مع كلمات أخرى لكن لم أصلح بعد مصدر الخطأ، وهو الأفعال التي لها جذور مختلفة لكنها تشترك في نفس الصيغة. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 17:51، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَجْذَى (L1533823) ==
'''أَجْذَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533823|18بك|ويكي بيانات: L1533823]] [[ملف:Wiktionary-logo.svg|وصلة=أَجْذَى|18بك|صفحة ويكاموس]] · الجذر: جذي · ([[toolforge:ar-senses/review/L1533823|رابط المُفردة في الأداة]])
خطأ: الصفحة 'أَجْذَى' موجودة بالفعل <!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:رِفْد|رِفْد]] ([[نقاش المستخدم:رِفْد|نقاش]]) 22:20، 30 يوليو 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: زَأْزَأَ (L1536388) ==
'''زَأْزَأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1536388|18بك|ويكي بيانات: L1536388]] [[ملف:Wiktionary-logo.svg|وصلة=زَأْزَأَ|18بك|صفحة ويكاموس]] · الجذر: زأزأ · ([[toolforge:ar-senses/review/L1536388|رابط المُفردة في الأداة]])
حذفت المعنى الخامس لأنه مزيد بتاء في المراجع.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:35، 4 أغسطس 2026 (ت ع م)
:{{ر|Michel Bakni}} المعنى الخامس مزيدٌ بتاء التأنيث، فهل نُنْشِئُ له صفحةً منفصلةً برأيك أم نضيفه إلى ذات الصفحة مع تحويلة؟
:شرح المعنى الخامس: {{اقتباس مضمن|زَأْزَأَتِ المرأةُ: مشت وحرّكت أعطافها كمشية القِصار}}
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:33، 6 أغسطس 2026 (ت ع م).
::نعم، يلزم إنشاء صفحة لكل فعل بكل تصريف، هذا التصريف: المؤنث المفرد الغائب. [[مستخدم:Michel Bakni|Michel Bakni]] ([[نقاش المستخدم:Michel Bakni|نقاش]]) 14:36، 6 أغسطس 2026 (ت ع م)
:::{{ر|ForzaGreen}} إذًا يلزمنا التوثّق من تمييز النموذج للمؤنّث وتخصيصه صفحة مستقلّة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:54، 6 أغسطس 2026 (ت ع م).
::::أنا رأيي كل المعاني والأمثلة تبقى في صفحة الفعل الرئيسية، والصيغ المُصرفة تحيل إلى الصفحة الرئيسية. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 15:06، 6 أغسطس 2026 (ت ع م)
::::متّفق مع وائل هنا بالواقع، الأفضل هو تخفيف الإحالات إن أمكن وجَمْع تصريفات المذكر والمؤنث والعدد بصفحة واحدة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 15:52، 6 أغسطس 2026 (ت ع م).
:::::لكن الذي يراجع القوالب يفهم أن لكل تصريف صفحة خاصة به لذلك أنا أتفق مع الزميل ميشيل على إنشاء صفحة لكل تصريف، تحياتي لكم. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:10، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَزْعَلَ (L1476504) ==
'''أَزْعَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1476504|18بك|ويكي بيانات: L1476504]] [[ملف:Wiktionary-logo.svg|وصلة=أَزْعَلَ|18بك|صفحة ويكاموس]] · الجذر: زعل · ([[toolforge:ar-senses/review/L1476504|رابط المُفردة في الأداة]])
دمجت المعنى الأول والثالث لأن المعنى الثالث مكرر عن الأول.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 10:04، 4 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك ونعمل على معالجة مسألة المعاني المُكرَّرة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:34، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: زَعِلَ (L1487695) ==
'''زَعِلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1487695|18بك|ويكي بيانات: L1487695]] [[ملف:Wiktionary-logo.svg|وصلة=زَعِلَ|18بك|صفحة ويكاموس]] · الجذر: زعل · ([[toolforge:ar-senses/review/L1487695|رابط المُفردة في الأداة]])
المعنى الأول (مرح) غير موجود في المراجع، والمعنى الثالث بحاجة إلى تدقيق، تحتاج المفردة إلى مراجعة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 10:41، 4 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} من معجم العين: {{اقتباس مضمن|الزَّعِل: النشيط '''الأشر'''. زَعِلَ يَزْعَلُ زَعَلًا.}}، الأشر هنا بمعنى المرح (مصدر [https://www.islamweb.net/ar/library/content/122/137/%D8%A3%D8%B4%D8%B1 من لسان العرب]).
:{{ر|ForzaGreen}} المعنى الثالث فيه اختلاطٌ بين معانٍ عِدّة، مثل: {{اقتباس مضمن|والزعل: '''المتضور جوعا'''}} (الجوهري) و{{اقتباس مضمن|الزَّعَلُ '''كالعَلَزِ مِنَ المَرَض'''}} (لسان العرب)، والمعنى في الأداة جاءَ: {{اقتباس مضمن|زَعِلَ من المرض أو الجوع: تضوّر وتلوّى وقلِق فلم يستقر}}.
:'''الخطوات القادمة المقترحة''': أشتبه أن النموذج اختلط عليه دمج المعنى عبر 5 مصادر، والأفضل والأسهل للمراجع (فمن الصعب جدًا تقصّي 5 مراجع مختلفة) أن '''نضعَ حدًا بين مصدرَيْن إلى ثلاثة مصادر للمعنى الواحد''' --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:48، 6 أغسطس 2026 (ت ع م).
::نعم، في الحقيقة تحتوي بعض المفردات على مراجع كثيرة وأتفق معك على الاستشهاد بمرجعين أو ثلاث بأقصى حد لكن لو يكون انتقاء المراجع يدويا أفضل لاختيار الأنسب والأقرب إلا إذا كان الاختيار الآلي قادرا على انتقاء المرجع الأنسب أو الأقرب أو الأدق. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:21، 6 أغسطس 2026 (ت ع م)
:::إشارة {{ر|عباد ديرانية}} أرجو مراجعة تقليل المراجع آليا فقد تحرم الأداةُ المفردةَ من المراجع الأدق وتضع المراجع الأبعد. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:23، 6 أغسطس 2026 (ت ع م)
::::{{ر|أبو هشام}} لا بأس بذلك، لكن إن تركنا للمُرَاجِعِ اختيار المصادر الأدق فهذا يعني أن عليهم مراجعة 5 - 6 مصادر في بعض الحالات، فما هو الأفضل بالنسبة لك بين هذه الخيارات؟ أهو انتقاء المصادر الأفضل يدويًا أم تقليل عدد المصادر التي وجبت مراجعتها؟ --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 15:51، 6 أغسطس 2026 (ت ع م).
:::::{{ر|عباد ديرانية}} أميل إلى الانتقاء اليدوي أو البشري دون تقليل للمصادر فالمراجِع قادر على انتقاء المصدر الأنسب للمفردة، وإن كان للزملاء رأي آخر فلا أعترض، تحياتي. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:15، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَلَكَ (L1502490) ==
'''أَلَكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1502490|18بك|ويكي بيانات: L1502490]] [[ملف:Wiktionary-logo.svg|وصلة=أَلَكَ|18بك|صفحة ويكاموس]] · الجذر: ألك · ([[toolforge:ar-senses/review/L1502490|رابط المُفردة في الأداة]])
حذفت المرجع الأخير من المعنى الثاني لأن فيه خطأ فقد استُشهد بصفحة 132 من معجم متن اللغة وفيها (أَلَكَ لَجَأٌ يَا فلَان) وهو استشهاد خاطئ لأن (ألك) هنا استفهام وليست فعل.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:33، 5 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك وسوف نعمل على زيادة دقة ضبط المعاني المتقاربة بالأداة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:49، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: اِبْتَسَطَ (L1533014) ==
'''اِبْتَسَطَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533014|18بك|ويكي بيانات: L1533014]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْتَسَطَ|18بك|صفحة ويكاموس]] · الجذر: بسط · ([[toolforge:ar-senses/review/L1533014|رابط المُفردة في الأداة]])
غير موثقة، لا يوجد فيها مصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:04، 5 أغسطس 2026 (ت ع م)
:{{ر|ForzaGreen}} حالة غريبةٌ ليس فيه أي مصدر للمعنى المستخرج! --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:49، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: أَبْشَكَ (L1533037) ==
'''أَبْشَكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533037|18بك|ويكي بيانات: L1533037]] [[ملف:Wiktionary-logo.svg|وصلة=أَبْشَكَ|18بك|صفحة ويكاموس]] · الجذر: بشك · ([[toolforge:ar-senses/review/L1533037|رابط المُفردة في الأداة]])
هذه اللفظة بحاجة لمراجعة فلها عدة معان.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:50، 6 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} هل لكَ أن تُوضِحَ المقصود؟ لم أجد كلمة أبشك في المرجع أصلًا للأسف --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:52، 6 أغسطس 2026 (ت ع م).
::{{ر|عباد ديرانية}} وجدت هذا ('''أبشك''' الكلام: كذب فيه: تخرص فيه كاذبًا.) في معجم متن اللغة ج=1 ص=299، وهذا أيضا (وبَشَكَ الْكَلَامَ يَبْشُكه بَشْكًا و'''أبشَكه''': تَخَرَّصهُ كَاذِبًا،) في لسان العرب ج=10 ص=400، ولم أجد أن معناها '''أسرع'''، تحياتي. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:43، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَاطَأَ (L1496404) ==
'''بَاطَأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1496404|18بك|ويكي بيانات: L1496404]] [[ملف:Wiktionary-logo.svg|وصلة=بَاطَأَ|18بك|صفحة ويكاموس]] · الجذر: بطأ · ([[toolforge:ar-senses/review/L1496404|رابط المُفردة في الأداة]])
لا يوجد التصريف في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:43، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَبْطَحَ (L1533063) ==
'''أَبْطَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533063|18بك|ويكي بيانات: L1533063]] [[ملف:Wiktionary-logo.svg|وصلة=أَبْطَحَ|18بك|صفحة ويكاموس]] · الجذر: بطح · ([[toolforge:ar-senses/review/L1533063|رابط المُفردة في الأداة]])
غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:47، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَطَّحَ (L1533066) ==
'''بَطَّحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533066|18بك|ويكي بيانات: L1533066]] [[ملف:Wiktionary-logo.svg|وصلة=بَطَّحَ|18بك|صفحة ويكاموس]] · الجذر: بطح · ([[toolforge:ar-senses/review/L1533066|رابط المُفردة في الأداة]])
هل هي بطَح أم بطّح؟<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:48، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَطْرَقَ (L1533070) ==
'''تَبَطْرَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533070|18بك|ويكي بيانات: L1533070]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَطْرَقَ|18بك|صفحة ويكاموس]] · الجذر: بطرق · ([[toolforge:ar-senses/review/L1533070|رابط المُفردة في الأداة]])
هذا الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:58، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَهُؤَ (L1545462) ==
'''بَهُؤَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1545462|18بك|ويكي بيانات: L1545462]] [[ملف:Wiktionary-logo.svg|وصلة=بَهُؤَ|18بك|صفحة ويكاموس]] · الجذر: بهأ · ([[toolforge:ar-senses/review/L1545462|رابط المُفردة في الأداة]])
معناها (أنس) كما في لسان العرب ج=1 ص=35 ومعجم متن اللغة ج=1 ص=353.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:29، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَاهَتَ (L1533268) ==
'''تَبَاهَتَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533268|18بك|ويكي بيانات: L1533268]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَاهَتَ|18بك|صفحة ويكاموس]] · الجذر: بهت · ([[toolforge:ar-senses/review/L1533268|رابط المُفردة في الأداة]])
حسنتُ المعنى وأضفت مصدرين.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:01، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَعِرَ (L1544067) ==
'''بَعِرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544067|18بك|ويكي بيانات: L1544067]] [[ملف:Wiktionary-logo.svg|وصلة=بَعِرَ|18بك|صفحة ويكاموس]] · الجذر: بعر · ([[toolforge:ar-senses/review/L1544067|رابط المُفردة في الأداة]])
'''[[بَعِرَ]]''' الجمل بالكسر صار بعيرا كما في القاموس المحيط ص=352.
المفردة (بَعَرَ) وهي موجودة في المشروع '''[[بَعَرَ]]''' فيلزم تحديثها أو حذفها لأنها خاطئة انظر القاموس المحيط ص=694 وإنشاء صفحة جديدة ببيانات صحيحة هي البيانات الموجودة في الأداة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:31، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَعَّقَ (L1533113) ==
'''بَعَّقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533113|18بك|ويكي بيانات: L1533113]] [[ملف:Wiktionary-logo.svg|وصلة=بَعَّقَ|18بك|صفحة ويكاموس]] · الجذر: بعق · ([[toolforge:ar-senses/review/L1533113|رابط المُفردة في الأداة]])
هل هي بَعَّقَ بالتشديد أم بَعَقَ بالتخفيف؟<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:02، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَغْزَلَ (L1533126) ==
'''تَبَغْزَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533126|18بك|ويكي بيانات: L1533126]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَغْزَلَ|18بك|صفحة ويكاموس]] · الجذر: بغزل · ([[toolforge:ar-senses/review/L1533126|رابط المُفردة في الأداة]])
المعنى الصحيح '''تبختر''' وله شواهد في أربعة معاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:13، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَقَّمَ (L1533154) ==
'''بَقَّمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533154|18بك|ويكي بيانات: L1533154]] [[ملف:Wiktionary-logo.svg|وصلة=بَقَّمَ|18بك|صفحة ويكاموس]] · الجذر: بقم · ([[toolforge:ar-senses/review/L1533154|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:44، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَقَّمَ (L1533153) ==
'''تَبَقَّمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533153|18بك|ويكي بيانات: L1533153]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَقَّمَ|18بك|صفحة ويكاموس]] · الجذر: بقم · ([[toolforge:ar-senses/review/L1533153|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:50، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَكِئَ (L1543356) ==
'''بَكِئَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543356|18بك|ويكي بيانات: L1543356]] [[ملف:Wiktionary-logo.svg|وصلة=بَكِئَ|18بك|صفحة ويكاموس]] · الجذر: بكأ · ([[toolforge:ar-senses/review/L1543356|رابط المُفردة في الأداة]])
حذفت المعنى الأول لأنه غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:13، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْتَلَتَ (L1533174) ==
'''اِبْتَلَتَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533174|18بك|ويكي بيانات: L1533174]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْتَلَتَ|18بك|صفحة ويكاموس]] · الجذر: بلت · ([[toolforge:ar-senses/review/L1533174|رابط المُفردة في الأداة]])
المفردة غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:35، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَلْدَحَ (L1533193) ==
'''تَبَلْدَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533193|18بك|ويكي بيانات: L1533193]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَلْدَحَ|18بك|صفحة ويكاموس]] · الجذر: بلدح · ([[toolforge:ar-senses/review/L1533193|رابط المُفردة في الأداة]])
أضفت المعنى الثاني، لم تستخرجه الأداة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:54، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْلَنْدَكَ (L1533194) ==
'''اِبْلَنْدَكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533194|18بك|ويكي بيانات: L1533194]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْلَنْدَكَ|18بك|صفحة ويكاموس]] · الجذر: بلدك · ([[toolforge:ar-senses/review/L1533194|رابط المُفردة في الأداة]])
المعنى خاطئ، والمفردة غير موجودة في المصدر.
:المعنى الصحيح ('''اتسع''') موجود في أربعة معاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:00، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَلَّرَ (L1533196) ==
'''تَبَلَّرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533196|18بك|ويكي بيانات: L1533196]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَلَّرَ|18بك|صفحة ويكاموس]] · الجذر: بلر · ([[toolforge:ar-senses/review/L1533196|رابط المُفردة في الأداة]])
إملاء المفردة خاطئ، والصحيح ('''تَرَبَّل''') كما في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:08، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَقَّعَ (L1533145) ==
'''بَقَّعَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533145|18بك|ويكي بيانات: L1533145]] [[ملف:Wiktionary-logo.svg|وصلة=بَقَّعَ|18بك|صفحة ويكاموس]] · الجذر: بقع · ([[toolforge:ar-senses/review/L1533145|رابط المُفردة في الأداة]])
حذفت المعنى الرابع لأنه ورد بالتخفيف.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:18، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِنْبَقَّ (L1533147) ==
'''اِنْبَقَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533147|18بك|ويكي بيانات: L1533147]] [[ملف:Wiktionary-logo.svg|وصلة=اِنْبَقَّ|18بك|صفحة ويكاموس]] · الجذر: بقق · ([[toolforge:ar-senses/review/L1533147|رابط المُفردة في الأداة]])
المعنى خاطئ ولا شواهد عليه في المعاجم والمفردة الموجودة ('''انبعق''') وليس انبق.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:38، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَلَعَ (L1480240) ==
'''بَلَعَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1480240|18بك|ويكي بيانات: L1480240]] [[ملف:Wiktionary-logo.svg|وصلة=بَلَعَ|18بك|صفحة ويكاموس]] · الجذر: بلع · ([[toolforge:ar-senses/review/L1480240|رابط المُفردة في الأداة]])
خطأ في التشكيل فالفعل بَلِعَ وليس بَلَعَ كما في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:34، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْتَلَقَ (L1533220) ==
'''اِبْتَلَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533220|18بك|ويكي بيانات: L1533220]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْتَلَقَ|18بك|صفحة ويكاموس]] · الجذر: بلق · ([[toolforge:ar-senses/review/L1533220|رابط المُفردة في الأداة]])
لم أجد المفردة في المعاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:06، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَلُقَ (L1543358) ==
'''بَلُقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543358|18بك|ويكي بيانات: L1543358]] [[ملف:Wiktionary-logo.svg|وصلة=بَلُقَ|18بك|صفحة ويكاموس]] · الجذر: بلق · ([[toolforge:ar-senses/review/L1543358|رابط المُفردة في الأداة]])
المفردة بالكسر وليس بالضم، انظر '''[[بَلِقَ]]'''.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:52، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْذَارَّ (L1534290) ==
'''اِحْذَارَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534290|18بك|ويكي بيانات: L1534290]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْذَارَّ|18بك|صفحة ويكاموس]] · الجذر: حذر · ([[toolforge:ar-senses/review/L1534290|رابط المُفردة في الأداة]])
خلل في صندوق المعلومات.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:49، 9 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَاتَنَ (L1534214) ==
'''تَحَاتَنَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534214|18بك|ويكي بيانات: L1534214]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَاتَنَ|18بك|صفحة ويكاموس]] · الجذر: حتن · ([[toolforge:ar-senses/review/L1534214|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لأنه مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 12:31، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَتَنَ (L1534213) ==
'''اِحْتَتَنَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534213|18بك|ويكي بيانات: L1534213]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَتَنَ|18بك|صفحة ويكاموس]] · الجذر: حتن · ([[toolforge:ar-senses/review/L1534213|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 12:37، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَاتَّ (L1496477) ==
'''تَحَاتَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1496477|18بك|ويكي بيانات: L1496477]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَاتَّ|18بك|صفحة ويكاموس]] · الجذر: حتت · ([[toolforge:ar-senses/review/L1496477|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:36، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْزَوْزَى (L1534387) ==
'''اِحْزَوْزَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534387|18بك|ويكي بيانات: L1534387]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْزَوْزَى|18بك|صفحة ويكاموس]] · الجذر: حزو · ([[toolforge:ar-senses/review/L1534387|رابط المُفردة في الأداة]])
المفردة غير موجودة في المصدر ولها أكثر من معنى في المصادر الأخرى.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:02، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَذَّقَ (L1484084) ==
'''تَحَذَّقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1484084|18بك|ويكي بيانات: L1484084]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَذَّقَ|18بك|صفحة ويكاموس]] · الجذر: حذق · ([[toolforge:ar-senses/review/L1484084|رابط المُفردة في الأداة]])
المفردة غير موجودة في المصادر الموجودة، استبدلتها بمصادر أخرى.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:02، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَذَّقَ (L1534295) ==
'''حَذَّقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534295|18بك|ويكي بيانات: L1534295]] [[ملف:Wiktionary-logo.svg|وصلة=حَذَّقَ|18بك|صفحة ويكاموس]] · الجذر: حذق · ([[toolforge:ar-senses/review/L1534295|رابط المُفردة في الأداة]])
لم أجد الفعل المتعدي في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:14، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَذِقَ (L1546050) ==
'''حَذِقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1546050|18بك|ويكي بيانات: L1546050]] [[ملف:Wiktionary-logo.svg|وصلة=حَذِقَ|18بك|صفحة ويكاموس]] · الجذر: حذق · ([[toolforge:ar-senses/review/L1546050|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لأنه تفسير لمفردة فرس وهو مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:56، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَحْزَرَ (L1534363) ==
'''أَحْزَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534363|18بك|ويكي بيانات: L1534363]] [[ملف:Wiktionary-logo.svg|وصلة=أَحْزَرَ|18بك|صفحة ويكاموس]] · الجذر: حزر · ([[toolforge:ar-senses/review/L1534363|رابط المُفردة في الأداة]])
حذفت المعنى الأول لأنه خاطئ وغير مرتبط بالمفردة بل يرتبط بـ (أحزّ).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:06، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَزَّ (L1534366) ==
'''اِحْتَزَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534366|18بك|ويكي بيانات: L1534366]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَزَّ|18بك|صفحة ويكاموس]] · الجذر: حزز · ([[toolforge:ar-senses/review/L1534366|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:12، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَزْمَرَ (L1534382) ==
'''حَزْمَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534382|18بك|ويكي بيانات: L1534382]] [[ملف:Wiktionary-logo.svg|وصلة=حَزْمَرَ|18بك|صفحة ويكاموس]] · الجذر: حزمر · ([[toolforge:ar-senses/review/L1534382|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لارتباطه بـ ([[حَزْفَرَ]]).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:56، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَاسَى (L1534416) ==
'''تَحَاسَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534416|18بك|ويكي بيانات: L1534416]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَاسَى|18بك|صفحة ويكاموس]] · الجذر: حسو · ([[toolforge:ar-senses/review/L1534416|رابط المُفردة في الأداة]])
غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:10، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَاسَى (L1534418) ==
'''حَاسَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534418|18بك|ويكي بيانات: L1534418]] [[ملف:Wiktionary-logo.svg|وصلة=حَاسَى|18بك|صفحة ويكاموس]] · الجذر: حسو · ([[toolforge:ar-senses/review/L1534418|رابط المُفردة في الأداة]])
غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:16، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَاقَ (L1534738) ==
'''اِحْتَاقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534738|18بك|ويكي بيانات: L1534738]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَاقَ|18بك|صفحة ويكاموس]] · الجذر: حيق · ([[toolforge:ar-senses/review/L1534738|رابط المُفردة في الأداة]])
دمجت المعنيين لأنها مكرران.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 04:15، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَفَظَ (L1485699) ==
'''اِحْتَفَظَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1485699|18بك|ويكي بيانات: L1485699]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَفَظَ|18بك|صفحة ويكاموس]] · الجذر: حفظ · ([[toolforge:ar-senses/review/L1485699|رابط المُفردة في الأداة]])
لم تضع الأداة بعض أرقام الصفحات والأجزاء.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:19، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَمْحَمَ (L1476725) ==
'''حَمْحَمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1476725|18بك|ويكي بيانات: L1476725]] [[ملف:Wiktionary-logo.svg|وصلة=حَمْحَمَ|18بك|صفحة ويكاموس]] · الجذر: حمحم · ([[toolforge:ar-senses/review/L1476725|رابط المُفردة في الأداة]])
خلل في صندوق المعلومات.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:11، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَيَّفَ (L1534760) ==
'''تَحَيَّفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534760|18بك|ويكي بيانات: L1534760]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَيَّفَ|18بك|صفحة ويكاموس]] · الجذر: حيف · ([[toolforge:ar-senses/review/L1534760|رابط المُفردة في الأداة]])
دمجت المعنيين.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:38، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَشَّكَ (L1534439) ==
'''تَحَشَّكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534439|18بك|ويكي بيانات: L1534439]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَشَّكَ|18بك|صفحة ويكاموس]] · الجذر: حشك · ([[toolforge:ar-senses/review/L1534439|رابط المُفردة في الأداة]])
حرف الشين مشدد.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:12، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْوَالَّ (L1534743) ==
'''اِحْوَالَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534743|18بك|ويكي بيانات: L1534743]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْوَالَّ|18بك|صفحة ويكاموس]] · الجذر: حول · ([[toolforge:ar-senses/review/L1534743|رابط المُفردة في الأداة]])
خلل في صندوق المعلومات.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:59، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِسْتَحَاضَ (L1534730) ==
'''اِسْتَحَاضَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534730|18بك|ويكي بيانات: L1534730]] [[ملف:Wiktionary-logo.svg|وصلة=اِسْتَحَاضَ|18بك|صفحة ويكاموس]] · الجذر: حوض · ([[toolforge:ar-senses/review/L1534730|رابط المُفردة في الأداة]])
الموجود في المصادر استحوض وليس استحاض.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:05، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَاشَ (L1534721) ==
'''اِحْتَاشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534721|18بك|ويكي بيانات: L1534721]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَاشَ|18بك|صفحة ويكاموس]] · الجذر: حوش · ([[toolforge:ar-senses/review/L1534721|رابط المُفردة في الأداة]])
التصريف الموجود في المصادر (احتوش) وليس احتاش.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:34، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِسْتَحَاسَ (L1534716) ==
'''اِسْتَحَاسَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534716|18بك|ويكي بيانات: L1534716]] [[ملف:Wiktionary-logo.svg|وصلة=اِسْتَحَاسَ|18بك|صفحة ويكاموس]] · الجذر: حوس · ([[toolforge:ar-senses/review/L1534716|رابط المُفردة في الأداة]])
استحوس وليس استحاس كما في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:51، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَزْأَلَ (L1534358) ==
'''حَزْأَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534358|18بك|ويكي بيانات: L1534358]] [[ملف:Wiktionary-logo.svg|وصلة=حَزْأَلَ|18بك|صفحة ويكاموس]] · الجذر: حزأل · ([[toolforge:ar-senses/review/L1534358|رابط المُفردة في الأداة]])
مفردة خاطئة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 12:52، 14 أغسطس 2026 (ت ع م)
:فعلا، يبدو أن المُفردة حَزْأَلَ لا توجد. في جدول الأفعال، عندنا فعل واحد من الجذر "ح ز أ ل"، وهو على وزن '''فعلل'''، أي حَزْأَلَ. لكن يبدو أن هذا خاطئ، و أن الوزن الصحيح هو افعللّ، أي احْزَأَلَّ، وهو الذي ذُكِر في معجم [https://app.turath.io/book/7030?page=14881 تاج العروس]. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 21:19، 14 أغسطس 2026 (ت ع م)
:ورد في اللسان أيضًا احزألَّ بمعنى ارتفع وبمعنى اجتمع. [[مستخدم:Michel Bakni|Michel Bakni]] ([[نقاش المستخدم:Michel Bakni|نقاش]]) 21:50، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَنَّشَ (L1534669) ==
'''حَنَّشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534669|18بك|ويكي بيانات: L1534669]] [[ملف:Wiktionary-logo.svg|وصلة=حَنَّشَ|18بك|صفحة ويكاموس]] · الجذر: حنش · ([[toolforge:ar-senses/review/L1534669|رابط المُفردة في الأداة]])
هل هي حَنَّشَ أم حَنَشَ؟ وأظن أن لها معان أخرى.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:28، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْخَنَدَّ (L1532850) ==
'''اِبْخَنَدَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1532850|18بك|ويكي بيانات: L1532850]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْخَنَدَّ|18بك|صفحة ويكاموس]] · الجذر: بخند · ([[toolforge:ar-senses/review/L1532850|رابط المُفردة في الأداة]])
الفعل في المرجع اخْبَنْدَى، لا وجود المفردة اِبْخَنَدَّ--[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 18:52، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَمْيَرَ (L1534650) ==
'''تَحَمْيَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534650|18بك|ويكي بيانات: L1534650]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَمْيَرَ|18بك|صفحة ويكاموس]] · الجذر: حمير · ([[toolforge:ar-senses/review/L1534650|رابط المُفردة في الأداة]])
خطأ في استخراج المعنى، معنى تحمير أي ساء خلقه كما في المصادر أم هذه فيجب أن تكون بغير الياء أي تَحَمَّر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:02، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَبَشَ (L1534178) ==
'''اِحْتَبَشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534178|18بك|ويكي بيانات: L1534178]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَبَشَ|18بك|صفحة ويكاموس]] · الجذر: حبش · ([[toolforge:ar-senses/review/L1534178|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:38، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَثَّرَ (L1534223) ==
'''تَحَثَّرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534223|18بك|ويكي بيانات: L1534223]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَثَّرَ|18بك|صفحة ويكاموس]] · الجذر: حثر · ([[toolforge:ar-senses/review/L1534223|رابط المُفردة في الأداة]])
المعنى لفعل حثر، الرجاء إصلاحه.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:52، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَثْرَفَ (L1534226) ==
'''حَثْرَفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534226|18بك|ويكي بيانات: L1534226]] [[ملف:Wiktionary-logo.svg|وصلة=حَثْرَفَ|18بك|صفحة ويكاموس]] · الجذر: حثرف · ([[toolforge:ar-senses/review/L1534226|رابط المُفردة في الأداة]])
المعنى الصحيح زعزعه وحركه، انظر تاج العروس جزء 23 صفحة 118.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:09، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَظْرَبَ (L1534501) ==
'''تَحَظْرَبَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534501|18بك|ويكي بيانات: L1534501]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَظْرَبَ|18بك|صفحة ويكاموس]] · الجذر: حظرب · ([[toolforge:ar-senses/review/L1534501|رابط المُفردة في الأداة]])
دًمج المعنيان ووُضعت أمثلة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:32، 16 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَافَلَ (L1534527) ==
'''حَافَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534527|18بك|ويكي بيانات: L1534527]] [[ملف:Wiktionary-logo.svg|وصلة=حَافَلَ|18بك|صفحة ويكاموس]] · الجذر: حفل · ([[toolforge:ar-senses/review/L1534527|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر المذكورة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:59، 16 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْقَوْقَفَ (L1489579) ==
'''اِحْقَوْقَفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1489579|18بك|ويكي بيانات: L1489579]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْقَوْقَفَ|18بك|صفحة ويكاموس]] · الجذر: حقف · ([[toolforge:ar-senses/review/L1489579|رابط المُفردة في الأداة]])
المعاني الأربعة مكررة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:52، 17 أغسطس 2026 (ت ع م)
== معجم مقاييس اللغة ==
مرحبا بالزملاء، روابط الكتاب الموجودة في الأداة غير دقيقة وقد كنت أظن أن الاختلاف في مفردة أو اثنتين لكن تبين لي أنها غير دقيقة في جميع المفردات، رقم الصفة صحيح ولكن الرابط بعيد عن الصفحة، تحياتي لكم. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:56، 17 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَكَرَ (L1478743) ==
'''اِحْتَكَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1478743|18بك|ويكي بيانات: L1478743]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَكَرَ|18بك|صفحة ويكاموس]] · الجذر: حكر · ([[toolforge:ar-senses/review/L1478743|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:42، 17 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَكَّرَ (L1534555) ==
'''حَكَّرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534555|18بك|ويكي بيانات: L1534555]] [[ملف:Wiktionary-logo.svg|وصلة=حَكَّرَ|18بك|صفحة ويكاموس]] · الجذر: حكر · ([[toolforge:ar-senses/review/L1534555|رابط المُفردة في الأداة]])
أشك بوجود المفردة المشكلة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:56، 17 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَمِضَ (L1543549) ==
'''حَمِضَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543549|18بك|ويكي بيانات: L1543549]] [[ملف:Wiktionary-logo.svg|وصلة=حَمِضَ|18بك|صفحة ويكاموس]] · الجذر: حمض · ([[toolforge:ar-senses/review/L1543549|رابط المُفردة في الأداة]])
المعاني مختلطة لعدم وضوح حركة الميم في الفعل.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:57، 19 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَسَى (L1486741) ==
'''أَسَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1486741|18بك|ويكي بيانات: L1486741]] [[ملف:Wiktionary-logo.svg|وصلة=أَسَى|18بك|صفحة ويكاموس]] · الجذر: أسي · ([[toolforge:ar-senses/review/L1486741|رابط المُفردة في الأداة]])
الفعل في المراجع أسا من الجذر أسو.--[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 20:03، 20 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِخْتَبَلَ (L1534805) ==
'''اِخْتَبَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534805|18بك|ويكي بيانات: L1534805]] [[ملف:Wiktionary-logo.svg|وصلة=اِخْتَبَلَ|18بك|صفحة ويكاموس]] · الجذر: خبل · ([[toolforge:ar-senses/review/L1534805|رابط المُفردة في الأداة]])
المعنى الثاني مكرر، حذفته.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:03، 21 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَخَاتَلَ (L1487389) ==
'''تَخَاتَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1487389|18بك|ويكي بيانات: L1487389]] [[ملف:Wiktionary-logo.svg|وصلة=تَخَاتَلَ|18بك|صفحة ويكاموس]] · الجذر: ختل · ([[toolforge:ar-senses/review/L1487389|رابط المُفردة في الأداة]])
دُمِج المعنيان.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:09، 21 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَخَاجَأَ (L1534840) ==
'''تَخَاجَأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534840|18بك|ويكي بيانات: L1534840]] [[ملف:Wiktionary-logo.svg|وصلة=تَخَاجَأَ|18بك|صفحة ويكاموس]] · الجذر: خجأ · ([[toolforge:ar-senses/review/L1534840|رابط المُفردة في الأداة]])
لاحظت التباسا أو خلطا بين (تخاجأ وتخاجى وتخاجا).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:22، 22 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَخَارَقَ (L1534942) ==
'''تَخَارَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534942|18بك|ويكي بيانات: L1534942]] [[ملف:Wiktionary-logo.svg|وصلة=تَخَارَقَ|18بك|صفحة ويكاموس]] · الجذر: خرق · ([[toolforge:ar-senses/review/L1534942|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:36، 22 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَآ (L1545136) ==
'''دَآ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1545136|18بك|ويكي بيانات: L1545136]] [[ملف:Wiktionary-logo.svg|وصلة=دَآ|18بك|صفحة ويكاموس]] · الجذر: دأو · ([[toolforge:ar-senses/review/L1545136|رابط المُفردة في الأداة]])
الفعل الصحيح (دَأَى) كما في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:47، 22 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِدْحَوَى (L1535316) ==
'''اِدْحَوَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535316|18بك|ويكي بيانات: L1535316]] [[ملف:Wiktionary-logo.svg|وصلة=اِدْحَوَى|18بك|صفحة ويكاموس]] · الجذر: دحو · ([[toolforge:ar-senses/review/L1535316|رابط المُفردة في الأداة]])
استبدلت المصدر بمصادر أكثر دقة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:49، 23 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَدَرَّهَ (L1535387) ==
'''تَدَرَّهَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535387|18بك|ويكي بيانات: L1535387]] [[ملف:Wiktionary-logo.svg|وصلة=تَدَرَّهَ|18بك|صفحة ويكاموس]] · الجذر: دره · ([[toolforge:ar-senses/review/L1535387|رابط المُفردة في الأداة]])
دره وليس تدره.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:55، 24 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَشَا (L1544094) ==
'''دَشَا''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544094|18بك|ويكي بيانات: L1544094]] [[ملف:Wiktionary-logo.svg|وصلة=دَشَا|18بك|صفحة ويكاموس]] · الجذر: دشو · ([[toolforge:ar-senses/review/L1544094|رابط المُفردة في الأداة]])
أضفت المعنى ووثقته من المعاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:54، 25 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَغِرَ (L1543752) ==
'''دَغِرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543752|18بك|ويكي بيانات: L1543752]] [[ملف:Wiktionary-logo.svg|وصلة=دَغِرَ|18بك|صفحة ويكاموس]] · الجذر: دغر · ([[toolforge:ar-senses/review/L1543752|رابط المُفردة في الأداة]])
للمفردة أكثر من معنى غير مذكور، ولا أدري هي بالكسر أم بالفتح دَغَرَ دَغِرَ.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:03، 25 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَاغَصَ (L1535445) ==
'''دَاغَصَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535445|18بك|ويكي بيانات: L1535445]] [[ملف:Wiktionary-logo.svg|وصلة=دَاغَصَ|18بك|صفحة ويكاموس]] · الجذر: دغص · ([[toolforge:ar-senses/review/L1535445|رابط المُفردة في الأداة]])
حذفت المعاني الثلاثة الأخيرة لأنها مختلطة بمفردة (دَاغَشَ).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:42، 25 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِدَّمَسَ (L1535554) ==
'''اِدَّمَسَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535554|18بك|ويكي بيانات: L1535554]] [[ملف:Wiktionary-logo.svg|وصلة=اِدَّمَسَ|18بك|صفحة ويكاموس]] · الجذر: دمس · ([[toolforge:ar-senses/review/L1535554|رابط المُفردة في الأداة]])
حذفت المصدرين وأضفت تهذيب اللغة لورود المفردة فيه ج=12 ص=263.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:13، 28 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَدَمْشَقَ (L1535561) ==
'''تَدَمْشَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535561|18بك|ويكي بيانات: L1535561]] [[ملف:Wiktionary-logo.svg|وصلة=تَدَمْشَقَ|18بك|صفحة ويكاموس]] · الجذر: دمشق · ([[toolforge:ar-senses/review/L1535561|رابط المُفردة في الأداة]])
المفردة غير موجودة والمثال غير موجود.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:29، 28 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَنَّأَ (L1535578) ==
'''دَنَّأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535578|18بك|ويكي بيانات: L1535578]] [[ملف:Wiktionary-logo.svg|وصلة=دَنَّأَ|18بك|صفحة ويكاموس]] · الجذر: دنأ · ([[toolforge:ar-senses/review/L1535578|رابط المُفردة في الأداة]])
لا أظن الفعل مهموزا.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:19، 28 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِدَّنَى (L1535595) ==
'''اِدَّنَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535595|18بك|ويكي بيانات: L1535595]] [[ملف:Wiktionary-logo.svg|وصلة=اِدَّنَى|18بك|صفحة ويكاموس]] · الجذر: دنو · ([[toolforge:ar-senses/review/L1535595|رابط المُفردة في الأداة]])
المثال في صفحة 273 وأظنه بمعنى مختلف.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:43، 29 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَبْشَبَ (L1537222) ==
'''شَبْشَبَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537222|18بك|ويكي بيانات: L1537222]] [[ملف:Wiktionary-logo.svg|وصلة=شَبْشَبَ|18بك|صفحة ويكاموس]] · الجذر: شبشب · ([[toolforge:ar-senses/review/L1537222|رابط المُفردة في الأداة]])
حذف المعنى الثاني لأنه خطأ من الأداة بسبب وجود خطأ مطبعي في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:13، 31 أغسطس 2026 (ت ع م)
:هل تحويل حركات من فتحة الى الكسرة يحل مشكلة؟ [[مستخدم:يزن البلوي|يزن البلوي]] ([[نقاش المستخدم:يزن البلوي|نقاش]]) 13:32، 1 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِنْشَبَحَ (L1537214) ==
'''اِنْشَبَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537214|18بك|ويكي بيانات: L1537214]] [[ملف:Wiktionary-logo.svg|وصلة=اِنْشَبَحَ|18بك|صفحة ويكاموس]] · الجذر: شبح · ([[toolforge:ar-senses/review/L1537214|رابط المُفردة في الأداة]])
استبدلت مقاييس اللغة بجمهرة اللغة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:33، 2 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَاجَّ (L1537248) ==
'''شَاجَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537248|18بك|ويكي بيانات: L1537248]] [[ملف:Wiktionary-logo.svg|وصلة=شَاجَّ|18بك|صفحة ويكاموس]] · الجذر: شجج · ([[toolforge:ar-senses/review/L1537248|رابط المُفردة في الأداة]])
استخراج خاطئ، لم أجد التصريف في بقية المراجع.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:34، 4 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَرَّى (L1485717) ==
'''تَبَرَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1485717|18بك|ويكي بيانات: L1485717]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَرَّى|18بك|صفحة ويكاموس]] · الجذر: بري · ([[toolforge:ar-senses/review/L1485717|رابط المُفردة في الأداة]])
الفعل في المراجع "تَبرأ" من جذر برأ وليس "تَبَرَّى" من جذر بري --[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 12:29، 5 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَحَطَ (L1489005) ==
'''شَحَطَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1489005|18بك|ويكي بيانات: L1489005]] [[ملف:Wiktionary-logo.svg|وصلة=شَحَطَ|18بك|صفحة ويكاموس]] · الجذر: شحط · ([[toolforge:ar-senses/review/L1489005|رابط المُفردة في الأداة]])
خلل وأخطاء غير معروفة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:19، 5 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَشْحَنَ (L1537270) ==
'''أَشْحَنَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537270|18بك|ويكي بيانات: L1537270]] [[ملف:Wiktionary-logo.svg|وصلة=أَشْحَنَ|18بك|صفحة ويكاموس]] · الجذر: شحن · ([[toolforge:ar-senses/review/L1537270|رابط المُفردة في الأداة]])
المعنى اأخير لـ(أحشن) وليس لـ(أشحن).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:29، 6 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَرَّى (L1537351) ==
'''شَرَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537351|18بك|ويكي بيانات: L1537351]] [[ملف:Wiktionary-logo.svg|وصلة=شَرَّى|18بك|صفحة ويكاموس]] · الجذر: شري · ([[toolforge:ar-senses/review/L1537351|رابط المُفردة في الأداة]])
لا أعلم إن كان حرف الراء مشددا أم لا.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:01، 7 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَرِفَ (L1544475) ==
'''شَرِفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544475|18بك|ويكي بيانات: L1544475]] [[ملف:Wiktionary-logo.svg|وصلة=شَرِفَ|18بك|صفحة ويكاموس]] · الجذر: شرف · ([[toolforge:ar-senses/review/L1544475|رابط المُفردة في الأداة]])
هل هي بضم الراء أم بكسرها؟<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:54، 7 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَشْدَى (L1537300) ==
'''أَشْدَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537300|18بك|ويكي بيانات: L1537300]] [[ملف:Wiktionary-logo.svg|وصلة=أَشْدَى|18بك|صفحة ويكاموس]] · الجذر: شدو · ([[toolforge:ar-senses/review/L1537300|رابط المُفردة في الأداة]])
استخراج الأداة خاطئ.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 23:44، 8 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: جَاجَ (L1544958) ==
'''جَاجَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544958|18بك|ويكي بيانات: L1544958]] [[ملف:Wiktionary-logo.svg|وصلة=جَاجَ|18بك|صفحة ويكاموس]] · الجذر: جوج · ([[toolforge:ar-senses/review/L1544958|رابط المُفردة في الأداة]])
الفعل في المرجع جِيج من جذر جيج.--[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 12:36، 10 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: جَاثَ (L1544257) ==
'''جَاثَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544257|18بك|ويكي بيانات: L1544257]] [[ملف:Wiktionary-logo.svg|وصلة=جَاثَ|18بك|صفحة ويكاموس]] · الجذر: جوث · ([[toolforge:ar-senses/review/L1544257|رابط المُفردة في الأداة]])
الفعل في المراجع "جوث"، وهناك فعل أخر "جأث" بمعنى آخر، لكن لم أجد المفردة "جاث" بهذا الشكل. --[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 12:53، 10 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَسَى (L1495990) ==
'''حَسَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1495990|18بك|ويكي بيانات: L1495990]] [[ملف:Wiktionary-logo.svg|وصلة=حَسَى|18بك|صفحة ويكاموس]] · الجذر: حسي · ([[toolforge:ar-senses/review/L1495990|رابط المُفردة في الأداة]])
<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. -->الفعل حَسَا من جذر حسو وليس حسى.--[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 11:39، 11 سبتمبر 2026 (ت ع م)
sxmjl97ymocvv828hcy67awa288hl8x
1159147
1159146
2026-09-11T11:47:12Z
إسلام
12622
/* بلاغ من أداة مراجعة المعاني: اِحْرَنْبَى (L1534310) */ قسم جديد
1159147
wikitext
text/x-wiki
{{رأس صفحة نقاش}}
== بلاغ من أداة مراجعة المعاني: حَلَّى (L1534604) ==
'''حَلَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534604|18بك|ويكي بيانات: L1534604]] [[ملف:Wiktionary-logo.svg|وصلة=حَلَّى|18بك|صفحة ويكاموس]] · الجذر: حلو · ([[toolforge:ar-senses/review/L1534604|رابط المُفردة في الأداة]])
إبلاغ من الزميل {{مس|رِفْد}}: ''لا يمكن نشرها في ويكاموس عند الضغط على زر النشر يظهر: "خطأ: الصفحة موجودة بالفعل".'' --[[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 11:27، 27 يوليو 2026 (ت ع م)
:شكرا لك @[[مستخدم:رِفْد|رِفْد]] على الإبلاغ. المشكلة في الفعل حَلَّى (وأفعال آخرين) أَنَّه يُوَلَّدُ من جذرين: ح-ل-ي و ح-ل-و. في ويكي بيانات توجد وحدتان معجميتان، واحدة لكل فعل، لكن في ويكاموس لا يُمكن إنشاء صفحتين بنفس الاسم. سأفكر في حل لهذه المشكلة وأوافيك بالجديد. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 11:28، 27 يوليو 2026 (ت ع م)
::حالة أخرى حيث يشترك جذران في نفس صيغة الفعل:
::* جذر ت-ل-و على وزن تفعّل => [[تَتَلَّى]] ([https://ar-senses.toolforge.org/review/L1533461 رابط المُفردة في الأداة]).
::* جذر ت-ل-ي على وزن تفعّل => [[تَتَلَّى]]
::[[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 11:42، 27 يوليو 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِسْتَجَاشَ (L1534157) ==
'''اِسْتَجَاشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534157|18بك|ويكي بيانات: L1534157]] [[ملف:Wiktionary-logo.svg|وصلة=اِسْتَجَاشَ|18بك|صفحة ويكاموس]] · الجذر: جيش · ([[toolforge:ar-senses/review/L1534157|رابط المُفردة في الأداة]])
المعنى الثاني غير موجود في المصدر في صفحة المفردة (ص=603) والحديث الموجود في صفحة 115 غير مفسر بهذا المعنى أيضا. --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:40، 27 يوليو 2026 (ت ع م)
<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. -->
:{{ر|أبو هشام}} بخصوص المعنى الثاني، رجعتُ إلى ص=603 ووجدتُ المعنى حسب الوارد في الأداة: {{اقتباس مضمن|استجاش الأمير من مكان كذا: طلب جيشًا وجمعه. '''و- ت القدر: غلت.'''}}
:{{ر|Michel Bakni}} بخصوص المعنى الثالث (ص=115)، يبدو المعنى صحيحًا لكن الأداة استَنْبَطَتْهُ من مثال وارد في المعجم لا من تعريف للكلمة، ما رأيك؟
:*الاقتباس من المصدر: {{اقتباس مضمن|فَمَرَّ الْجَيْشُ عَلَى غَطَفَانَ '''فَاسْتَجَاشُوهُمْ''' عَلَى بَنِي سُليم، فَهَزَمَتْ بَنُو سُلَيم جيشَ النُّعْمَانِ}}
:*تعريف المعنى كما استخرجَتْهُ الأداة من النص السابق: {{اقتباس مضمن|اِسْتَجَاشَ القومَ على فلان: استنفرهم وحرّضهم عليه}}
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:23، 6 أغسطس 2026 (ت ع م).
::نعم أتفق مع هذا الطرح. [[مستخدم:Michel Bakni|Michel Bakni]] ([[نقاش المستخدم:Michel Bakni|نقاش]]) 14:25، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: جَوَّهَ (L1534145) ==
'''جَوَّهَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534145|18بك|ويكي بيانات: L1534145]] [[ملف:Wiktionary-logo.svg|وصلة=جَوَّهَ|18بك|صفحة ويكاموس]] · الجذر: جوه · ([[toolforge:ar-senses/review/L1534145|رابط المُفردة في الأداة]])
المعنى بهذا التصريف خطأ، لم أعثر على جوّه فلانا أي جعله وجيها، ولم أجد جوّه السقاء أي رقعه بل وجدت جواه في معجم متن اللغة. --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:48، 27 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك، المشكلة هي أن الأداة أخذت الجذر (جَوَهَ) وألحقت به معنى الفرع (وجَّهَ أو أَوْجَهَ، كحال: أَوْجَهْتُهُ أنا ووَجَّهْتُهُ)، سوف نعمل على إصلاحها.
:{{ر|ForzaGreen}} خطوات قادمة:
:#يجب أن نتوثَّق من أن الأداة تُميِّزُ الجذر عن الفرع. في هذه الحالة، أخذت الأداة الجذر ('''جَوَهَ''') وشكَّلتهُ ('''جَوَّهَ''')، ثم ألحقَتْ به معنى خاطئًا للمشتق.
:#بناءً على ما نراهُ هنا وقي حالات أخرى، نحتاج إلى '''خيار للمراجع لتعديل عنوان الصفحة'''، فلو أمكنهُ تبديل العنوان في هذه الحالة إلى '''وجَّهَ''' أو '''أَوْجَهَ''' لكان صحيحًا.
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 13:54، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: سَدَسَ (L1547049) ==
'''سَدَسَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1547049|18بك|ويكي بيانات: L1547049]] [[ملف:Wiktionary-logo.svg|وصلة=سَدَسَ|18بك|صفحة ويكاموس]] · الجذر: سدس · ([[toolforge:ar-senses/review/L1547049|رابط المُفردة في الأداة]])
المعنى الثاني مكرر، استبدلته وأضفت مصادر. --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:04، 28 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك ونعمل على التوثّق من مسألة تكرار المعاني --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 13:58، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: تَسَدَّى (L1536864) ==
'''تَسَدَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1536864|18بك|ويكي بيانات: L1536864]] [[ملف:Wiktionary-logo.svg|وصلة=تَسَدَّى|18بك|صفحة ويكاموس]] · الجذر: سدي · ([[toolforge:ar-senses/review/L1536864|رابط المُفردة في الأداة]])
خلل في رقم صفحة القاموس المحيط، ولا توجد شواهد قوية على المعنى الأول، أظن أن المفردة بحاجة لمراجعة وإعادة ترتيب المعاني.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:44، 29 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} متفّق، {{اقتباس مضمن|والحائكُ يُسَدِّي الثَّوْبَ ويَتَسَدّاه}} أي يحيكه لنفسه.
:{{ر|ForzaGreen}} يبدو أن النموذج اختلَطَ عليه الأمر أثناء دمج المعاني، ربما خصوصًا من لسان العرب ({{اقتباس مضمن|والحائكُ يُسَدِّي الثَّوْبَ ويَتَسَدّاه}})، فخرجَ بالمعنى المبتدع: {{اقتباس مضمن|تَسَدَّى الثوبَ: أقام سَداه لنفسه}}، وليس له مثيل في المصادر.
:'''الخطوات القادمة المقترحة''': أشتَبِهُ في أن النموذج يفقد موثوقيته حين دَمْجَ المعاني من عددٍ كبير من المصادر (5 مصادر في هذه الحالة)، '''أقترح وَضْعَ حدّ أعلى للمصادر التي نستخدمها في استخراج المعنى، ربما 3 للوقت الحاضر'''.
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:10، 6 أغسطس 2026 (ت ع م).
::وضع حد للمصادر آليا قد يحرم المفردة من المصدر الأقوى والأدق. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:30، 6 أغسطس 2026 (ت ع م)
:{{أصلح}} الخلل في رقم صفحة القاموس المحيط، لهذه المُفردة ولمفردات أخرى. يبدو أن المشكل كان سببه عشوائية النموذج اللغوي، إذ كان يُغيِّر رقم الصفحة في أقل من 1% من الحالات. عدّلتُ أداة توليد المعاني حتى لا يتكرر الخطأ.
:بالنسبة للمصادر، أُفضل الإبقاء عليها جميعا. سنُجرب مع {{مس|عباد ديرانية}} تعديل تعليمات النموذج لتحسين المُخْرَجات ولإصلاح مشاكل أخرى، لا سيما المعاني المُكررة. -- [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 23:47، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَسَافَدَ (L1497488) ==
'''تَسَافَدَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1497488|18بك|ويكي بيانات: L1497488]] [[ملف:Wiktionary-logo.svg|وصلة=تَسَافَدَ|18بك|صفحة ويكاموس]] · الجذر: سفد · ([[toolforge:ar-senses/review/L1497488|رابط المُفردة في الأداة]])
اكتفيت بالمعنى الأول بسبب التكرار.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 11:51، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} ملاحظة للعمل على تكرار المعاني، المعنى 1 و2 متماثلان والثاني هو الأوضح للمستخدم المعاصر --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:13، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: سَافَحَ (L1487289) ==
'''سَافَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1487289|18بك|ويكي بيانات: L1487289]] [[ملف:Wiktionary-logo.svg|وصلة=سَافَحَ|18بك|صفحة ويكاموس]] · الجذر: سفح · ([[toolforge:ar-senses/review/L1487289|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لأنه مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:42، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} حالة تكرار أخرى مؤكدة في المعنى 1 والمعنى 2 --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:14، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: تَرَأَّمَ (L1535813) ==
'''تَرَأَّمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535813|18بك|ويكي بيانات: L1535813]] [[ملف:Wiktionary-logo.svg|وصلة=تَرَأَّمَ|18بك|صفحة ويكاموس]] · الجذر: رأم · ([[toolforge:ar-senses/review/L1535813|رابط المُفردة في الأداة]])
دمجت المعنيين وصححت رقم الجزء والصفحة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:58، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} حالة تكرار مؤكّدة بين المعنى 1 و2، كما يأتي:
:#{{اقتباس مضمن|تَرَأَّمَ الشيءَ: أحبَّه وألِفَه وعطف عليه وترحم عليه}}
:#{{اقتباس مضمن|تَرَأَّمَ الصبيَّ: ترحَّم عليه}}
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:26، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: جَاوَى (L1534151) ==
'''جَاوَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534151|18بك|ويكي بيانات: L1534151]] [[ملف:Wiktionary-logo.svg|وصلة=جَاوَى|18بك|صفحة ويكاموس]] · الجذر: جوي · ([[toolforge:ar-senses/review/L1534151|رابط المُفردة في الأداة]])
خطأ: الصفحة 'جَاوَى' موجودة بالفعل <!-- يظهر هكذا: خطأ: الصفحة 'جَاوَى' موجودة بالفعل. --> --[[مستخدم:رِفْد|رِفْد]] ([[نقاش المستخدم:رِفْد|نقاش]]) 22:15، 30 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} أتقصد أنكَ أنشأتَ الصفحة سابقًا عبر الأداة ثم ظهرت لك مرة أخرى في أداة مراجعة المعاني؟ --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:27، 6 أغسطس 2026 (ت ع م).
::مرحبا {{ر|عباد ديرانية}} أعتقد أن الخلل هو وجود صفحة مكررة في ويكي بيانات يلزم دمجها، تحياتي لك. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:59، 6 أغسطس 2026 (ت ع م)
:::+أضيفُ الاقتراح الممتاز '''إضافة تنبيهٍ بالخط الأحمر إلى الأداة في حال لو أن الصفحة أُنْشِأَتْ وحُذِفَتْ سابقًا''' تنبيهًا للمستخدم --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 16:07، 6 أغسطس 2026 (ت ع م).
::::هذا المشكل تكرر مرات عديدة (انظر النقاش أعلاه عن الفعل '''حَلَّى''') والسبب هو المُفردات التي تشترك في نفس الجذر. حاليا لا يوجد حل تقني للمسألة، لكنها في بالي وسأفكر في حل. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 22:48، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَجَاذَى (L1533824) ==
'''تَجَاذَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533824|18بك|ويكي بيانات: L1533824]] [[ملف:Wiktionary-logo.svg|وصلة=تَجَاذَى|18بك|صفحة ويكاموس]] · الجذر: جذي · ([[toolforge:ar-senses/review/L1533824|رابط المُفردة في الأداة]])
خطأ: الصفحة 'تَجَاذَى' موجودة بالفعل <!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:رِفْد|رِفْد]] ([[نقاش المستخدم:رِفْد|نقاش]]) 22:19، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} هذه ملاحظة متكرّرة من المستخدمين، يظهر أننا نحتاجُ إلى '''تحديث الأداة بوتيرة يومية لإزالة الصفحات المنشأة سابقًا'''، إلا لو كان هذا خطأً تقنيًا مختلفًا يُسبِّبُ التكرار --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 15:48، 6 أغسطس 2026 (ت ع م).
::كنت أصلحت هذه الكلمة مع كلمات أخرى لكن لم أصلح بعد مصدر الخطأ، وهو الأفعال التي لها جذور مختلفة لكنها تشترك في نفس الصيغة. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 17:51، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَجْذَى (L1533823) ==
'''أَجْذَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533823|18بك|ويكي بيانات: L1533823]] [[ملف:Wiktionary-logo.svg|وصلة=أَجْذَى|18بك|صفحة ويكاموس]] · الجذر: جذي · ([[toolforge:ar-senses/review/L1533823|رابط المُفردة في الأداة]])
خطأ: الصفحة 'أَجْذَى' موجودة بالفعل <!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:رِفْد|رِفْد]] ([[نقاش المستخدم:رِفْد|نقاش]]) 22:20، 30 يوليو 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: زَأْزَأَ (L1536388) ==
'''زَأْزَأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1536388|18بك|ويكي بيانات: L1536388]] [[ملف:Wiktionary-logo.svg|وصلة=زَأْزَأَ|18بك|صفحة ويكاموس]] · الجذر: زأزأ · ([[toolforge:ar-senses/review/L1536388|رابط المُفردة في الأداة]])
حذفت المعنى الخامس لأنه مزيد بتاء في المراجع.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:35، 4 أغسطس 2026 (ت ع م)
:{{ر|Michel Bakni}} المعنى الخامس مزيدٌ بتاء التأنيث، فهل نُنْشِئُ له صفحةً منفصلةً برأيك أم نضيفه إلى ذات الصفحة مع تحويلة؟
:شرح المعنى الخامس: {{اقتباس مضمن|زَأْزَأَتِ المرأةُ: مشت وحرّكت أعطافها كمشية القِصار}}
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:33، 6 أغسطس 2026 (ت ع م).
::نعم، يلزم إنشاء صفحة لكل فعل بكل تصريف، هذا التصريف: المؤنث المفرد الغائب. [[مستخدم:Michel Bakni|Michel Bakni]] ([[نقاش المستخدم:Michel Bakni|نقاش]]) 14:36، 6 أغسطس 2026 (ت ع م)
:::{{ر|ForzaGreen}} إذًا يلزمنا التوثّق من تمييز النموذج للمؤنّث وتخصيصه صفحة مستقلّة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:54، 6 أغسطس 2026 (ت ع م).
::::أنا رأيي كل المعاني والأمثلة تبقى في صفحة الفعل الرئيسية، والصيغ المُصرفة تحيل إلى الصفحة الرئيسية. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 15:06، 6 أغسطس 2026 (ت ع م)
::::متّفق مع وائل هنا بالواقع، الأفضل هو تخفيف الإحالات إن أمكن وجَمْع تصريفات المذكر والمؤنث والعدد بصفحة واحدة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 15:52، 6 أغسطس 2026 (ت ع م).
:::::لكن الذي يراجع القوالب يفهم أن لكل تصريف صفحة خاصة به لذلك أنا أتفق مع الزميل ميشيل على إنشاء صفحة لكل تصريف، تحياتي لكم. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:10، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَزْعَلَ (L1476504) ==
'''أَزْعَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1476504|18بك|ويكي بيانات: L1476504]] [[ملف:Wiktionary-logo.svg|وصلة=أَزْعَلَ|18بك|صفحة ويكاموس]] · الجذر: زعل · ([[toolforge:ar-senses/review/L1476504|رابط المُفردة في الأداة]])
دمجت المعنى الأول والثالث لأن المعنى الثالث مكرر عن الأول.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 10:04، 4 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك ونعمل على معالجة مسألة المعاني المُكرَّرة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:34، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: زَعِلَ (L1487695) ==
'''زَعِلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1487695|18بك|ويكي بيانات: L1487695]] [[ملف:Wiktionary-logo.svg|وصلة=زَعِلَ|18بك|صفحة ويكاموس]] · الجذر: زعل · ([[toolforge:ar-senses/review/L1487695|رابط المُفردة في الأداة]])
المعنى الأول (مرح) غير موجود في المراجع، والمعنى الثالث بحاجة إلى تدقيق، تحتاج المفردة إلى مراجعة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 10:41، 4 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} من معجم العين: {{اقتباس مضمن|الزَّعِل: النشيط '''الأشر'''. زَعِلَ يَزْعَلُ زَعَلًا.}}، الأشر هنا بمعنى المرح (مصدر [https://www.islamweb.net/ar/library/content/122/137/%D8%A3%D8%B4%D8%B1 من لسان العرب]).
:{{ر|ForzaGreen}} المعنى الثالث فيه اختلاطٌ بين معانٍ عِدّة، مثل: {{اقتباس مضمن|والزعل: '''المتضور جوعا'''}} (الجوهري) و{{اقتباس مضمن|الزَّعَلُ '''كالعَلَزِ مِنَ المَرَض'''}} (لسان العرب)، والمعنى في الأداة جاءَ: {{اقتباس مضمن|زَعِلَ من المرض أو الجوع: تضوّر وتلوّى وقلِق فلم يستقر}}.
:'''الخطوات القادمة المقترحة''': أشتبه أن النموذج اختلط عليه دمج المعنى عبر 5 مصادر، والأفضل والأسهل للمراجع (فمن الصعب جدًا تقصّي 5 مراجع مختلفة) أن '''نضعَ حدًا بين مصدرَيْن إلى ثلاثة مصادر للمعنى الواحد''' --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:48، 6 أغسطس 2026 (ت ع م).
::نعم، في الحقيقة تحتوي بعض المفردات على مراجع كثيرة وأتفق معك على الاستشهاد بمرجعين أو ثلاث بأقصى حد لكن لو يكون انتقاء المراجع يدويا أفضل لاختيار الأنسب والأقرب إلا إذا كان الاختيار الآلي قادرا على انتقاء المرجع الأنسب أو الأقرب أو الأدق. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:21، 6 أغسطس 2026 (ت ع م)
:::إشارة {{ر|عباد ديرانية}} أرجو مراجعة تقليل المراجع آليا فقد تحرم الأداةُ المفردةَ من المراجع الأدق وتضع المراجع الأبعد. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:23، 6 أغسطس 2026 (ت ع م)
::::{{ر|أبو هشام}} لا بأس بذلك، لكن إن تركنا للمُرَاجِعِ اختيار المصادر الأدق فهذا يعني أن عليهم مراجعة 5 - 6 مصادر في بعض الحالات، فما هو الأفضل بالنسبة لك بين هذه الخيارات؟ أهو انتقاء المصادر الأفضل يدويًا أم تقليل عدد المصادر التي وجبت مراجعتها؟ --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 15:51، 6 أغسطس 2026 (ت ع م).
:::::{{ر|عباد ديرانية}} أميل إلى الانتقاء اليدوي أو البشري دون تقليل للمصادر فالمراجِع قادر على انتقاء المصدر الأنسب للمفردة، وإن كان للزملاء رأي آخر فلا أعترض، تحياتي. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:15، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَلَكَ (L1502490) ==
'''أَلَكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1502490|18بك|ويكي بيانات: L1502490]] [[ملف:Wiktionary-logo.svg|وصلة=أَلَكَ|18بك|صفحة ويكاموس]] · الجذر: ألك · ([[toolforge:ar-senses/review/L1502490|رابط المُفردة في الأداة]])
حذفت المرجع الأخير من المعنى الثاني لأن فيه خطأ فقد استُشهد بصفحة 132 من معجم متن اللغة وفيها (أَلَكَ لَجَأٌ يَا فلَان) وهو استشهاد خاطئ لأن (ألك) هنا استفهام وليست فعل.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:33، 5 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك وسوف نعمل على زيادة دقة ضبط المعاني المتقاربة بالأداة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:49، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: اِبْتَسَطَ (L1533014) ==
'''اِبْتَسَطَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533014|18بك|ويكي بيانات: L1533014]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْتَسَطَ|18بك|صفحة ويكاموس]] · الجذر: بسط · ([[toolforge:ar-senses/review/L1533014|رابط المُفردة في الأداة]])
غير موثقة، لا يوجد فيها مصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:04، 5 أغسطس 2026 (ت ع م)
:{{ر|ForzaGreen}} حالة غريبةٌ ليس فيه أي مصدر للمعنى المستخرج! --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:49، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: أَبْشَكَ (L1533037) ==
'''أَبْشَكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533037|18بك|ويكي بيانات: L1533037]] [[ملف:Wiktionary-logo.svg|وصلة=أَبْشَكَ|18بك|صفحة ويكاموس]] · الجذر: بشك · ([[toolforge:ar-senses/review/L1533037|رابط المُفردة في الأداة]])
هذه اللفظة بحاجة لمراجعة فلها عدة معان.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:50، 6 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} هل لكَ أن تُوضِحَ المقصود؟ لم أجد كلمة أبشك في المرجع أصلًا للأسف --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:52، 6 أغسطس 2026 (ت ع م).
::{{ر|عباد ديرانية}} وجدت هذا ('''أبشك''' الكلام: كذب فيه: تخرص فيه كاذبًا.) في معجم متن اللغة ج=1 ص=299، وهذا أيضا (وبَشَكَ الْكَلَامَ يَبْشُكه بَشْكًا و'''أبشَكه''': تَخَرَّصهُ كَاذِبًا،) في لسان العرب ج=10 ص=400، ولم أجد أن معناها '''أسرع'''، تحياتي. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:43، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَاطَأَ (L1496404) ==
'''بَاطَأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1496404|18بك|ويكي بيانات: L1496404]] [[ملف:Wiktionary-logo.svg|وصلة=بَاطَأَ|18بك|صفحة ويكاموس]] · الجذر: بطأ · ([[toolforge:ar-senses/review/L1496404|رابط المُفردة في الأداة]])
لا يوجد التصريف في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:43، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَبْطَحَ (L1533063) ==
'''أَبْطَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533063|18بك|ويكي بيانات: L1533063]] [[ملف:Wiktionary-logo.svg|وصلة=أَبْطَحَ|18بك|صفحة ويكاموس]] · الجذر: بطح · ([[toolforge:ar-senses/review/L1533063|رابط المُفردة في الأداة]])
غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:47، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَطَّحَ (L1533066) ==
'''بَطَّحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533066|18بك|ويكي بيانات: L1533066]] [[ملف:Wiktionary-logo.svg|وصلة=بَطَّحَ|18بك|صفحة ويكاموس]] · الجذر: بطح · ([[toolforge:ar-senses/review/L1533066|رابط المُفردة في الأداة]])
هل هي بطَح أم بطّح؟<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:48، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَطْرَقَ (L1533070) ==
'''تَبَطْرَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533070|18بك|ويكي بيانات: L1533070]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَطْرَقَ|18بك|صفحة ويكاموس]] · الجذر: بطرق · ([[toolforge:ar-senses/review/L1533070|رابط المُفردة في الأداة]])
هذا الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:58، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَهُؤَ (L1545462) ==
'''بَهُؤَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1545462|18بك|ويكي بيانات: L1545462]] [[ملف:Wiktionary-logo.svg|وصلة=بَهُؤَ|18بك|صفحة ويكاموس]] · الجذر: بهأ · ([[toolforge:ar-senses/review/L1545462|رابط المُفردة في الأداة]])
معناها (أنس) كما في لسان العرب ج=1 ص=35 ومعجم متن اللغة ج=1 ص=353.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:29، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَاهَتَ (L1533268) ==
'''تَبَاهَتَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533268|18بك|ويكي بيانات: L1533268]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَاهَتَ|18بك|صفحة ويكاموس]] · الجذر: بهت · ([[toolforge:ar-senses/review/L1533268|رابط المُفردة في الأداة]])
حسنتُ المعنى وأضفت مصدرين.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:01، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَعِرَ (L1544067) ==
'''بَعِرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544067|18بك|ويكي بيانات: L1544067]] [[ملف:Wiktionary-logo.svg|وصلة=بَعِرَ|18بك|صفحة ويكاموس]] · الجذر: بعر · ([[toolforge:ar-senses/review/L1544067|رابط المُفردة في الأداة]])
'''[[بَعِرَ]]''' الجمل بالكسر صار بعيرا كما في القاموس المحيط ص=352.
المفردة (بَعَرَ) وهي موجودة في المشروع '''[[بَعَرَ]]''' فيلزم تحديثها أو حذفها لأنها خاطئة انظر القاموس المحيط ص=694 وإنشاء صفحة جديدة ببيانات صحيحة هي البيانات الموجودة في الأداة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:31، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَعَّقَ (L1533113) ==
'''بَعَّقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533113|18بك|ويكي بيانات: L1533113]] [[ملف:Wiktionary-logo.svg|وصلة=بَعَّقَ|18بك|صفحة ويكاموس]] · الجذر: بعق · ([[toolforge:ar-senses/review/L1533113|رابط المُفردة في الأداة]])
هل هي بَعَّقَ بالتشديد أم بَعَقَ بالتخفيف؟<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:02، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَغْزَلَ (L1533126) ==
'''تَبَغْزَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533126|18بك|ويكي بيانات: L1533126]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَغْزَلَ|18بك|صفحة ويكاموس]] · الجذر: بغزل · ([[toolforge:ar-senses/review/L1533126|رابط المُفردة في الأداة]])
المعنى الصحيح '''تبختر''' وله شواهد في أربعة معاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:13، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَقَّمَ (L1533154) ==
'''بَقَّمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533154|18بك|ويكي بيانات: L1533154]] [[ملف:Wiktionary-logo.svg|وصلة=بَقَّمَ|18بك|صفحة ويكاموس]] · الجذر: بقم · ([[toolforge:ar-senses/review/L1533154|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:44، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَقَّمَ (L1533153) ==
'''تَبَقَّمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533153|18بك|ويكي بيانات: L1533153]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَقَّمَ|18بك|صفحة ويكاموس]] · الجذر: بقم · ([[toolforge:ar-senses/review/L1533153|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:50، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَكِئَ (L1543356) ==
'''بَكِئَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543356|18بك|ويكي بيانات: L1543356]] [[ملف:Wiktionary-logo.svg|وصلة=بَكِئَ|18بك|صفحة ويكاموس]] · الجذر: بكأ · ([[toolforge:ar-senses/review/L1543356|رابط المُفردة في الأداة]])
حذفت المعنى الأول لأنه غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:13، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْتَلَتَ (L1533174) ==
'''اِبْتَلَتَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533174|18بك|ويكي بيانات: L1533174]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْتَلَتَ|18بك|صفحة ويكاموس]] · الجذر: بلت · ([[toolforge:ar-senses/review/L1533174|رابط المُفردة في الأداة]])
المفردة غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:35، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَلْدَحَ (L1533193) ==
'''تَبَلْدَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533193|18بك|ويكي بيانات: L1533193]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَلْدَحَ|18بك|صفحة ويكاموس]] · الجذر: بلدح · ([[toolforge:ar-senses/review/L1533193|رابط المُفردة في الأداة]])
أضفت المعنى الثاني، لم تستخرجه الأداة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:54، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْلَنْدَكَ (L1533194) ==
'''اِبْلَنْدَكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533194|18بك|ويكي بيانات: L1533194]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْلَنْدَكَ|18بك|صفحة ويكاموس]] · الجذر: بلدك · ([[toolforge:ar-senses/review/L1533194|رابط المُفردة في الأداة]])
المعنى خاطئ، والمفردة غير موجودة في المصدر.
:المعنى الصحيح ('''اتسع''') موجود في أربعة معاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:00، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَلَّرَ (L1533196) ==
'''تَبَلَّرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533196|18بك|ويكي بيانات: L1533196]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَلَّرَ|18بك|صفحة ويكاموس]] · الجذر: بلر · ([[toolforge:ar-senses/review/L1533196|رابط المُفردة في الأداة]])
إملاء المفردة خاطئ، والصحيح ('''تَرَبَّل''') كما في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:08، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَقَّعَ (L1533145) ==
'''بَقَّعَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533145|18بك|ويكي بيانات: L1533145]] [[ملف:Wiktionary-logo.svg|وصلة=بَقَّعَ|18بك|صفحة ويكاموس]] · الجذر: بقع · ([[toolforge:ar-senses/review/L1533145|رابط المُفردة في الأداة]])
حذفت المعنى الرابع لأنه ورد بالتخفيف.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:18، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِنْبَقَّ (L1533147) ==
'''اِنْبَقَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533147|18بك|ويكي بيانات: L1533147]] [[ملف:Wiktionary-logo.svg|وصلة=اِنْبَقَّ|18بك|صفحة ويكاموس]] · الجذر: بقق · ([[toolforge:ar-senses/review/L1533147|رابط المُفردة في الأداة]])
المعنى خاطئ ولا شواهد عليه في المعاجم والمفردة الموجودة ('''انبعق''') وليس انبق.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:38، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَلَعَ (L1480240) ==
'''بَلَعَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1480240|18بك|ويكي بيانات: L1480240]] [[ملف:Wiktionary-logo.svg|وصلة=بَلَعَ|18بك|صفحة ويكاموس]] · الجذر: بلع · ([[toolforge:ar-senses/review/L1480240|رابط المُفردة في الأداة]])
خطأ في التشكيل فالفعل بَلِعَ وليس بَلَعَ كما في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:34، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْتَلَقَ (L1533220) ==
'''اِبْتَلَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533220|18بك|ويكي بيانات: L1533220]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْتَلَقَ|18بك|صفحة ويكاموس]] · الجذر: بلق · ([[toolforge:ar-senses/review/L1533220|رابط المُفردة في الأداة]])
لم أجد المفردة في المعاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:06، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَلُقَ (L1543358) ==
'''بَلُقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543358|18بك|ويكي بيانات: L1543358]] [[ملف:Wiktionary-logo.svg|وصلة=بَلُقَ|18بك|صفحة ويكاموس]] · الجذر: بلق · ([[toolforge:ar-senses/review/L1543358|رابط المُفردة في الأداة]])
المفردة بالكسر وليس بالضم، انظر '''[[بَلِقَ]]'''.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:52، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْذَارَّ (L1534290) ==
'''اِحْذَارَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534290|18بك|ويكي بيانات: L1534290]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْذَارَّ|18بك|صفحة ويكاموس]] · الجذر: حذر · ([[toolforge:ar-senses/review/L1534290|رابط المُفردة في الأداة]])
خلل في صندوق المعلومات.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:49، 9 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَاتَنَ (L1534214) ==
'''تَحَاتَنَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534214|18بك|ويكي بيانات: L1534214]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَاتَنَ|18بك|صفحة ويكاموس]] · الجذر: حتن · ([[toolforge:ar-senses/review/L1534214|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لأنه مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 12:31، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَتَنَ (L1534213) ==
'''اِحْتَتَنَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534213|18بك|ويكي بيانات: L1534213]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَتَنَ|18بك|صفحة ويكاموس]] · الجذر: حتن · ([[toolforge:ar-senses/review/L1534213|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 12:37، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَاتَّ (L1496477) ==
'''تَحَاتَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1496477|18بك|ويكي بيانات: L1496477]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَاتَّ|18بك|صفحة ويكاموس]] · الجذر: حتت · ([[toolforge:ar-senses/review/L1496477|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:36، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْزَوْزَى (L1534387) ==
'''اِحْزَوْزَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534387|18بك|ويكي بيانات: L1534387]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْزَوْزَى|18بك|صفحة ويكاموس]] · الجذر: حزو · ([[toolforge:ar-senses/review/L1534387|رابط المُفردة في الأداة]])
المفردة غير موجودة في المصدر ولها أكثر من معنى في المصادر الأخرى.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:02، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَذَّقَ (L1484084) ==
'''تَحَذَّقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1484084|18بك|ويكي بيانات: L1484084]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَذَّقَ|18بك|صفحة ويكاموس]] · الجذر: حذق · ([[toolforge:ar-senses/review/L1484084|رابط المُفردة في الأداة]])
المفردة غير موجودة في المصادر الموجودة، استبدلتها بمصادر أخرى.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:02، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَذَّقَ (L1534295) ==
'''حَذَّقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534295|18بك|ويكي بيانات: L1534295]] [[ملف:Wiktionary-logo.svg|وصلة=حَذَّقَ|18بك|صفحة ويكاموس]] · الجذر: حذق · ([[toolforge:ar-senses/review/L1534295|رابط المُفردة في الأداة]])
لم أجد الفعل المتعدي في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:14، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَذِقَ (L1546050) ==
'''حَذِقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1546050|18بك|ويكي بيانات: L1546050]] [[ملف:Wiktionary-logo.svg|وصلة=حَذِقَ|18بك|صفحة ويكاموس]] · الجذر: حذق · ([[toolforge:ar-senses/review/L1546050|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لأنه تفسير لمفردة فرس وهو مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:56، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَحْزَرَ (L1534363) ==
'''أَحْزَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534363|18بك|ويكي بيانات: L1534363]] [[ملف:Wiktionary-logo.svg|وصلة=أَحْزَرَ|18بك|صفحة ويكاموس]] · الجذر: حزر · ([[toolforge:ar-senses/review/L1534363|رابط المُفردة في الأداة]])
حذفت المعنى الأول لأنه خاطئ وغير مرتبط بالمفردة بل يرتبط بـ (أحزّ).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:06، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَزَّ (L1534366) ==
'''اِحْتَزَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534366|18بك|ويكي بيانات: L1534366]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَزَّ|18بك|صفحة ويكاموس]] · الجذر: حزز · ([[toolforge:ar-senses/review/L1534366|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:12، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَزْمَرَ (L1534382) ==
'''حَزْمَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534382|18بك|ويكي بيانات: L1534382]] [[ملف:Wiktionary-logo.svg|وصلة=حَزْمَرَ|18بك|صفحة ويكاموس]] · الجذر: حزمر · ([[toolforge:ar-senses/review/L1534382|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لارتباطه بـ ([[حَزْفَرَ]]).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:56، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَاسَى (L1534416) ==
'''تَحَاسَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534416|18بك|ويكي بيانات: L1534416]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَاسَى|18بك|صفحة ويكاموس]] · الجذر: حسو · ([[toolforge:ar-senses/review/L1534416|رابط المُفردة في الأداة]])
غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:10، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَاسَى (L1534418) ==
'''حَاسَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534418|18بك|ويكي بيانات: L1534418]] [[ملف:Wiktionary-logo.svg|وصلة=حَاسَى|18بك|صفحة ويكاموس]] · الجذر: حسو · ([[toolforge:ar-senses/review/L1534418|رابط المُفردة في الأداة]])
غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:16، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَاقَ (L1534738) ==
'''اِحْتَاقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534738|18بك|ويكي بيانات: L1534738]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَاقَ|18بك|صفحة ويكاموس]] · الجذر: حيق · ([[toolforge:ar-senses/review/L1534738|رابط المُفردة في الأداة]])
دمجت المعنيين لأنها مكرران.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 04:15، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَفَظَ (L1485699) ==
'''اِحْتَفَظَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1485699|18بك|ويكي بيانات: L1485699]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَفَظَ|18بك|صفحة ويكاموس]] · الجذر: حفظ · ([[toolforge:ar-senses/review/L1485699|رابط المُفردة في الأداة]])
لم تضع الأداة بعض أرقام الصفحات والأجزاء.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:19، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَمْحَمَ (L1476725) ==
'''حَمْحَمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1476725|18بك|ويكي بيانات: L1476725]] [[ملف:Wiktionary-logo.svg|وصلة=حَمْحَمَ|18بك|صفحة ويكاموس]] · الجذر: حمحم · ([[toolforge:ar-senses/review/L1476725|رابط المُفردة في الأداة]])
خلل في صندوق المعلومات.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:11، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَيَّفَ (L1534760) ==
'''تَحَيَّفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534760|18بك|ويكي بيانات: L1534760]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَيَّفَ|18بك|صفحة ويكاموس]] · الجذر: حيف · ([[toolforge:ar-senses/review/L1534760|رابط المُفردة في الأداة]])
دمجت المعنيين.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:38، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَشَّكَ (L1534439) ==
'''تَحَشَّكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534439|18بك|ويكي بيانات: L1534439]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَشَّكَ|18بك|صفحة ويكاموس]] · الجذر: حشك · ([[toolforge:ar-senses/review/L1534439|رابط المُفردة في الأداة]])
حرف الشين مشدد.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:12، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْوَالَّ (L1534743) ==
'''اِحْوَالَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534743|18بك|ويكي بيانات: L1534743]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْوَالَّ|18بك|صفحة ويكاموس]] · الجذر: حول · ([[toolforge:ar-senses/review/L1534743|رابط المُفردة في الأداة]])
خلل في صندوق المعلومات.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:59، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِسْتَحَاضَ (L1534730) ==
'''اِسْتَحَاضَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534730|18بك|ويكي بيانات: L1534730]] [[ملف:Wiktionary-logo.svg|وصلة=اِسْتَحَاضَ|18بك|صفحة ويكاموس]] · الجذر: حوض · ([[toolforge:ar-senses/review/L1534730|رابط المُفردة في الأداة]])
الموجود في المصادر استحوض وليس استحاض.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:05، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَاشَ (L1534721) ==
'''اِحْتَاشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534721|18بك|ويكي بيانات: L1534721]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَاشَ|18بك|صفحة ويكاموس]] · الجذر: حوش · ([[toolforge:ar-senses/review/L1534721|رابط المُفردة في الأداة]])
التصريف الموجود في المصادر (احتوش) وليس احتاش.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:34، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِسْتَحَاسَ (L1534716) ==
'''اِسْتَحَاسَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534716|18بك|ويكي بيانات: L1534716]] [[ملف:Wiktionary-logo.svg|وصلة=اِسْتَحَاسَ|18بك|صفحة ويكاموس]] · الجذر: حوس · ([[toolforge:ar-senses/review/L1534716|رابط المُفردة في الأداة]])
استحوس وليس استحاس كما في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:51، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَزْأَلَ (L1534358) ==
'''حَزْأَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534358|18بك|ويكي بيانات: L1534358]] [[ملف:Wiktionary-logo.svg|وصلة=حَزْأَلَ|18بك|صفحة ويكاموس]] · الجذر: حزأل · ([[toolforge:ar-senses/review/L1534358|رابط المُفردة في الأداة]])
مفردة خاطئة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 12:52، 14 أغسطس 2026 (ت ع م)
:فعلا، يبدو أن المُفردة حَزْأَلَ لا توجد. في جدول الأفعال، عندنا فعل واحد من الجذر "ح ز أ ل"، وهو على وزن '''فعلل'''، أي حَزْأَلَ. لكن يبدو أن هذا خاطئ، و أن الوزن الصحيح هو افعللّ، أي احْزَأَلَّ، وهو الذي ذُكِر في معجم [https://app.turath.io/book/7030?page=14881 تاج العروس]. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 21:19، 14 أغسطس 2026 (ت ع م)
:ورد في اللسان أيضًا احزألَّ بمعنى ارتفع وبمعنى اجتمع. [[مستخدم:Michel Bakni|Michel Bakni]] ([[نقاش المستخدم:Michel Bakni|نقاش]]) 21:50، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَنَّشَ (L1534669) ==
'''حَنَّشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534669|18بك|ويكي بيانات: L1534669]] [[ملف:Wiktionary-logo.svg|وصلة=حَنَّشَ|18بك|صفحة ويكاموس]] · الجذر: حنش · ([[toolforge:ar-senses/review/L1534669|رابط المُفردة في الأداة]])
هل هي حَنَّشَ أم حَنَشَ؟ وأظن أن لها معان أخرى.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:28، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْخَنَدَّ (L1532850) ==
'''اِبْخَنَدَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1532850|18بك|ويكي بيانات: L1532850]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْخَنَدَّ|18بك|صفحة ويكاموس]] · الجذر: بخند · ([[toolforge:ar-senses/review/L1532850|رابط المُفردة في الأداة]])
الفعل في المرجع اخْبَنْدَى، لا وجود المفردة اِبْخَنَدَّ--[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 18:52، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَمْيَرَ (L1534650) ==
'''تَحَمْيَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534650|18بك|ويكي بيانات: L1534650]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَمْيَرَ|18بك|صفحة ويكاموس]] · الجذر: حمير · ([[toolforge:ar-senses/review/L1534650|رابط المُفردة في الأداة]])
خطأ في استخراج المعنى، معنى تحمير أي ساء خلقه كما في المصادر أم هذه فيجب أن تكون بغير الياء أي تَحَمَّر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:02، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَبَشَ (L1534178) ==
'''اِحْتَبَشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534178|18بك|ويكي بيانات: L1534178]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَبَشَ|18بك|صفحة ويكاموس]] · الجذر: حبش · ([[toolforge:ar-senses/review/L1534178|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:38، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَثَّرَ (L1534223) ==
'''تَحَثَّرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534223|18بك|ويكي بيانات: L1534223]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَثَّرَ|18بك|صفحة ويكاموس]] · الجذر: حثر · ([[toolforge:ar-senses/review/L1534223|رابط المُفردة في الأداة]])
المعنى لفعل حثر، الرجاء إصلاحه.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:52، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَثْرَفَ (L1534226) ==
'''حَثْرَفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534226|18بك|ويكي بيانات: L1534226]] [[ملف:Wiktionary-logo.svg|وصلة=حَثْرَفَ|18بك|صفحة ويكاموس]] · الجذر: حثرف · ([[toolforge:ar-senses/review/L1534226|رابط المُفردة في الأداة]])
المعنى الصحيح زعزعه وحركه، انظر تاج العروس جزء 23 صفحة 118.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:09، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَظْرَبَ (L1534501) ==
'''تَحَظْرَبَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534501|18بك|ويكي بيانات: L1534501]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَظْرَبَ|18بك|صفحة ويكاموس]] · الجذر: حظرب · ([[toolforge:ar-senses/review/L1534501|رابط المُفردة في الأداة]])
دًمج المعنيان ووُضعت أمثلة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:32، 16 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَافَلَ (L1534527) ==
'''حَافَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534527|18بك|ويكي بيانات: L1534527]] [[ملف:Wiktionary-logo.svg|وصلة=حَافَلَ|18بك|صفحة ويكاموس]] · الجذر: حفل · ([[toolforge:ar-senses/review/L1534527|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر المذكورة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:59، 16 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْقَوْقَفَ (L1489579) ==
'''اِحْقَوْقَفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1489579|18بك|ويكي بيانات: L1489579]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْقَوْقَفَ|18بك|صفحة ويكاموس]] · الجذر: حقف · ([[toolforge:ar-senses/review/L1489579|رابط المُفردة في الأداة]])
المعاني الأربعة مكررة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:52، 17 أغسطس 2026 (ت ع م)
== معجم مقاييس اللغة ==
مرحبا بالزملاء، روابط الكتاب الموجودة في الأداة غير دقيقة وقد كنت أظن أن الاختلاف في مفردة أو اثنتين لكن تبين لي أنها غير دقيقة في جميع المفردات، رقم الصفة صحيح ولكن الرابط بعيد عن الصفحة، تحياتي لكم. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:56، 17 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَكَرَ (L1478743) ==
'''اِحْتَكَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1478743|18بك|ويكي بيانات: L1478743]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَكَرَ|18بك|صفحة ويكاموس]] · الجذر: حكر · ([[toolforge:ar-senses/review/L1478743|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:42، 17 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَكَّرَ (L1534555) ==
'''حَكَّرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534555|18بك|ويكي بيانات: L1534555]] [[ملف:Wiktionary-logo.svg|وصلة=حَكَّرَ|18بك|صفحة ويكاموس]] · الجذر: حكر · ([[toolforge:ar-senses/review/L1534555|رابط المُفردة في الأداة]])
أشك بوجود المفردة المشكلة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:56، 17 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَمِضَ (L1543549) ==
'''حَمِضَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543549|18بك|ويكي بيانات: L1543549]] [[ملف:Wiktionary-logo.svg|وصلة=حَمِضَ|18بك|صفحة ويكاموس]] · الجذر: حمض · ([[toolforge:ar-senses/review/L1543549|رابط المُفردة في الأداة]])
المعاني مختلطة لعدم وضوح حركة الميم في الفعل.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:57، 19 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَسَى (L1486741) ==
'''أَسَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1486741|18بك|ويكي بيانات: L1486741]] [[ملف:Wiktionary-logo.svg|وصلة=أَسَى|18بك|صفحة ويكاموس]] · الجذر: أسي · ([[toolforge:ar-senses/review/L1486741|رابط المُفردة في الأداة]])
الفعل في المراجع أسا من الجذر أسو.--[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 20:03، 20 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِخْتَبَلَ (L1534805) ==
'''اِخْتَبَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534805|18بك|ويكي بيانات: L1534805]] [[ملف:Wiktionary-logo.svg|وصلة=اِخْتَبَلَ|18بك|صفحة ويكاموس]] · الجذر: خبل · ([[toolforge:ar-senses/review/L1534805|رابط المُفردة في الأداة]])
المعنى الثاني مكرر، حذفته.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:03، 21 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَخَاتَلَ (L1487389) ==
'''تَخَاتَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1487389|18بك|ويكي بيانات: L1487389]] [[ملف:Wiktionary-logo.svg|وصلة=تَخَاتَلَ|18بك|صفحة ويكاموس]] · الجذر: ختل · ([[toolforge:ar-senses/review/L1487389|رابط المُفردة في الأداة]])
دُمِج المعنيان.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:09، 21 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَخَاجَأَ (L1534840) ==
'''تَخَاجَأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534840|18بك|ويكي بيانات: L1534840]] [[ملف:Wiktionary-logo.svg|وصلة=تَخَاجَأَ|18بك|صفحة ويكاموس]] · الجذر: خجأ · ([[toolforge:ar-senses/review/L1534840|رابط المُفردة في الأداة]])
لاحظت التباسا أو خلطا بين (تخاجأ وتخاجى وتخاجا).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:22، 22 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَخَارَقَ (L1534942) ==
'''تَخَارَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534942|18بك|ويكي بيانات: L1534942]] [[ملف:Wiktionary-logo.svg|وصلة=تَخَارَقَ|18بك|صفحة ويكاموس]] · الجذر: خرق · ([[toolforge:ar-senses/review/L1534942|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:36، 22 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَآ (L1545136) ==
'''دَآ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1545136|18بك|ويكي بيانات: L1545136]] [[ملف:Wiktionary-logo.svg|وصلة=دَآ|18بك|صفحة ويكاموس]] · الجذر: دأو · ([[toolforge:ar-senses/review/L1545136|رابط المُفردة في الأداة]])
الفعل الصحيح (دَأَى) كما في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:47، 22 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِدْحَوَى (L1535316) ==
'''اِدْحَوَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535316|18بك|ويكي بيانات: L1535316]] [[ملف:Wiktionary-logo.svg|وصلة=اِدْحَوَى|18بك|صفحة ويكاموس]] · الجذر: دحو · ([[toolforge:ar-senses/review/L1535316|رابط المُفردة في الأداة]])
استبدلت المصدر بمصادر أكثر دقة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:49، 23 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَدَرَّهَ (L1535387) ==
'''تَدَرَّهَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535387|18بك|ويكي بيانات: L1535387]] [[ملف:Wiktionary-logo.svg|وصلة=تَدَرَّهَ|18بك|صفحة ويكاموس]] · الجذر: دره · ([[toolforge:ar-senses/review/L1535387|رابط المُفردة في الأداة]])
دره وليس تدره.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:55، 24 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَشَا (L1544094) ==
'''دَشَا''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544094|18بك|ويكي بيانات: L1544094]] [[ملف:Wiktionary-logo.svg|وصلة=دَشَا|18بك|صفحة ويكاموس]] · الجذر: دشو · ([[toolforge:ar-senses/review/L1544094|رابط المُفردة في الأداة]])
أضفت المعنى ووثقته من المعاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:54، 25 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَغِرَ (L1543752) ==
'''دَغِرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543752|18بك|ويكي بيانات: L1543752]] [[ملف:Wiktionary-logo.svg|وصلة=دَغِرَ|18بك|صفحة ويكاموس]] · الجذر: دغر · ([[toolforge:ar-senses/review/L1543752|رابط المُفردة في الأداة]])
للمفردة أكثر من معنى غير مذكور، ولا أدري هي بالكسر أم بالفتح دَغَرَ دَغِرَ.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:03، 25 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَاغَصَ (L1535445) ==
'''دَاغَصَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535445|18بك|ويكي بيانات: L1535445]] [[ملف:Wiktionary-logo.svg|وصلة=دَاغَصَ|18بك|صفحة ويكاموس]] · الجذر: دغص · ([[toolforge:ar-senses/review/L1535445|رابط المُفردة في الأداة]])
حذفت المعاني الثلاثة الأخيرة لأنها مختلطة بمفردة (دَاغَشَ).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:42، 25 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِدَّمَسَ (L1535554) ==
'''اِدَّمَسَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535554|18بك|ويكي بيانات: L1535554]] [[ملف:Wiktionary-logo.svg|وصلة=اِدَّمَسَ|18بك|صفحة ويكاموس]] · الجذر: دمس · ([[toolforge:ar-senses/review/L1535554|رابط المُفردة في الأداة]])
حذفت المصدرين وأضفت تهذيب اللغة لورود المفردة فيه ج=12 ص=263.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:13، 28 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَدَمْشَقَ (L1535561) ==
'''تَدَمْشَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535561|18بك|ويكي بيانات: L1535561]] [[ملف:Wiktionary-logo.svg|وصلة=تَدَمْشَقَ|18بك|صفحة ويكاموس]] · الجذر: دمشق · ([[toolforge:ar-senses/review/L1535561|رابط المُفردة في الأداة]])
المفردة غير موجودة والمثال غير موجود.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:29، 28 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَنَّأَ (L1535578) ==
'''دَنَّأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535578|18بك|ويكي بيانات: L1535578]] [[ملف:Wiktionary-logo.svg|وصلة=دَنَّأَ|18بك|صفحة ويكاموس]] · الجذر: دنأ · ([[toolforge:ar-senses/review/L1535578|رابط المُفردة في الأداة]])
لا أظن الفعل مهموزا.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:19، 28 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِدَّنَى (L1535595) ==
'''اِدَّنَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535595|18بك|ويكي بيانات: L1535595]] [[ملف:Wiktionary-logo.svg|وصلة=اِدَّنَى|18بك|صفحة ويكاموس]] · الجذر: دنو · ([[toolforge:ar-senses/review/L1535595|رابط المُفردة في الأداة]])
المثال في صفحة 273 وأظنه بمعنى مختلف.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:43، 29 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَبْشَبَ (L1537222) ==
'''شَبْشَبَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537222|18بك|ويكي بيانات: L1537222]] [[ملف:Wiktionary-logo.svg|وصلة=شَبْشَبَ|18بك|صفحة ويكاموس]] · الجذر: شبشب · ([[toolforge:ar-senses/review/L1537222|رابط المُفردة في الأداة]])
حذف المعنى الثاني لأنه خطأ من الأداة بسبب وجود خطأ مطبعي في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:13، 31 أغسطس 2026 (ت ع م)
:هل تحويل حركات من فتحة الى الكسرة يحل مشكلة؟ [[مستخدم:يزن البلوي|يزن البلوي]] ([[نقاش المستخدم:يزن البلوي|نقاش]]) 13:32، 1 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِنْشَبَحَ (L1537214) ==
'''اِنْشَبَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537214|18بك|ويكي بيانات: L1537214]] [[ملف:Wiktionary-logo.svg|وصلة=اِنْشَبَحَ|18بك|صفحة ويكاموس]] · الجذر: شبح · ([[toolforge:ar-senses/review/L1537214|رابط المُفردة في الأداة]])
استبدلت مقاييس اللغة بجمهرة اللغة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:33، 2 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَاجَّ (L1537248) ==
'''شَاجَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537248|18بك|ويكي بيانات: L1537248]] [[ملف:Wiktionary-logo.svg|وصلة=شَاجَّ|18بك|صفحة ويكاموس]] · الجذر: شجج · ([[toolforge:ar-senses/review/L1537248|رابط المُفردة في الأداة]])
استخراج خاطئ، لم أجد التصريف في بقية المراجع.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:34، 4 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَرَّى (L1485717) ==
'''تَبَرَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1485717|18بك|ويكي بيانات: L1485717]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَرَّى|18بك|صفحة ويكاموس]] · الجذر: بري · ([[toolforge:ar-senses/review/L1485717|رابط المُفردة في الأداة]])
الفعل في المراجع "تَبرأ" من جذر برأ وليس "تَبَرَّى" من جذر بري --[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 12:29، 5 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَحَطَ (L1489005) ==
'''شَحَطَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1489005|18بك|ويكي بيانات: L1489005]] [[ملف:Wiktionary-logo.svg|وصلة=شَحَطَ|18بك|صفحة ويكاموس]] · الجذر: شحط · ([[toolforge:ar-senses/review/L1489005|رابط المُفردة في الأداة]])
خلل وأخطاء غير معروفة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:19، 5 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَشْحَنَ (L1537270) ==
'''أَشْحَنَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537270|18بك|ويكي بيانات: L1537270]] [[ملف:Wiktionary-logo.svg|وصلة=أَشْحَنَ|18بك|صفحة ويكاموس]] · الجذر: شحن · ([[toolforge:ar-senses/review/L1537270|رابط المُفردة في الأداة]])
المعنى اأخير لـ(أحشن) وليس لـ(أشحن).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:29، 6 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَرَّى (L1537351) ==
'''شَرَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537351|18بك|ويكي بيانات: L1537351]] [[ملف:Wiktionary-logo.svg|وصلة=شَرَّى|18بك|صفحة ويكاموس]] · الجذر: شري · ([[toolforge:ar-senses/review/L1537351|رابط المُفردة في الأداة]])
لا أعلم إن كان حرف الراء مشددا أم لا.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:01، 7 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَرِفَ (L1544475) ==
'''شَرِفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544475|18بك|ويكي بيانات: L1544475]] [[ملف:Wiktionary-logo.svg|وصلة=شَرِفَ|18بك|صفحة ويكاموس]] · الجذر: شرف · ([[toolforge:ar-senses/review/L1544475|رابط المُفردة في الأداة]])
هل هي بضم الراء أم بكسرها؟<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:54، 7 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَشْدَى (L1537300) ==
'''أَشْدَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537300|18بك|ويكي بيانات: L1537300]] [[ملف:Wiktionary-logo.svg|وصلة=أَشْدَى|18بك|صفحة ويكاموس]] · الجذر: شدو · ([[toolforge:ar-senses/review/L1537300|رابط المُفردة في الأداة]])
استخراج الأداة خاطئ.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 23:44، 8 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: جَاجَ (L1544958) ==
'''جَاجَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544958|18بك|ويكي بيانات: L1544958]] [[ملف:Wiktionary-logo.svg|وصلة=جَاجَ|18بك|صفحة ويكاموس]] · الجذر: جوج · ([[toolforge:ar-senses/review/L1544958|رابط المُفردة في الأداة]])
الفعل في المرجع جِيج من جذر جيج.--[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 12:36، 10 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: جَاثَ (L1544257) ==
'''جَاثَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544257|18بك|ويكي بيانات: L1544257]] [[ملف:Wiktionary-logo.svg|وصلة=جَاثَ|18بك|صفحة ويكاموس]] · الجذر: جوث · ([[toolforge:ar-senses/review/L1544257|رابط المُفردة في الأداة]])
الفعل في المراجع "جوث"، وهناك فعل أخر "جأث" بمعنى آخر، لكن لم أجد المفردة "جاث" بهذا الشكل. --[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 12:53، 10 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَسَى (L1495990) ==
'''حَسَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1495990|18بك|ويكي بيانات: L1495990]] [[ملف:Wiktionary-logo.svg|وصلة=حَسَى|18بك|صفحة ويكاموس]] · الجذر: حسي · ([[toolforge:ar-senses/review/L1495990|رابط المُفردة في الأداة]])
<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. -->الفعل حَسَا من جذر حسو وليس حسى.--[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 11:39، 11 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْرَنْبَى (L1534310) ==
'''اِحْرَنْبَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534310|18بك|ويكي بيانات: L1534310]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْرَنْبَى|18بك|صفحة ويكاموس]] · الجذر: حربي · ([[toolforge:ar-senses/review/L1534310|رابط المُفردة في الأداة]])
<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. -->أعتقد أن الجذر الصحيح "حربأ" وليس "حربي" حيث أن أصل الفعل احرنبأ، وأحيانا تقلب الهمزة إلى ألف مقصورة في أخر الفعل. --[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 11:47، 11 سبتمبر 2026 (ت ع م)
ifr8k60diasyo5owig91oek6hykehvh
1159148
1159147
2026-09-11T11:55:03Z
إسلام
12622
/* بلاغ من أداة مراجعة المعاني: أَحَاذَ (L1534708) */ قسم جديد
1159148
wikitext
text/x-wiki
{{رأس صفحة نقاش}}
== بلاغ من أداة مراجعة المعاني: حَلَّى (L1534604) ==
'''حَلَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534604|18بك|ويكي بيانات: L1534604]] [[ملف:Wiktionary-logo.svg|وصلة=حَلَّى|18بك|صفحة ويكاموس]] · الجذر: حلو · ([[toolforge:ar-senses/review/L1534604|رابط المُفردة في الأداة]])
إبلاغ من الزميل {{مس|رِفْد}}: ''لا يمكن نشرها في ويكاموس عند الضغط على زر النشر يظهر: "خطأ: الصفحة موجودة بالفعل".'' --[[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 11:27، 27 يوليو 2026 (ت ع م)
:شكرا لك @[[مستخدم:رِفْد|رِفْد]] على الإبلاغ. المشكلة في الفعل حَلَّى (وأفعال آخرين) أَنَّه يُوَلَّدُ من جذرين: ح-ل-ي و ح-ل-و. في ويكي بيانات توجد وحدتان معجميتان، واحدة لكل فعل، لكن في ويكاموس لا يُمكن إنشاء صفحتين بنفس الاسم. سأفكر في حل لهذه المشكلة وأوافيك بالجديد. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 11:28، 27 يوليو 2026 (ت ع م)
::حالة أخرى حيث يشترك جذران في نفس صيغة الفعل:
::* جذر ت-ل-و على وزن تفعّل => [[تَتَلَّى]] ([https://ar-senses.toolforge.org/review/L1533461 رابط المُفردة في الأداة]).
::* جذر ت-ل-ي على وزن تفعّل => [[تَتَلَّى]]
::[[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 11:42، 27 يوليو 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِسْتَجَاشَ (L1534157) ==
'''اِسْتَجَاشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534157|18بك|ويكي بيانات: L1534157]] [[ملف:Wiktionary-logo.svg|وصلة=اِسْتَجَاشَ|18بك|صفحة ويكاموس]] · الجذر: جيش · ([[toolforge:ar-senses/review/L1534157|رابط المُفردة في الأداة]])
المعنى الثاني غير موجود في المصدر في صفحة المفردة (ص=603) والحديث الموجود في صفحة 115 غير مفسر بهذا المعنى أيضا. --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:40، 27 يوليو 2026 (ت ع م)
<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. -->
:{{ر|أبو هشام}} بخصوص المعنى الثاني، رجعتُ إلى ص=603 ووجدتُ المعنى حسب الوارد في الأداة: {{اقتباس مضمن|استجاش الأمير من مكان كذا: طلب جيشًا وجمعه. '''و- ت القدر: غلت.'''}}
:{{ر|Michel Bakni}} بخصوص المعنى الثالث (ص=115)، يبدو المعنى صحيحًا لكن الأداة استَنْبَطَتْهُ من مثال وارد في المعجم لا من تعريف للكلمة، ما رأيك؟
:*الاقتباس من المصدر: {{اقتباس مضمن|فَمَرَّ الْجَيْشُ عَلَى غَطَفَانَ '''فَاسْتَجَاشُوهُمْ''' عَلَى بَنِي سُليم، فَهَزَمَتْ بَنُو سُلَيم جيشَ النُّعْمَانِ}}
:*تعريف المعنى كما استخرجَتْهُ الأداة من النص السابق: {{اقتباس مضمن|اِسْتَجَاشَ القومَ على فلان: استنفرهم وحرّضهم عليه}}
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:23، 6 أغسطس 2026 (ت ع م).
::نعم أتفق مع هذا الطرح. [[مستخدم:Michel Bakni|Michel Bakni]] ([[نقاش المستخدم:Michel Bakni|نقاش]]) 14:25، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: جَوَّهَ (L1534145) ==
'''جَوَّهَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534145|18بك|ويكي بيانات: L1534145]] [[ملف:Wiktionary-logo.svg|وصلة=جَوَّهَ|18بك|صفحة ويكاموس]] · الجذر: جوه · ([[toolforge:ar-senses/review/L1534145|رابط المُفردة في الأداة]])
المعنى بهذا التصريف خطأ، لم أعثر على جوّه فلانا أي جعله وجيها، ولم أجد جوّه السقاء أي رقعه بل وجدت جواه في معجم متن اللغة. --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:48، 27 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك، المشكلة هي أن الأداة أخذت الجذر (جَوَهَ) وألحقت به معنى الفرع (وجَّهَ أو أَوْجَهَ، كحال: أَوْجَهْتُهُ أنا ووَجَّهْتُهُ)، سوف نعمل على إصلاحها.
:{{ر|ForzaGreen}} خطوات قادمة:
:#يجب أن نتوثَّق من أن الأداة تُميِّزُ الجذر عن الفرع. في هذه الحالة، أخذت الأداة الجذر ('''جَوَهَ''') وشكَّلتهُ ('''جَوَّهَ''')، ثم ألحقَتْ به معنى خاطئًا للمشتق.
:#بناءً على ما نراهُ هنا وقي حالات أخرى، نحتاج إلى '''خيار للمراجع لتعديل عنوان الصفحة'''، فلو أمكنهُ تبديل العنوان في هذه الحالة إلى '''وجَّهَ''' أو '''أَوْجَهَ''' لكان صحيحًا.
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 13:54، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: سَدَسَ (L1547049) ==
'''سَدَسَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1547049|18بك|ويكي بيانات: L1547049]] [[ملف:Wiktionary-logo.svg|وصلة=سَدَسَ|18بك|صفحة ويكاموس]] · الجذر: سدس · ([[toolforge:ar-senses/review/L1547049|رابط المُفردة في الأداة]])
المعنى الثاني مكرر، استبدلته وأضفت مصادر. --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:04، 28 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك ونعمل على التوثّق من مسألة تكرار المعاني --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 13:58، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: تَسَدَّى (L1536864) ==
'''تَسَدَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1536864|18بك|ويكي بيانات: L1536864]] [[ملف:Wiktionary-logo.svg|وصلة=تَسَدَّى|18بك|صفحة ويكاموس]] · الجذر: سدي · ([[toolforge:ar-senses/review/L1536864|رابط المُفردة في الأداة]])
خلل في رقم صفحة القاموس المحيط، ولا توجد شواهد قوية على المعنى الأول، أظن أن المفردة بحاجة لمراجعة وإعادة ترتيب المعاني.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:44، 29 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} متفّق، {{اقتباس مضمن|والحائكُ يُسَدِّي الثَّوْبَ ويَتَسَدّاه}} أي يحيكه لنفسه.
:{{ر|ForzaGreen}} يبدو أن النموذج اختلَطَ عليه الأمر أثناء دمج المعاني، ربما خصوصًا من لسان العرب ({{اقتباس مضمن|والحائكُ يُسَدِّي الثَّوْبَ ويَتَسَدّاه}})، فخرجَ بالمعنى المبتدع: {{اقتباس مضمن|تَسَدَّى الثوبَ: أقام سَداه لنفسه}}، وليس له مثيل في المصادر.
:'''الخطوات القادمة المقترحة''': أشتَبِهُ في أن النموذج يفقد موثوقيته حين دَمْجَ المعاني من عددٍ كبير من المصادر (5 مصادر في هذه الحالة)، '''أقترح وَضْعَ حدّ أعلى للمصادر التي نستخدمها في استخراج المعنى، ربما 3 للوقت الحاضر'''.
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:10، 6 أغسطس 2026 (ت ع م).
::وضع حد للمصادر آليا قد يحرم المفردة من المصدر الأقوى والأدق. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:30، 6 أغسطس 2026 (ت ع م)
:{{أصلح}} الخلل في رقم صفحة القاموس المحيط، لهذه المُفردة ولمفردات أخرى. يبدو أن المشكل كان سببه عشوائية النموذج اللغوي، إذ كان يُغيِّر رقم الصفحة في أقل من 1% من الحالات. عدّلتُ أداة توليد المعاني حتى لا يتكرر الخطأ.
:بالنسبة للمصادر، أُفضل الإبقاء عليها جميعا. سنُجرب مع {{مس|عباد ديرانية}} تعديل تعليمات النموذج لتحسين المُخْرَجات ولإصلاح مشاكل أخرى، لا سيما المعاني المُكررة. -- [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 23:47، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَسَافَدَ (L1497488) ==
'''تَسَافَدَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1497488|18بك|ويكي بيانات: L1497488]] [[ملف:Wiktionary-logo.svg|وصلة=تَسَافَدَ|18بك|صفحة ويكاموس]] · الجذر: سفد · ([[toolforge:ar-senses/review/L1497488|رابط المُفردة في الأداة]])
اكتفيت بالمعنى الأول بسبب التكرار.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 11:51، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} ملاحظة للعمل على تكرار المعاني، المعنى 1 و2 متماثلان والثاني هو الأوضح للمستخدم المعاصر --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:13، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: سَافَحَ (L1487289) ==
'''سَافَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1487289|18بك|ويكي بيانات: L1487289]] [[ملف:Wiktionary-logo.svg|وصلة=سَافَحَ|18بك|صفحة ويكاموس]] · الجذر: سفح · ([[toolforge:ar-senses/review/L1487289|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لأنه مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:42، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} حالة تكرار أخرى مؤكدة في المعنى 1 والمعنى 2 --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:14، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: تَرَأَّمَ (L1535813) ==
'''تَرَأَّمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535813|18بك|ويكي بيانات: L1535813]] [[ملف:Wiktionary-logo.svg|وصلة=تَرَأَّمَ|18بك|صفحة ويكاموس]] · الجذر: رأم · ([[toolforge:ar-senses/review/L1535813|رابط المُفردة في الأداة]])
دمجت المعنيين وصححت رقم الجزء والصفحة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:58، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} حالة تكرار مؤكّدة بين المعنى 1 و2، كما يأتي:
:#{{اقتباس مضمن|تَرَأَّمَ الشيءَ: أحبَّه وألِفَه وعطف عليه وترحم عليه}}
:#{{اقتباس مضمن|تَرَأَّمَ الصبيَّ: ترحَّم عليه}}
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:26، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: جَاوَى (L1534151) ==
'''جَاوَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534151|18بك|ويكي بيانات: L1534151]] [[ملف:Wiktionary-logo.svg|وصلة=جَاوَى|18بك|صفحة ويكاموس]] · الجذر: جوي · ([[toolforge:ar-senses/review/L1534151|رابط المُفردة في الأداة]])
خطأ: الصفحة 'جَاوَى' موجودة بالفعل <!-- يظهر هكذا: خطأ: الصفحة 'جَاوَى' موجودة بالفعل. --> --[[مستخدم:رِفْد|رِفْد]] ([[نقاش المستخدم:رِفْد|نقاش]]) 22:15، 30 يوليو 2026 (ت ع م)
:{{ر|أبو هشام}} أتقصد أنكَ أنشأتَ الصفحة سابقًا عبر الأداة ثم ظهرت لك مرة أخرى في أداة مراجعة المعاني؟ --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:27، 6 أغسطس 2026 (ت ع م).
::مرحبا {{ر|عباد ديرانية}} أعتقد أن الخلل هو وجود صفحة مكررة في ويكي بيانات يلزم دمجها، تحياتي لك. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:59، 6 أغسطس 2026 (ت ع م)
:::+أضيفُ الاقتراح الممتاز '''إضافة تنبيهٍ بالخط الأحمر إلى الأداة في حال لو أن الصفحة أُنْشِأَتْ وحُذِفَتْ سابقًا''' تنبيهًا للمستخدم --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 16:07، 6 أغسطس 2026 (ت ع م).
::::هذا المشكل تكرر مرات عديدة (انظر النقاش أعلاه عن الفعل '''حَلَّى''') والسبب هو المُفردات التي تشترك في نفس الجذر. حاليا لا يوجد حل تقني للمسألة، لكنها في بالي وسأفكر في حل. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 22:48، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَجَاذَى (L1533824) ==
'''تَجَاذَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533824|18بك|ويكي بيانات: L1533824]] [[ملف:Wiktionary-logo.svg|وصلة=تَجَاذَى|18بك|صفحة ويكاموس]] · الجذر: جذي · ([[toolforge:ar-senses/review/L1533824|رابط المُفردة في الأداة]])
خطأ: الصفحة 'تَجَاذَى' موجودة بالفعل <!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:رِفْد|رِفْد]] ([[نقاش المستخدم:رِفْد|نقاش]]) 22:19، 30 يوليو 2026 (ت ع م)
:{{ر|ForzaGreen}} هذه ملاحظة متكرّرة من المستخدمين، يظهر أننا نحتاجُ إلى '''تحديث الأداة بوتيرة يومية لإزالة الصفحات المنشأة سابقًا'''، إلا لو كان هذا خطأً تقنيًا مختلفًا يُسبِّبُ التكرار --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 15:48، 6 أغسطس 2026 (ت ع م).
::كنت أصلحت هذه الكلمة مع كلمات أخرى لكن لم أصلح بعد مصدر الخطأ، وهو الأفعال التي لها جذور مختلفة لكنها تشترك في نفس الصيغة. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 17:51، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَجْذَى (L1533823) ==
'''أَجْذَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533823|18بك|ويكي بيانات: L1533823]] [[ملف:Wiktionary-logo.svg|وصلة=أَجْذَى|18بك|صفحة ويكاموس]] · الجذر: جذي · ([[toolforge:ar-senses/review/L1533823|رابط المُفردة في الأداة]])
خطأ: الصفحة 'أَجْذَى' موجودة بالفعل <!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:رِفْد|رِفْد]] ([[نقاش المستخدم:رِفْد|نقاش]]) 22:20، 30 يوليو 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: زَأْزَأَ (L1536388) ==
'''زَأْزَأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1536388|18بك|ويكي بيانات: L1536388]] [[ملف:Wiktionary-logo.svg|وصلة=زَأْزَأَ|18بك|صفحة ويكاموس]] · الجذر: زأزأ · ([[toolforge:ar-senses/review/L1536388|رابط المُفردة في الأداة]])
حذفت المعنى الخامس لأنه مزيد بتاء في المراجع.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:35، 4 أغسطس 2026 (ت ع م)
:{{ر|Michel Bakni}} المعنى الخامس مزيدٌ بتاء التأنيث، فهل نُنْشِئُ له صفحةً منفصلةً برأيك أم نضيفه إلى ذات الصفحة مع تحويلة؟
:شرح المعنى الخامس: {{اقتباس مضمن|زَأْزَأَتِ المرأةُ: مشت وحرّكت أعطافها كمشية القِصار}}
:--[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:33، 6 أغسطس 2026 (ت ع م).
::نعم، يلزم إنشاء صفحة لكل فعل بكل تصريف، هذا التصريف: المؤنث المفرد الغائب. [[مستخدم:Michel Bakni|Michel Bakni]] ([[نقاش المستخدم:Michel Bakni|نقاش]]) 14:36، 6 أغسطس 2026 (ت ع م)
:::{{ر|ForzaGreen}} إذًا يلزمنا التوثّق من تمييز النموذج للمؤنّث وتخصيصه صفحة مستقلّة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:54، 6 أغسطس 2026 (ت ع م).
::::أنا رأيي كل المعاني والأمثلة تبقى في صفحة الفعل الرئيسية، والصيغ المُصرفة تحيل إلى الصفحة الرئيسية. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 15:06، 6 أغسطس 2026 (ت ع م)
::::متّفق مع وائل هنا بالواقع، الأفضل هو تخفيف الإحالات إن أمكن وجَمْع تصريفات المذكر والمؤنث والعدد بصفحة واحدة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 15:52، 6 أغسطس 2026 (ت ع م).
:::::لكن الذي يراجع القوالب يفهم أن لكل تصريف صفحة خاصة به لذلك أنا أتفق مع الزميل ميشيل على إنشاء صفحة لكل تصريف، تحياتي لكم. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:10، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَزْعَلَ (L1476504) ==
'''أَزْعَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1476504|18بك|ويكي بيانات: L1476504]] [[ملف:Wiktionary-logo.svg|وصلة=أَزْعَلَ|18بك|صفحة ويكاموس]] · الجذر: زعل · ([[toolforge:ar-senses/review/L1476504|رابط المُفردة في الأداة]])
دمجت المعنى الأول والثالث لأن المعنى الثالث مكرر عن الأول.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 10:04، 4 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك ونعمل على معالجة مسألة المعاني المُكرَّرة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:34، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: زَعِلَ (L1487695) ==
'''زَعِلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1487695|18بك|ويكي بيانات: L1487695]] [[ملف:Wiktionary-logo.svg|وصلة=زَعِلَ|18بك|صفحة ويكاموس]] · الجذر: زعل · ([[toolforge:ar-senses/review/L1487695|رابط المُفردة في الأداة]])
المعنى الأول (مرح) غير موجود في المراجع، والمعنى الثالث بحاجة إلى تدقيق، تحتاج المفردة إلى مراجعة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 10:41، 4 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} من معجم العين: {{اقتباس مضمن|الزَّعِل: النشيط '''الأشر'''. زَعِلَ يَزْعَلُ زَعَلًا.}}، الأشر هنا بمعنى المرح (مصدر [https://www.islamweb.net/ar/library/content/122/137/%D8%A3%D8%B4%D8%B1 من لسان العرب]).
:{{ر|ForzaGreen}} المعنى الثالث فيه اختلاطٌ بين معانٍ عِدّة، مثل: {{اقتباس مضمن|والزعل: '''المتضور جوعا'''}} (الجوهري) و{{اقتباس مضمن|الزَّعَلُ '''كالعَلَزِ مِنَ المَرَض'''}} (لسان العرب)، والمعنى في الأداة جاءَ: {{اقتباس مضمن|زَعِلَ من المرض أو الجوع: تضوّر وتلوّى وقلِق فلم يستقر}}.
:'''الخطوات القادمة المقترحة''': أشتبه أن النموذج اختلط عليه دمج المعنى عبر 5 مصادر، والأفضل والأسهل للمراجع (فمن الصعب جدًا تقصّي 5 مراجع مختلفة) أن '''نضعَ حدًا بين مصدرَيْن إلى ثلاثة مصادر للمعنى الواحد''' --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:48، 6 أغسطس 2026 (ت ع م).
::نعم، في الحقيقة تحتوي بعض المفردات على مراجع كثيرة وأتفق معك على الاستشهاد بمرجعين أو ثلاث بأقصى حد لكن لو يكون انتقاء المراجع يدويا أفضل لاختيار الأنسب والأقرب إلا إذا كان الاختيار الآلي قادرا على انتقاء المرجع الأنسب أو الأقرب أو الأدق. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:21، 6 أغسطس 2026 (ت ع م)
:::إشارة {{ر|عباد ديرانية}} أرجو مراجعة تقليل المراجع آليا فقد تحرم الأداةُ المفردةَ من المراجع الأدق وتضع المراجع الأبعد. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:23، 6 أغسطس 2026 (ت ع م)
::::{{ر|أبو هشام}} لا بأس بذلك، لكن إن تركنا للمُرَاجِعِ اختيار المصادر الأدق فهذا يعني أن عليهم مراجعة 5 - 6 مصادر في بعض الحالات، فما هو الأفضل بالنسبة لك بين هذه الخيارات؟ أهو انتقاء المصادر الأفضل يدويًا أم تقليل عدد المصادر التي وجبت مراجعتها؟ --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 15:51، 6 أغسطس 2026 (ت ع م).
:::::{{ر|عباد ديرانية}} أميل إلى الانتقاء اليدوي أو البشري دون تقليل للمصادر فالمراجِع قادر على انتقاء المصدر الأنسب للمفردة، وإن كان للزملاء رأي آخر فلا أعترض، تحياتي. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:15، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَلَكَ (L1502490) ==
'''أَلَكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1502490|18بك|ويكي بيانات: L1502490]] [[ملف:Wiktionary-logo.svg|وصلة=أَلَكَ|18بك|صفحة ويكاموس]] · الجذر: ألك · ([[toolforge:ar-senses/review/L1502490|رابط المُفردة في الأداة]])
حذفت المرجع الأخير من المعنى الثاني لأن فيه خطأ فقد استُشهد بصفحة 132 من معجم متن اللغة وفيها (أَلَكَ لَجَأٌ يَا فلَان) وهو استشهاد خاطئ لأن (ألك) هنا استفهام وليست فعل.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:33، 5 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} شكرًا لك وسوف نعمل على زيادة دقة ضبط المعاني المتقاربة بالأداة --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:49، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: اِبْتَسَطَ (L1533014) ==
'''اِبْتَسَطَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533014|18بك|ويكي بيانات: L1533014]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْتَسَطَ|18بك|صفحة ويكاموس]] · الجذر: بسط · ([[toolforge:ar-senses/review/L1533014|رابط المُفردة في الأداة]])
غير موثقة، لا يوجد فيها مصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:04، 5 أغسطس 2026 (ت ع م)
:{{ر|ForzaGreen}} حالة غريبةٌ ليس فيه أي مصدر للمعنى المستخرج! --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:49، 6 أغسطس 2026 (ت ع م).
== بلاغ من أداة مراجعة المعاني: أَبْشَكَ (L1533037) ==
'''أَبْشَكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533037|18بك|ويكي بيانات: L1533037]] [[ملف:Wiktionary-logo.svg|وصلة=أَبْشَكَ|18بك|صفحة ويكاموس]] · الجذر: بشك · ([[toolforge:ar-senses/review/L1533037|رابط المُفردة في الأداة]])
هذه اللفظة بحاجة لمراجعة فلها عدة معان.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:50، 6 أغسطس 2026 (ت ع م)
:{{ر|أبو هشام}} هل لكَ أن تُوضِحَ المقصود؟ لم أجد كلمة أبشك في المرجع أصلًا للأسف --[[مستخدم:عباد ديرانية|عباد ديرانية]] ([[نقاش المستخدم:عباد ديرانية|نقاش]]) 14:52، 6 أغسطس 2026 (ت ع م).
::{{ر|عباد ديرانية}} وجدت هذا ('''أبشك''' الكلام: كذب فيه: تخرص فيه كاذبًا.) في معجم متن اللغة ج=1 ص=299، وهذا أيضا (وبَشَكَ الْكَلَامَ يَبْشُكه بَشْكًا و'''أبشَكه''': تَخَرَّصهُ كَاذِبًا،) في لسان العرب ج=10 ص=400، ولم أجد أن معناها '''أسرع'''، تحياتي. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:43، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَاطَأَ (L1496404) ==
'''بَاطَأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1496404|18بك|ويكي بيانات: L1496404]] [[ملف:Wiktionary-logo.svg|وصلة=بَاطَأَ|18بك|صفحة ويكاموس]] · الجذر: بطأ · ([[toolforge:ar-senses/review/L1496404|رابط المُفردة في الأداة]])
لا يوجد التصريف في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:43، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَبْطَحَ (L1533063) ==
'''أَبْطَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533063|18بك|ويكي بيانات: L1533063]] [[ملف:Wiktionary-logo.svg|وصلة=أَبْطَحَ|18بك|صفحة ويكاموس]] · الجذر: بطح · ([[toolforge:ar-senses/review/L1533063|رابط المُفردة في الأداة]])
غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:47، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَطَّحَ (L1533066) ==
'''بَطَّحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533066|18بك|ويكي بيانات: L1533066]] [[ملف:Wiktionary-logo.svg|وصلة=بَطَّحَ|18بك|صفحة ويكاموس]] · الجذر: بطح · ([[toolforge:ar-senses/review/L1533066|رابط المُفردة في الأداة]])
هل هي بطَح أم بطّح؟<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:48، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَطْرَقَ (L1533070) ==
'''تَبَطْرَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533070|18بك|ويكي بيانات: L1533070]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَطْرَقَ|18بك|صفحة ويكاموس]] · الجذر: بطرق · ([[toolforge:ar-senses/review/L1533070|رابط المُفردة في الأداة]])
هذا الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:58، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَهُؤَ (L1545462) ==
'''بَهُؤَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1545462|18بك|ويكي بيانات: L1545462]] [[ملف:Wiktionary-logo.svg|وصلة=بَهُؤَ|18بك|صفحة ويكاموس]] · الجذر: بهأ · ([[toolforge:ar-senses/review/L1545462|رابط المُفردة في الأداة]])
معناها (أنس) كما في لسان العرب ج=1 ص=35 ومعجم متن اللغة ج=1 ص=353.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:29، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَاهَتَ (L1533268) ==
'''تَبَاهَتَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533268|18بك|ويكي بيانات: L1533268]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَاهَتَ|18بك|صفحة ويكاموس]] · الجذر: بهت · ([[toolforge:ar-senses/review/L1533268|رابط المُفردة في الأداة]])
حسنتُ المعنى وأضفت مصدرين.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:01، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَعِرَ (L1544067) ==
'''بَعِرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544067|18بك|ويكي بيانات: L1544067]] [[ملف:Wiktionary-logo.svg|وصلة=بَعِرَ|18بك|صفحة ويكاموس]] · الجذر: بعر · ([[toolforge:ar-senses/review/L1544067|رابط المُفردة في الأداة]])
'''[[بَعِرَ]]''' الجمل بالكسر صار بعيرا كما في القاموس المحيط ص=352.
المفردة (بَعَرَ) وهي موجودة في المشروع '''[[بَعَرَ]]''' فيلزم تحديثها أو حذفها لأنها خاطئة انظر القاموس المحيط ص=694 وإنشاء صفحة جديدة ببيانات صحيحة هي البيانات الموجودة في الأداة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:31، 6 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَعَّقَ (L1533113) ==
'''بَعَّقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533113|18بك|ويكي بيانات: L1533113]] [[ملف:Wiktionary-logo.svg|وصلة=بَعَّقَ|18بك|صفحة ويكاموس]] · الجذر: بعق · ([[toolforge:ar-senses/review/L1533113|رابط المُفردة في الأداة]])
هل هي بَعَّقَ بالتشديد أم بَعَقَ بالتخفيف؟<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:02، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَغْزَلَ (L1533126) ==
'''تَبَغْزَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533126|18بك|ويكي بيانات: L1533126]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَغْزَلَ|18بك|صفحة ويكاموس]] · الجذر: بغزل · ([[toolforge:ar-senses/review/L1533126|رابط المُفردة في الأداة]])
المعنى الصحيح '''تبختر''' وله شواهد في أربعة معاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:13، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَقَّمَ (L1533154) ==
'''بَقَّمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533154|18بك|ويكي بيانات: L1533154]] [[ملف:Wiktionary-logo.svg|وصلة=بَقَّمَ|18بك|صفحة ويكاموس]] · الجذر: بقم · ([[toolforge:ar-senses/review/L1533154|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:44، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَقَّمَ (L1533153) ==
'''تَبَقَّمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533153|18بك|ويكي بيانات: L1533153]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَقَّمَ|18بك|صفحة ويكاموس]] · الجذر: بقم · ([[toolforge:ar-senses/review/L1533153|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:50، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَكِئَ (L1543356) ==
'''بَكِئَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543356|18بك|ويكي بيانات: L1543356]] [[ملف:Wiktionary-logo.svg|وصلة=بَكِئَ|18بك|صفحة ويكاموس]] · الجذر: بكأ · ([[toolforge:ar-senses/review/L1543356|رابط المُفردة في الأداة]])
حذفت المعنى الأول لأنه غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:13، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْتَلَتَ (L1533174) ==
'''اِبْتَلَتَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533174|18بك|ويكي بيانات: L1533174]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْتَلَتَ|18بك|صفحة ويكاموس]] · الجذر: بلت · ([[toolforge:ar-senses/review/L1533174|رابط المُفردة في الأداة]])
المفردة غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:35، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَلْدَحَ (L1533193) ==
'''تَبَلْدَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533193|18بك|ويكي بيانات: L1533193]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَلْدَحَ|18بك|صفحة ويكاموس]] · الجذر: بلدح · ([[toolforge:ar-senses/review/L1533193|رابط المُفردة في الأداة]])
أضفت المعنى الثاني، لم تستخرجه الأداة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:54، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْلَنْدَكَ (L1533194) ==
'''اِبْلَنْدَكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533194|18بك|ويكي بيانات: L1533194]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْلَنْدَكَ|18بك|صفحة ويكاموس]] · الجذر: بلدك · ([[toolforge:ar-senses/review/L1533194|رابط المُفردة في الأداة]])
المعنى خاطئ، والمفردة غير موجودة في المصدر.
:المعنى الصحيح ('''اتسع''') موجود في أربعة معاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:00، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَلَّرَ (L1533196) ==
'''تَبَلَّرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533196|18بك|ويكي بيانات: L1533196]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَلَّرَ|18بك|صفحة ويكاموس]] · الجذر: بلر · ([[toolforge:ar-senses/review/L1533196|رابط المُفردة في الأداة]])
إملاء المفردة خاطئ، والصحيح ('''تَرَبَّل''') كما في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:08، 7 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَقَّعَ (L1533145) ==
'''بَقَّعَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533145|18بك|ويكي بيانات: L1533145]] [[ملف:Wiktionary-logo.svg|وصلة=بَقَّعَ|18بك|صفحة ويكاموس]] · الجذر: بقع · ([[toolforge:ar-senses/review/L1533145|رابط المُفردة في الأداة]])
حذفت المعنى الرابع لأنه ورد بالتخفيف.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:18، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِنْبَقَّ (L1533147) ==
'''اِنْبَقَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533147|18بك|ويكي بيانات: L1533147]] [[ملف:Wiktionary-logo.svg|وصلة=اِنْبَقَّ|18بك|صفحة ويكاموس]] · الجذر: بقق · ([[toolforge:ar-senses/review/L1533147|رابط المُفردة في الأداة]])
المعنى خاطئ ولا شواهد عليه في المعاجم والمفردة الموجودة ('''انبعق''') وليس انبق.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:38، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَلَعَ (L1480240) ==
'''بَلَعَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1480240|18بك|ويكي بيانات: L1480240]] [[ملف:Wiktionary-logo.svg|وصلة=بَلَعَ|18بك|صفحة ويكاموس]] · الجذر: بلع · ([[toolforge:ar-senses/review/L1480240|رابط المُفردة في الأداة]])
خطأ في التشكيل فالفعل بَلِعَ وليس بَلَعَ كما في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:34، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْتَلَقَ (L1533220) ==
'''اِبْتَلَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1533220|18بك|ويكي بيانات: L1533220]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْتَلَقَ|18بك|صفحة ويكاموس]] · الجذر: بلق · ([[toolforge:ar-senses/review/L1533220|رابط المُفردة في الأداة]])
لم أجد المفردة في المعاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:06، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: بَلُقَ (L1543358) ==
'''بَلُقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543358|18بك|ويكي بيانات: L1543358]] [[ملف:Wiktionary-logo.svg|وصلة=بَلُقَ|18بك|صفحة ويكاموس]] · الجذر: بلق · ([[toolforge:ar-senses/review/L1543358|رابط المُفردة في الأداة]])
المفردة بالكسر وليس بالضم، انظر '''[[بَلِقَ]]'''.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:52، 8 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْذَارَّ (L1534290) ==
'''اِحْذَارَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534290|18بك|ويكي بيانات: L1534290]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْذَارَّ|18بك|صفحة ويكاموس]] · الجذر: حذر · ([[toolforge:ar-senses/review/L1534290|رابط المُفردة في الأداة]])
خلل في صندوق المعلومات.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:49، 9 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَاتَنَ (L1534214) ==
'''تَحَاتَنَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534214|18بك|ويكي بيانات: L1534214]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَاتَنَ|18بك|صفحة ويكاموس]] · الجذر: حتن · ([[toolforge:ar-senses/review/L1534214|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لأنه مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 12:31، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَتَنَ (L1534213) ==
'''اِحْتَتَنَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534213|18بك|ويكي بيانات: L1534213]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَتَنَ|18بك|صفحة ويكاموس]] · الجذر: حتن · ([[toolforge:ar-senses/review/L1534213|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 12:37، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَاتَّ (L1496477) ==
'''تَحَاتَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1496477|18بك|ويكي بيانات: L1496477]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَاتَّ|18بك|صفحة ويكاموس]] · الجذر: حتت · ([[toolforge:ar-senses/review/L1496477|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:36، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْزَوْزَى (L1534387) ==
'''اِحْزَوْزَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534387|18بك|ويكي بيانات: L1534387]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْزَوْزَى|18بك|صفحة ويكاموس]] · الجذر: حزو · ([[toolforge:ar-senses/review/L1534387|رابط المُفردة في الأداة]])
المفردة غير موجودة في المصدر ولها أكثر من معنى في المصادر الأخرى.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:02، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَذَّقَ (L1484084) ==
'''تَحَذَّقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1484084|18بك|ويكي بيانات: L1484084]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَذَّقَ|18بك|صفحة ويكاموس]] · الجذر: حذق · ([[toolforge:ar-senses/review/L1484084|رابط المُفردة في الأداة]])
المفردة غير موجودة في المصادر الموجودة، استبدلتها بمصادر أخرى.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:02، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَذَّقَ (L1534295) ==
'''حَذَّقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534295|18بك|ويكي بيانات: L1534295]] [[ملف:Wiktionary-logo.svg|وصلة=حَذَّقَ|18بك|صفحة ويكاموس]] · الجذر: حذق · ([[toolforge:ar-senses/review/L1534295|رابط المُفردة في الأداة]])
لم أجد الفعل المتعدي في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:14، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَذِقَ (L1546050) ==
'''حَذِقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1546050|18بك|ويكي بيانات: L1546050]] [[ملف:Wiktionary-logo.svg|وصلة=حَذِقَ|18بك|صفحة ويكاموس]] · الجذر: حذق · ([[toolforge:ar-senses/review/L1546050|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لأنه تفسير لمفردة فرس وهو مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:56، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَحْزَرَ (L1534363) ==
'''أَحْزَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534363|18بك|ويكي بيانات: L1534363]] [[ملف:Wiktionary-logo.svg|وصلة=أَحْزَرَ|18بك|صفحة ويكاموس]] · الجذر: حزر · ([[toolforge:ar-senses/review/L1534363|رابط المُفردة في الأداة]])
حذفت المعنى الأول لأنه خاطئ وغير مرتبط بالمفردة بل يرتبط بـ (أحزّ).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:06، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَزَّ (L1534366) ==
'''اِحْتَزَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534366|18بك|ويكي بيانات: L1534366]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَزَّ|18بك|صفحة ويكاموس]] · الجذر: حزز · ([[toolforge:ar-senses/review/L1534366|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:12، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَزْمَرَ (L1534382) ==
'''حَزْمَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534382|18بك|ويكي بيانات: L1534382]] [[ملف:Wiktionary-logo.svg|وصلة=حَزْمَرَ|18بك|صفحة ويكاموس]] · الجذر: حزمر · ([[toolforge:ar-senses/review/L1534382|رابط المُفردة في الأداة]])
حذفت المعنى الثاني لارتباطه بـ ([[حَزْفَرَ]]).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 21:56، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَاسَى (L1534416) ==
'''تَحَاسَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534416|18بك|ويكي بيانات: L1534416]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَاسَى|18بك|صفحة ويكاموس]] · الجذر: حسو · ([[toolforge:ar-senses/review/L1534416|رابط المُفردة في الأداة]])
غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:10، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَاسَى (L1534418) ==
'''حَاسَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534418|18بك|ويكي بيانات: L1534418]] [[ملف:Wiktionary-logo.svg|وصلة=حَاسَى|18بك|صفحة ويكاموس]] · الجذر: حسو · ([[toolforge:ar-senses/review/L1534418|رابط المُفردة في الأداة]])
غير موجودة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:16، 11 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَاقَ (L1534738) ==
'''اِحْتَاقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534738|18بك|ويكي بيانات: L1534738]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَاقَ|18بك|صفحة ويكاموس]] · الجذر: حيق · ([[toolforge:ar-senses/review/L1534738|رابط المُفردة في الأداة]])
دمجت المعنيين لأنها مكرران.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 04:15، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَفَظَ (L1485699) ==
'''اِحْتَفَظَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1485699|18بك|ويكي بيانات: L1485699]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَفَظَ|18بك|صفحة ويكاموس]] · الجذر: حفظ · ([[toolforge:ar-senses/review/L1485699|رابط المُفردة في الأداة]])
لم تضع الأداة بعض أرقام الصفحات والأجزاء.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:19، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَمْحَمَ (L1476725) ==
'''حَمْحَمَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1476725|18بك|ويكي بيانات: L1476725]] [[ملف:Wiktionary-logo.svg|وصلة=حَمْحَمَ|18بك|صفحة ويكاموس]] · الجذر: حمحم · ([[toolforge:ar-senses/review/L1476725|رابط المُفردة في الأداة]])
خلل في صندوق المعلومات.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:11، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَيَّفَ (L1534760) ==
'''تَحَيَّفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534760|18بك|ويكي بيانات: L1534760]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَيَّفَ|18بك|صفحة ويكاموس]] · الجذر: حيف · ([[toolforge:ar-senses/review/L1534760|رابط المُفردة في الأداة]])
دمجت المعنيين.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:38، 12 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَشَّكَ (L1534439) ==
'''تَحَشَّكَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534439|18بك|ويكي بيانات: L1534439]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَشَّكَ|18بك|صفحة ويكاموس]] · الجذر: حشك · ([[toolforge:ar-senses/review/L1534439|رابط المُفردة في الأداة]])
حرف الشين مشدد.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:12، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْوَالَّ (L1534743) ==
'''اِحْوَالَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534743|18بك|ويكي بيانات: L1534743]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْوَالَّ|18بك|صفحة ويكاموس]] · الجذر: حول · ([[toolforge:ar-senses/review/L1534743|رابط المُفردة في الأداة]])
خلل في صندوق المعلومات.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:59، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِسْتَحَاضَ (L1534730) ==
'''اِسْتَحَاضَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534730|18بك|ويكي بيانات: L1534730]] [[ملف:Wiktionary-logo.svg|وصلة=اِسْتَحَاضَ|18بك|صفحة ويكاموس]] · الجذر: حوض · ([[toolforge:ar-senses/review/L1534730|رابط المُفردة في الأداة]])
الموجود في المصادر استحوض وليس استحاض.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:05، 13 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَاشَ (L1534721) ==
'''اِحْتَاشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534721|18بك|ويكي بيانات: L1534721]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَاشَ|18بك|صفحة ويكاموس]] · الجذر: حوش · ([[toolforge:ar-senses/review/L1534721|رابط المُفردة في الأداة]])
التصريف الموجود في المصادر (احتوش) وليس احتاش.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:34، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِسْتَحَاسَ (L1534716) ==
'''اِسْتَحَاسَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534716|18بك|ويكي بيانات: L1534716]] [[ملف:Wiktionary-logo.svg|وصلة=اِسْتَحَاسَ|18بك|صفحة ويكاموس]] · الجذر: حوس · ([[toolforge:ar-senses/review/L1534716|رابط المُفردة في الأداة]])
استحوس وليس استحاس كما في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:51، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَزْأَلَ (L1534358) ==
'''حَزْأَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534358|18بك|ويكي بيانات: L1534358]] [[ملف:Wiktionary-logo.svg|وصلة=حَزْأَلَ|18بك|صفحة ويكاموس]] · الجذر: حزأل · ([[toolforge:ar-senses/review/L1534358|رابط المُفردة في الأداة]])
مفردة خاطئة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 12:52، 14 أغسطس 2026 (ت ع م)
:فعلا، يبدو أن المُفردة حَزْأَلَ لا توجد. في جدول الأفعال، عندنا فعل واحد من الجذر "ح ز أ ل"، وهو على وزن '''فعلل'''، أي حَزْأَلَ. لكن يبدو أن هذا خاطئ، و أن الوزن الصحيح هو افعللّ، أي احْزَأَلَّ، وهو الذي ذُكِر في معجم [https://app.turath.io/book/7030?page=14881 تاج العروس]. [[مستخدم:ForzaGreen|وائل]] ([[نقاش المستخدم:ForzaGreen|نقاش]]) 21:19، 14 أغسطس 2026 (ت ع م)
:ورد في اللسان أيضًا احزألَّ بمعنى ارتفع وبمعنى اجتمع. [[مستخدم:Michel Bakni|Michel Bakni]] ([[نقاش المستخدم:Michel Bakni|نقاش]]) 21:50، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَنَّشَ (L1534669) ==
'''حَنَّشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534669|18بك|ويكي بيانات: L1534669]] [[ملف:Wiktionary-logo.svg|وصلة=حَنَّشَ|18بك|صفحة ويكاموس]] · الجذر: حنش · ([[toolforge:ar-senses/review/L1534669|رابط المُفردة في الأداة]])
هل هي حَنَّشَ أم حَنَشَ؟ وأظن أن لها معان أخرى.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:28، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِبْخَنَدَّ (L1532850) ==
'''اِبْخَنَدَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1532850|18بك|ويكي بيانات: L1532850]] [[ملف:Wiktionary-logo.svg|وصلة=اِبْخَنَدَّ|18بك|صفحة ويكاموس]] · الجذر: بخند · ([[toolforge:ar-senses/review/L1532850|رابط المُفردة في الأداة]])
الفعل في المرجع اخْبَنْدَى، لا وجود المفردة اِبْخَنَدَّ--[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 18:52، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَمْيَرَ (L1534650) ==
'''تَحَمْيَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534650|18بك|ويكي بيانات: L1534650]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَمْيَرَ|18بك|صفحة ويكاموس]] · الجذر: حمير · ([[toolforge:ar-senses/review/L1534650|رابط المُفردة في الأداة]])
خطأ في استخراج المعنى، معنى تحمير أي ساء خلقه كما في المصادر أم هذه فيجب أن تكون بغير الياء أي تَحَمَّر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:02، 14 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَبَشَ (L1534178) ==
'''اِحْتَبَشَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534178|18بك|ويكي بيانات: L1534178]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَبَشَ|18بك|صفحة ويكاموس]] · الجذر: حبش · ([[toolforge:ar-senses/review/L1534178|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:38، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَثَّرَ (L1534223) ==
'''تَحَثَّرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534223|18بك|ويكي بيانات: L1534223]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَثَّرَ|18بك|صفحة ويكاموس]] · الجذر: حثر · ([[toolforge:ar-senses/review/L1534223|رابط المُفردة في الأداة]])
المعنى لفعل حثر، الرجاء إصلاحه.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:52، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَثْرَفَ (L1534226) ==
'''حَثْرَفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534226|18بك|ويكي بيانات: L1534226]] [[ملف:Wiktionary-logo.svg|وصلة=حَثْرَفَ|18بك|صفحة ويكاموس]] · الجذر: حثرف · ([[toolforge:ar-senses/review/L1534226|رابط المُفردة في الأداة]])
المعنى الصحيح زعزعه وحركه، انظر تاج العروس جزء 23 صفحة 118.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:09، 15 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَحَظْرَبَ (L1534501) ==
'''تَحَظْرَبَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534501|18بك|ويكي بيانات: L1534501]] [[ملف:Wiktionary-logo.svg|وصلة=تَحَظْرَبَ|18بك|صفحة ويكاموس]] · الجذر: حظرب · ([[toolforge:ar-senses/review/L1534501|رابط المُفردة في الأداة]])
دًمج المعنيان ووُضعت أمثلة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 15:32، 16 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَافَلَ (L1534527) ==
'''حَافَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534527|18بك|ويكي بيانات: L1534527]] [[ملف:Wiktionary-logo.svg|وصلة=حَافَلَ|18بك|صفحة ويكاموس]] · الجذر: حفل · ([[toolforge:ar-senses/review/L1534527|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر المذكورة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:59، 16 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْقَوْقَفَ (L1489579) ==
'''اِحْقَوْقَفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1489579|18بك|ويكي بيانات: L1489579]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْقَوْقَفَ|18بك|صفحة ويكاموس]] · الجذر: حقف · ([[toolforge:ar-senses/review/L1489579|رابط المُفردة في الأداة]])
المعاني الأربعة مكررة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:52، 17 أغسطس 2026 (ت ع م)
== معجم مقاييس اللغة ==
مرحبا بالزملاء، روابط الكتاب الموجودة في الأداة غير دقيقة وقد كنت أظن أن الاختلاف في مفردة أو اثنتين لكن تبين لي أنها غير دقيقة في جميع المفردات، رقم الصفة صحيح ولكن الرابط بعيد عن الصفحة، تحياتي لكم. [[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:56، 17 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْتَكَرَ (L1478743) ==
'''اِحْتَكَرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1478743|18بك|ويكي بيانات: L1478743]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْتَكَرَ|18بك|صفحة ويكاموس]] · الجذر: حكر · ([[toolforge:ar-senses/review/L1478743|رابط المُفردة في الأداة]])
المعنى الثاني مكرر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:42، 17 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَكَّرَ (L1534555) ==
'''حَكَّرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534555|18بك|ويكي بيانات: L1534555]] [[ملف:Wiktionary-logo.svg|وصلة=حَكَّرَ|18بك|صفحة ويكاموس]] · الجذر: حكر · ([[toolforge:ar-senses/review/L1534555|رابط المُفردة في الأداة]])
أشك بوجود المفردة المشكلة في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:56، 17 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَمِضَ (L1543549) ==
'''حَمِضَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543549|18بك|ويكي بيانات: L1543549]] [[ملف:Wiktionary-logo.svg|وصلة=حَمِضَ|18بك|صفحة ويكاموس]] · الجذر: حمض · ([[toolforge:ar-senses/review/L1543549|رابط المُفردة في الأداة]])
المعاني مختلطة لعدم وضوح حركة الميم في الفعل.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:57، 19 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَسَى (L1486741) ==
'''أَسَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1486741|18بك|ويكي بيانات: L1486741]] [[ملف:Wiktionary-logo.svg|وصلة=أَسَى|18بك|صفحة ويكاموس]] · الجذر: أسي · ([[toolforge:ar-senses/review/L1486741|رابط المُفردة في الأداة]])
الفعل في المراجع أسا من الجذر أسو.--[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 20:03، 20 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِخْتَبَلَ (L1534805) ==
'''اِخْتَبَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534805|18بك|ويكي بيانات: L1534805]] [[ملف:Wiktionary-logo.svg|وصلة=اِخْتَبَلَ|18بك|صفحة ويكاموس]] · الجذر: خبل · ([[toolforge:ar-senses/review/L1534805|رابط المُفردة في الأداة]])
المعنى الثاني مكرر، حذفته.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:03، 21 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَخَاتَلَ (L1487389) ==
'''تَخَاتَلَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1487389|18بك|ويكي بيانات: L1487389]] [[ملف:Wiktionary-logo.svg|وصلة=تَخَاتَلَ|18بك|صفحة ويكاموس]] · الجذر: ختل · ([[toolforge:ar-senses/review/L1487389|رابط المُفردة في الأداة]])
دُمِج المعنيان.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:09، 21 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَخَاجَأَ (L1534840) ==
'''تَخَاجَأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534840|18بك|ويكي بيانات: L1534840]] [[ملف:Wiktionary-logo.svg|وصلة=تَخَاجَأَ|18بك|صفحة ويكاموس]] · الجذر: خجأ · ([[toolforge:ar-senses/review/L1534840|رابط المُفردة في الأداة]])
لاحظت التباسا أو خلطا بين (تخاجأ وتخاجى وتخاجا).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 08:22، 22 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَخَارَقَ (L1534942) ==
'''تَخَارَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534942|18بك|ويكي بيانات: L1534942]] [[ملف:Wiktionary-logo.svg|وصلة=تَخَارَقَ|18بك|صفحة ويكاموس]] · الجذر: خرق · ([[toolforge:ar-senses/review/L1534942|رابط المُفردة في الأداة]])
الفعل غير موجود في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:36، 22 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَآ (L1545136) ==
'''دَآ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1545136|18بك|ويكي بيانات: L1545136]] [[ملف:Wiktionary-logo.svg|وصلة=دَآ|18بك|صفحة ويكاموس]] · الجذر: دأو · ([[toolforge:ar-senses/review/L1545136|رابط المُفردة في الأداة]])
الفعل الصحيح (دَأَى) كما في المصادر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:47، 22 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِدْحَوَى (L1535316) ==
'''اِدْحَوَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535316|18بك|ويكي بيانات: L1535316]] [[ملف:Wiktionary-logo.svg|وصلة=اِدْحَوَى|18بك|صفحة ويكاموس]] · الجذر: دحو · ([[toolforge:ar-senses/review/L1535316|رابط المُفردة في الأداة]])
استبدلت المصدر بمصادر أكثر دقة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:49، 23 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَدَرَّهَ (L1535387) ==
'''تَدَرَّهَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535387|18بك|ويكي بيانات: L1535387]] [[ملف:Wiktionary-logo.svg|وصلة=تَدَرَّهَ|18بك|صفحة ويكاموس]] · الجذر: دره · ([[toolforge:ar-senses/review/L1535387|رابط المُفردة في الأداة]])
دره وليس تدره.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:55، 24 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَشَا (L1544094) ==
'''دَشَا''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544094|18بك|ويكي بيانات: L1544094]] [[ملف:Wiktionary-logo.svg|وصلة=دَشَا|18بك|صفحة ويكاموس]] · الجذر: دشو · ([[toolforge:ar-senses/review/L1544094|رابط المُفردة في الأداة]])
أضفت المعنى ووثقته من المعاجم.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 09:54، 25 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَغِرَ (L1543752) ==
'''دَغِرَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1543752|18بك|ويكي بيانات: L1543752]] [[ملف:Wiktionary-logo.svg|وصلة=دَغِرَ|18بك|صفحة ويكاموس]] · الجذر: دغر · ([[toolforge:ar-senses/review/L1543752|رابط المُفردة في الأداة]])
للمفردة أكثر من معنى غير مذكور، ولا أدري هي بالكسر أم بالفتح دَغَرَ دَغِرَ.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:03، 25 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَاغَصَ (L1535445) ==
'''دَاغَصَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535445|18بك|ويكي بيانات: L1535445]] [[ملف:Wiktionary-logo.svg|وصلة=دَاغَصَ|18بك|صفحة ويكاموس]] · الجذر: دغص · ([[toolforge:ar-senses/review/L1535445|رابط المُفردة في الأداة]])
حذفت المعاني الثلاثة الأخيرة لأنها مختلطة بمفردة (دَاغَشَ).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 19:42، 25 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِدَّمَسَ (L1535554) ==
'''اِدَّمَسَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535554|18بك|ويكي بيانات: L1535554]] [[ملف:Wiktionary-logo.svg|وصلة=اِدَّمَسَ|18بك|صفحة ويكاموس]] · الجذر: دمس · ([[toolforge:ar-senses/review/L1535554|رابط المُفردة في الأداة]])
حذفت المصدرين وأضفت تهذيب اللغة لورود المفردة فيه ج=12 ص=263.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:13، 28 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَدَمْشَقَ (L1535561) ==
'''تَدَمْشَقَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535561|18بك|ويكي بيانات: L1535561]] [[ملف:Wiktionary-logo.svg|وصلة=تَدَمْشَقَ|18بك|صفحة ويكاموس]] · الجذر: دمشق · ([[toolforge:ar-senses/review/L1535561|رابط المُفردة في الأداة]])
المفردة غير موجودة والمثال غير موجود.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 18:29، 28 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: دَنَّأَ (L1535578) ==
'''دَنَّأَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535578|18بك|ويكي بيانات: L1535578]] [[ملف:Wiktionary-logo.svg|وصلة=دَنَّأَ|18بك|صفحة ويكاموس]] · الجذر: دنأ · ([[toolforge:ar-senses/review/L1535578|رابط المُفردة في الأداة]])
لا أظن الفعل مهموزا.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 20:19، 28 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِدَّنَى (L1535595) ==
'''اِدَّنَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1535595|18بك|ويكي بيانات: L1535595]] [[ملف:Wiktionary-logo.svg|وصلة=اِدَّنَى|18بك|صفحة ويكاموس]] · الجذر: دنو · ([[toolforge:ar-senses/review/L1535595|رابط المُفردة في الأداة]])
المثال في صفحة 273 وأظنه بمعنى مختلف.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:43، 29 أغسطس 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَبْشَبَ (L1537222) ==
'''شَبْشَبَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537222|18بك|ويكي بيانات: L1537222]] [[ملف:Wiktionary-logo.svg|وصلة=شَبْشَبَ|18بك|صفحة ويكاموس]] · الجذر: شبشب · ([[toolforge:ar-senses/review/L1537222|رابط المُفردة في الأداة]])
حذف المعنى الثاني لأنه خطأ من الأداة بسبب وجود خطأ مطبعي في المصدر.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:13، 31 أغسطس 2026 (ت ع م)
:هل تحويل حركات من فتحة الى الكسرة يحل مشكلة؟ [[مستخدم:يزن البلوي|يزن البلوي]] ([[نقاش المستخدم:يزن البلوي|نقاش]]) 13:32، 1 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِنْشَبَحَ (L1537214) ==
'''اِنْشَبَحَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537214|18بك|ويكي بيانات: L1537214]] [[ملف:Wiktionary-logo.svg|وصلة=اِنْشَبَحَ|18بك|صفحة ويكاموس]] · الجذر: شبح · ([[toolforge:ar-senses/review/L1537214|رابط المُفردة في الأداة]])
استبدلت مقاييس اللغة بجمهرة اللغة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 14:33، 2 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَاجَّ (L1537248) ==
'''شَاجَّ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537248|18بك|ويكي بيانات: L1537248]] [[ملف:Wiktionary-logo.svg|وصلة=شَاجَّ|18بك|صفحة ويكاموس]] · الجذر: شجج · ([[toolforge:ar-senses/review/L1537248|رابط المُفردة في الأداة]])
استخراج خاطئ، لم أجد التصريف في بقية المراجع.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 22:34، 4 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: تَبَرَّى (L1485717) ==
'''تَبَرَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1485717|18بك|ويكي بيانات: L1485717]] [[ملف:Wiktionary-logo.svg|وصلة=تَبَرَّى|18بك|صفحة ويكاموس]] · الجذر: بري · ([[toolforge:ar-senses/review/L1485717|رابط المُفردة في الأداة]])
الفعل في المراجع "تَبرأ" من جذر برأ وليس "تَبَرَّى" من جذر بري --[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 12:29، 5 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَحَطَ (L1489005) ==
'''شَحَطَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1489005|18بك|ويكي بيانات: L1489005]] [[ملف:Wiktionary-logo.svg|وصلة=شَحَطَ|18بك|صفحة ويكاموس]] · الجذر: شحط · ([[toolforge:ar-senses/review/L1489005|رابط المُفردة في الأداة]])
خلل وأخطاء غير معروفة.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 17:19، 5 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَشْحَنَ (L1537270) ==
'''أَشْحَنَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537270|18بك|ويكي بيانات: L1537270]] [[ملف:Wiktionary-logo.svg|وصلة=أَشْحَنَ|18بك|صفحة ويكاموس]] · الجذر: شحن · ([[toolforge:ar-senses/review/L1537270|رابط المُفردة في الأداة]])
المعنى اأخير لـ(أحشن) وليس لـ(أشحن).<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 07:29، 6 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَرَّى (L1537351) ==
'''شَرَّى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537351|18بك|ويكي بيانات: L1537351]] [[ملف:Wiktionary-logo.svg|وصلة=شَرَّى|18بك|صفحة ويكاموس]] · الجذر: شري · ([[toolforge:ar-senses/review/L1537351|رابط المُفردة في الأداة]])
لا أعلم إن كان حرف الراء مشددا أم لا.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:01، 7 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: شَرِفَ (L1544475) ==
'''شَرِفَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544475|18بك|ويكي بيانات: L1544475]] [[ملف:Wiktionary-logo.svg|وصلة=شَرِفَ|18بك|صفحة ويكاموس]] · الجذر: شرف · ([[toolforge:ar-senses/review/L1544475|رابط المُفردة في الأداة]])
هل هي بضم الراء أم بكسرها؟<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 16:54، 7 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَشْدَى (L1537300) ==
'''أَشْدَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1537300|18بك|ويكي بيانات: L1537300]] [[ملف:Wiktionary-logo.svg|وصلة=أَشْدَى|18بك|صفحة ويكاموس]] · الجذر: شدو · ([[toolforge:ar-senses/review/L1537300|رابط المُفردة في الأداة]])
استخراج الأداة خاطئ.<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. --> --[[مستخدم:أبو هشام|أبو هشام]] <sup>[[نقاش المستخدم:أبو هشام|«نقاش»]]</sup> 23:44، 8 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: جَاجَ (L1544958) ==
'''جَاجَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544958|18بك|ويكي بيانات: L1544958]] [[ملف:Wiktionary-logo.svg|وصلة=جَاجَ|18بك|صفحة ويكاموس]] · الجذر: جوج · ([[toolforge:ar-senses/review/L1544958|رابط المُفردة في الأداة]])
الفعل في المرجع جِيج من جذر جيج.--[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 12:36، 10 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: جَاثَ (L1544257) ==
'''جَاثَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1544257|18بك|ويكي بيانات: L1544257]] [[ملف:Wiktionary-logo.svg|وصلة=جَاثَ|18بك|صفحة ويكاموس]] · الجذر: جوث · ([[toolforge:ar-senses/review/L1544257|رابط المُفردة في الأداة]])
الفعل في المراجع "جوث"، وهناك فعل أخر "جأث" بمعنى آخر، لكن لم أجد المفردة "جاث" بهذا الشكل. --[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 12:53، 10 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: حَسَى (L1495990) ==
'''حَسَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1495990|18بك|ويكي بيانات: L1495990]] [[ملف:Wiktionary-logo.svg|وصلة=حَسَى|18بك|صفحة ويكاموس]] · الجذر: حسي · ([[toolforge:ar-senses/review/L1495990|رابط المُفردة في الأداة]])
<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. -->الفعل حَسَا من جذر حسو وليس حسى.--[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 11:39، 11 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: اِحْرَنْبَى (L1534310) ==
'''اِحْرَنْبَى''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534310|18بك|ويكي بيانات: L1534310]] [[ملف:Wiktionary-logo.svg|وصلة=اِحْرَنْبَى|18بك|صفحة ويكاموس]] · الجذر: حربي · ([[toolforge:ar-senses/review/L1534310|رابط المُفردة في الأداة]])
<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. -->أعتقد أن الجذر الصحيح "حربأ" وليس "حربي" حيث أن أصل الفعل احرنبأ، وأحيانا تقلب الهمزة إلى ألف مقصورة في أخر الفعل. --[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 11:47، 11 سبتمبر 2026 (ت ع م)
== بلاغ من أداة مراجعة المعاني: أَحَاذَ (L1534708) ==
'''أَحَاذَ''' [[ملف:Wikidata Favicon color.svg|وصلة=d:Lexeme:L1534708|18بك|ويكي بيانات: L1534708]] [[ملف:Wiktionary-logo.svg|وصلة=أَحَاذَ|18بك|صفحة ويكاموس]] · الجذر: حوذ · ([[toolforge:ar-senses/review/L1534708|رابط المُفردة في الأداة]])
<!-- اكتب وصف المشكلة هنا، قبل التوقيع. رجاءً لا تغيّر عنوان الموضوع ولا السطر الذي فوق هذا التعليق، فالأداة تعتمد عليهما في ربط النقاش بالمفردة. -->في المراجع أحوذ وليس أحاذ. مثال من تهذيب اللغة: يقال أحوذ الشيء، أي جمعه وضمه... ويقال: أحوذ الصانع القدح إذا أخفه. وغير ذلك من الأمثلة.--[[مستخدم:إسلام|إسلام]] ([[نقاش المستخدم:إسلام|نقاش]]) 11:55، 11 سبتمبر 2026 (ت ع م)
mw0rol9bif65wnf1lkc54i92bzuibmd
وحدة:ar-verb/شرح
828
240854
1159000
1158943
2026-09-10T12:39:06Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159000
wikitext
text/x-wiki
{{صفحة توثيق فرعية}}
تُصرِّف هذه الوحدة الأفعال العربية انطلاقا من '''جذر''' و'''وزن صرفي''': الماضي والمضارع بأوجهه، والأمر، مبنيةً للمعلوم وللمجهول، ومعها اسم الفاعل واسم المفعول والمصدر.
لا تُستدعى مباشرة في المقالات، بل من خلال [[قالب:تصريف]]:
<pre>
{{تصريف|جذر=كتب|وزن=فعَل يفعُل}}
</pre>
== نقاط الدخول ==
; <code>show</code>
: تعرض جدول التصريف. وهي ما يستدعيه [[قالب:تصريف]].
; <code>do_generate_forms</code>
: تُرجع الصيغ كلها في بنية واحدة، لتُفيد منها وحدة أخرى — وعليها تقوم [[وحدة:ar-verb-form]].
; <code>infer_radicals</code>
: تستخرج حروف الجذر من فعل مكتوب.
وللاطلاع على الصيغ في هيئة JSON:
<pre>
{{تصريف|جذر=كتب|وزن=فعَل يفعُل|json=1}}
</pre>
== ما تُعالجه ==
الأوزان الثلاثية والرباعية كلها، مجردةً ومزيدة — وجدولها في [[قالب:تصريف/شرح]]. ومعها المعتل بأنواعه (المثال والأجوف والناقص واللفيف)، والمضعَّف، والمهموز، والأفعال الشاذة مثل [[رَأَى]] و[[أَكَلَ]] و[[أَخَذَ]].
== وسائط أخرى ==
الوسائط <code>كامل</code> و<code>موسع</code> و<code>بؤرة</code> موصوفة في [[قالب:تصريف/شرح]]. والأخيران وُضعا لصفحات صيغ الأفعال.
== الاختبار ==
الاختبارات موزَّعة على مجموعات، لكلِّ مجموعة صفحةُ نتائجَ تُعرَض عند فتحها:
<!-- بداية قائمة مجموعات الاختبار — مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py، لا تُحرَّر يدويًّا -->
{| class="wikitable"
! المجموعة !! ما تختبره !! عدد الفحوص !! الصفحات
|-
| 0 || اختبارات مكتوبة يدويًّا على واجهة الوحدة: استخراج الجذور، وتشكيل المشتقّات، والوسائط والتجاوزات والحواشي، والأفعال الشاذّة || 235 || [[نقاش الوحدة:ar-verb/مختبر|النتائج]] · [[وحدة:ar-verb/مختبر|الوحدة]]
|-
| 1 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 1394 || [[نقاش الوحدة:ar-verb/testcases/1|النتائج]] · [[وحدة:ar-verb/testcases/1|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/1|البيانات]]
|-
| 2 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 1423 || [[نقاش الوحدة:ar-verb/testcases/2|النتائج]] · [[وحدة:ar-verb/testcases/2|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/2|البيانات]]
|-
| 3 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 1190 || [[نقاش الوحدة:ar-verb/testcases/3|النتائج]] · [[وحدة:ar-verb/testcases/3|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/3|البيانات]]
|-
| 4 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 930 || [[نقاش الوحدة:ar-verb/testcases/4|النتائج]] · [[وحدة:ar-verb/testcases/4|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/4|البيانات]]
|-
| 5 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 930 || [[نقاش الوحدة:ar-verb/testcases/5|النتائج]] · [[وحدة:ar-verb/testcases/5|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/5|البيانات]]
|-
| 6 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 930 || [[نقاش الوحدة:ar-verb/testcases/6|النتائج]] · [[وحدة:ar-verb/testcases/6|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/6|البيانات]]
|-
| 7 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 930 || [[نقاش الوحدة:ar-verb/testcases/7|النتائج]] · [[وحدة:ar-verb/testcases/7|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/7|البيانات]]
|-
| 8 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 928 || [[نقاش الوحدة:ar-verb/testcases/8|النتائج]] · [[وحدة:ar-verb/testcases/8|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/8|البيانات]]
|-
| 9 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 926 || [[نقاش الوحدة:ar-verb/testcases/9|النتائج]] · [[وحدة:ar-verb/testcases/9|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/9|البيانات]]
|-
| 10 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 929 || [[نقاش الوحدة:ar-verb/testcases/10|النتائج]] · [[وحدة:ar-verb/testcases/10|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/10|البيانات]]
|-
| 11 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 925 || [[نقاش الوحدة:ar-verb/testcases/11|النتائج]] · [[وحدة:ar-verb/testcases/11|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/11|البيانات]]
|-
| 12 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 929 || [[نقاش الوحدة:ar-verb/testcases/12|النتائج]] · [[وحدة:ar-verb/testcases/12|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/12|البيانات]]
|-
| 13 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 955 || [[نقاش الوحدة:ar-verb/testcases/13|النتائج]] · [[وحدة:ar-verb/testcases/13|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/13|البيانات]]
|-
| 14 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 930 || [[نقاش الوحدة:ar-verb/testcases/14|النتائج]] · [[وحدة:ar-verb/testcases/14|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/14|البيانات]]
|-
| 15 || 7 نماذج تصريفية من المرجع المطبوع || 217 || [[نقاش الوحدة:ar-verb/testcases/15|النتائج]] · [[وحدة:ar-verb/testcases/15|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/15|البيانات]]
|-
! المجموع !! 427 نموذجًا تصريفيًّا !! 14701 !!
|}
<!-- نهاية قائمة مجموعات الاختبار -->
والمجموعة 0 مكتوبة يدويًّا وتختبر واجهة الوحدة نفسها؛ وما بعدها مولَّد من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَل على «معجم تصريف الأفعال العربية» لأنطوان الدحداح، مكتبة لبنان ناشرون. والتقسيم على مجموعات ليبقى زمن المعالجة في كل صفحة دون الحدّ المسموح به. ولا تُحرَّر الصفحات المولَّدة هنا؛ يُحرَّر المستودع ثم تُولَّد من جديد.
ولتجربة استدعاء دون حفظ: [[Special:ExpandTemplates]].
== انظر أيضا ==
* [[قالب:تصريف]]
* [[وحدة:ar-verb-form]] — صفحات الصيغ المصرَّفة، وتقوم على هذه الوحدة
* [[قالب:صندوق معلومات فعل]]
a9r48skb5ngwefb1vi21x993mhkzwv8
1159058
1159000
2026-09-10T19:33:35Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159058
wikitext
text/x-wiki
{{صفحة توثيق فرعية}}
تُصرِّف هذه الوحدة الأفعال العربية انطلاقا من '''جذر''' و'''وزن صرفي''': الماضي والمضارع بأوجهه، والأمر، مبنيةً للمعلوم وللمجهول، ومعها اسم الفاعل واسم المفعول والمصدر.
لا تُستدعى مباشرة في المقالات، بل من خلال [[قالب:تصريف]]:
<pre>
{{تصريف|جذر=كتب|وزن=فعَل يفعُل}}
</pre>
== نقاط الدخول ==
; <code>show</code>
: تعرض جدول التصريف. وهي ما يستدعيه [[قالب:تصريف]].
; <code>do_generate_forms</code>
: تُرجع الصيغ كلها في بنية واحدة، لتُفيد منها وحدة أخرى — وعليها تقوم [[وحدة:ar-verb-form]].
; <code>infer_radicals</code>
: تستخرج حروف الجذر من فعل مكتوب.
وللاطلاع على الصيغ في هيئة JSON:
<pre>
{{تصريف|جذر=كتب|وزن=فعَل يفعُل|json=1}}
</pre>
== ما تُعالجه ==
الأوزان الثلاثية والرباعية كلها، مجردةً ومزيدة — وجدولها في [[قالب:تصريف/شرح]]. ومعها المعتل بأنواعه (المثال والأجوف والناقص واللفيف)، والمضعَّف، والمهموز، والأفعال الشاذة مثل [[رَأَى]] و[[أَكَلَ]] و[[أَخَذَ]].
== وسائط أخرى ==
الوسائط <code>كامل</code> و<code>موسع</code> و<code>بؤرة</code> موصوفة في [[قالب:تصريف/شرح]]. والأخيران وُضعا لصفحات صيغ الأفعال.
== الاختبار ==
الاختبارات موزَّعة على مجموعات، لكلِّ مجموعة صفحةُ نتائجَ تُعرَض عند فتحها:
<!-- بداية قائمة مجموعات الاختبار — مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py، لا تُحرَّر يدويًّا -->
{| class="wikitable"
! المجموعة !! ما تختبره !! عدد الفحوص !! الصفحات
|-
| 0 || اختبارات مكتوبة يدويًّا على واجهة الوحدة: استخراج الجذور، وتشكيل المشتقّات، والوسائط والتجاوزات والحواشي، والأفعال الشاذّة || 235 || [[نقاش الوحدة:ar-verb/مختبر|النتائج]] · [[وحدة:ar-verb/مختبر|الوحدة]]
|-
| 1 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 1394 || [[نقاش الوحدة:ar-verb/testcases/1|النتائج]] · [[وحدة:ar-verb/testcases/1|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/1|البيانات]]
|-
| 2 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 1423 || [[نقاش الوحدة:ar-verb/testcases/2|النتائج]] · [[وحدة:ar-verb/testcases/2|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/2|البيانات]]
|-
| 3 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 1190 || [[نقاش الوحدة:ar-verb/testcases/3|النتائج]] · [[وحدة:ar-verb/testcases/3|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/3|البيانات]]
|-
| 4 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 930 || [[نقاش الوحدة:ar-verb/testcases/4|النتائج]] · [[وحدة:ar-verb/testcases/4|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/4|البيانات]]
|-
| 5 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 930 || [[نقاش الوحدة:ar-verb/testcases/5|النتائج]] · [[وحدة:ar-verb/testcases/5|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/5|البيانات]]
|-
| 6 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 930 || [[نقاش الوحدة:ar-verb/testcases/6|النتائج]] · [[وحدة:ar-verb/testcases/6|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/6|البيانات]]
|-
| 7 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 930 || [[نقاش الوحدة:ar-verb/testcases/7|النتائج]] · [[وحدة:ar-verb/testcases/7|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/7|البيانات]]
|-
| 8 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 928 || [[نقاش الوحدة:ar-verb/testcases/8|النتائج]] · [[وحدة:ar-verb/testcases/8|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/8|البيانات]]
|-
| 9 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 926 || [[نقاش الوحدة:ar-verb/testcases/9|النتائج]] · [[وحدة:ar-verb/testcases/9|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/9|البيانات]]
|-
| 10 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 929 || [[نقاش الوحدة:ar-verb/testcases/10|النتائج]] · [[وحدة:ar-verb/testcases/10|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/10|البيانات]]
|-
| 11 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 925 || [[نقاش الوحدة:ar-verb/testcases/11|النتائج]] · [[وحدة:ar-verb/testcases/11|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/11|البيانات]]
|-
| 12 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 929 || [[نقاش الوحدة:ar-verb/testcases/12|النتائج]] · [[وحدة:ar-verb/testcases/12|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/12|البيانات]]
|-
| 13 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 955 || [[نقاش الوحدة:ar-verb/testcases/13|النتائج]] · [[وحدة:ar-verb/testcases/13|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/13|البيانات]]
|-
| 14 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 930 || [[نقاش الوحدة:ar-verb/testcases/14|النتائج]] · [[وحدة:ar-verb/testcases/14|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/14|البيانات]]
|-
| 15 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 919 || [[نقاش الوحدة:ar-verb/testcases/15|النتائج]] · [[وحدة:ar-verb/testcases/15|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/15|البيانات]]
|-
| 16 || 10 نماذج تصريفية من المرجع المطبوع || 307 || [[نقاش الوحدة:ar-verb/testcases/16|النتائج]] · [[وحدة:ar-verb/testcases/16|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/16|البيانات]]
|-
! المجموع !! 460 نموذجًا تصريفيًّا !! 15710 !!
|}
<!-- نهاية قائمة مجموعات الاختبار -->
والمجموعة 0 مكتوبة يدويًّا وتختبر واجهة الوحدة نفسها؛ وما بعدها مولَّد من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَل على «معجم تصريف الأفعال العربية» لأنطوان الدحداح، مكتبة لبنان ناشرون. والتقسيم على مجموعات ليبقى زمن المعالجة في كل صفحة دون الحدّ المسموح به. ولا تُحرَّر الصفحات المولَّدة هنا؛ يُحرَّر المستودع ثم تُولَّد من جديد.
ولتجربة استدعاء دون حفظ: [[Special:ExpandTemplates]].
== انظر أيضا ==
* [[قالب:تصريف]]
* [[وحدة:ar-verb-form]] — صفحات الصيغ المصرَّفة، وتقوم على هذه الوحدة
* [[قالب:صندوق معلومات فعل]]
fyaunhbukgvcowkd1l2q47a6wdsoyg0
1159108
1159058
2026-09-10T20:48:56Z
ForzaGreen
28665
إغلاق الاكتشاف ١٩: سالَ (نموذج ١٣٦) — صيغة الماضي المختصرة بالفتح إلى جانب الكسر، وفق حاشية الصفحة ٢٠٢
1159108
wikitext
text/x-wiki
{{صفحة توثيق فرعية}}
تُصرِّف هذه الوحدة الأفعال العربية انطلاقا من '''جذر''' و'''وزن صرفي''': الماضي والمضارع بأوجهه، والأمر، مبنيةً للمعلوم وللمجهول، ومعها اسم الفاعل واسم المفعول والمصدر.
لا تُستدعى مباشرة في المقالات، بل من خلال [[قالب:تصريف]]:
<pre>
{{تصريف|جذر=كتب|وزن=فعَل يفعُل}}
</pre>
== نقاط الدخول ==
; <code>show</code>
: تعرض جدول التصريف. وهي ما يستدعيه [[قالب:تصريف]].
; <code>do_generate_forms</code>
: تُرجع الصيغ كلها في بنية واحدة، لتُفيد منها وحدة أخرى — وعليها تقوم [[وحدة:ar-verb-form]].
; <code>infer_radicals</code>
: تستخرج حروف الجذر من فعل مكتوب.
وللاطلاع على الصيغ في هيئة JSON:
<pre>
{{تصريف|جذر=كتب|وزن=فعَل يفعُل|json=1}}
</pre>
== ما تُعالجه ==
الأوزان الثلاثية والرباعية كلها، مجردةً ومزيدة — وجدولها في [[قالب:تصريف/شرح]]. ومعها المعتل بأنواعه (المثال والأجوف والناقص واللفيف)، والمضعَّف، والمهموز، والأفعال الشاذة مثل [[رَأَى]] و[[أَكَلَ]] و[[أَخَذَ]].
== وسائط أخرى ==
الوسائط <code>كامل</code> و<code>موسع</code> و<code>بؤرة</code> موصوفة في [[قالب:تصريف/شرح]]. والأخيران وُضعا لصفحات صيغ الأفعال.
== الاختبار ==
الاختبارات موزَّعة على مجموعات، لكلِّ مجموعة صفحةُ نتائجَ تُعرَض عند فتحها:
<!-- بداية قائمة مجموعات الاختبار — مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py، لا تُحرَّر يدويًّا -->
{| class="wikitable"
! المجموعة !! ما تختبره !! عدد الفحوص !! الصفحات
|-
| 0 || اختبارات مكتوبة يدويًّا على واجهة الوحدة: استخراج الجذور، وتشكيل المشتقّات، والوسائط والتجاوزات والحواشي، والأفعال الشاذّة || 235 || [[نقاش الوحدة:ar-verb/مختبر|النتائج]] · [[وحدة:ar-verb/مختبر|الوحدة]]
|-
| 1 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 1394 || [[نقاش الوحدة:ar-verb/testcases/1|النتائج]] · [[وحدة:ar-verb/testcases/1|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/1|البيانات]]
|-
| 2 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 1423 || [[نقاش الوحدة:ar-verb/testcases/2|النتائج]] · [[وحدة:ar-verb/testcases/2|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/2|البيانات]]
|-
| 3 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 1190 || [[نقاش الوحدة:ar-verb/testcases/3|النتائج]] · [[وحدة:ar-verb/testcases/3|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/3|البيانات]]
|-
| 4 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 930 || [[نقاش الوحدة:ar-verb/testcases/4|النتائج]] · [[وحدة:ar-verb/testcases/4|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/4|البيانات]]
|-
| 5 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 930 || [[نقاش الوحدة:ar-verb/testcases/5|النتائج]] · [[وحدة:ar-verb/testcases/5|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/5|البيانات]]
|-
| 6 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 930 || [[نقاش الوحدة:ar-verb/testcases/6|النتائج]] · [[وحدة:ar-verb/testcases/6|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/6|البيانات]]
|-
| 7 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 930 || [[نقاش الوحدة:ar-verb/testcases/7|النتائج]] · [[وحدة:ar-verb/testcases/7|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/7|البيانات]]
|-
| 8 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 928 || [[نقاش الوحدة:ar-verb/testcases/8|النتائج]] · [[وحدة:ar-verb/testcases/8|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/8|البيانات]]
|-
| 9 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 926 || [[نقاش الوحدة:ar-verb/testcases/9|النتائج]] · [[وحدة:ar-verb/testcases/9|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/9|البيانات]]
|-
| 10 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 929 || [[نقاش الوحدة:ar-verb/testcases/10|النتائج]] · [[وحدة:ar-verb/testcases/10|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/10|البيانات]]
|-
| 11 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 925 || [[نقاش الوحدة:ar-verb/testcases/11|النتائج]] · [[وحدة:ar-verb/testcases/11|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/11|البيانات]]
|-
| 12 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 929 || [[نقاش الوحدة:ar-verb/testcases/12|النتائج]] · [[وحدة:ar-verb/testcases/12|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/12|البيانات]]
|-
| 13 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 955 || [[نقاش الوحدة:ar-verb/testcases/13|النتائج]] · [[وحدة:ar-verb/testcases/13|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/13|البيانات]]
|-
| 14 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 930 || [[نقاش الوحدة:ar-verb/testcases/14|النتائج]] · [[وحدة:ar-verb/testcases/14|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/14|البيانات]]
|-
| 15 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 927 || [[نقاش الوحدة:ar-verb/testcases/15|النتائج]] · [[وحدة:ar-verb/testcases/15|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/15|البيانات]]
|-
| 16 || 10 نماذج تصريفية من المرجع المطبوع || 307 || [[نقاش الوحدة:ar-verb/testcases/16|النتائج]] · [[وحدة:ar-verb/testcases/16|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/16|البيانات]]
|-
! المجموع !! 460 نموذجًا تصريفيًّا !! 15718 !!
|}
<!-- نهاية قائمة مجموعات الاختبار -->
والمجموعة 0 مكتوبة يدويًّا وتختبر واجهة الوحدة نفسها؛ وما بعدها مولَّد من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَل على «معجم تصريف الأفعال العربية» لأنطوان الدحداح، مكتبة لبنان ناشرون. والتقسيم على مجموعات ليبقى زمن المعالجة في كل صفحة دون الحدّ المسموح به. ولا تُحرَّر الصفحات المولَّدة هنا؛ يُحرَّر المستودع ثم تُولَّد من جديد.
ولتجربة استدعاء دون حفظ: [[Special:ExpandTemplates]].
== انظر أيضا ==
* [[قالب:تصريف]]
* [[وحدة:ar-verb-form]] — صفحات الصيغ المصرَّفة، وتقوم على هذه الوحدة
* [[قالب:صندوق معلومات فعل]]
syocz976d8fg778ovd39mhebnv5d28t
1159119
1159108
2026-09-11T00:31:06Z
ForzaGreen
28665
المصنّف يميّز اللفيف المقرون المُضعَّف؛ حذف تصنيفات insert_cat المعطّلة؛ تحديث عدّاد اختبارات المجموعة 0
1159119
wikitext
text/x-wiki
{{صفحة توثيق فرعية}}
تُصرِّف هذه الوحدة الأفعال العربية انطلاقا من '''جذر''' و'''وزن صرفي''': الماضي والمضارع بأوجهه، والأمر، مبنيةً للمعلوم وللمجهول، ومعها اسم الفاعل واسم المفعول والمصدر.
لا تُستدعى مباشرة في المقالات، بل من خلال [[قالب:تصريف]]:
<pre>
{{تصريف|جذر=كتب|وزن=فعَل يفعُل}}
</pre>
== نقاط الدخول ==
; <code>show</code>
: تعرض جدول التصريف. وهي ما يستدعيه [[قالب:تصريف]].
; <code>do_generate_forms</code>
: تُرجع الصيغ كلها في بنية واحدة، لتُفيد منها وحدة أخرى — وعليها تقوم [[وحدة:ar-verb-form]].
; <code>infer_radicals</code>
: تستخرج حروف الجذر من فعل مكتوب.
وللاطلاع على الصيغ في هيئة JSON:
<pre>
{{تصريف|جذر=كتب|وزن=فعَل يفعُل|json=1}}
</pre>
== ما تُعالجه ==
الأوزان الثلاثية والرباعية كلها، مجردةً ومزيدة — وجدولها في [[قالب:تصريف/شرح]]. ومعها المعتل بأنواعه (المثال والأجوف والناقص واللفيف)، والمضعَّف، والمهموز، والأفعال الشاذة مثل [[رَأَى]] و[[أَكَلَ]] و[[أَخَذَ]].
== وسائط أخرى ==
الوسائط <code>كامل</code> و<code>موسع</code> و<code>بؤرة</code> موصوفة في [[قالب:تصريف/شرح]]. والأخيران وُضعا لصفحات صيغ الأفعال.
== الاختبار ==
الاختبارات موزَّعة على مجموعات، لكلِّ مجموعة صفحةُ نتائجَ تُعرَض عند فتحها:
<!-- بداية قائمة مجموعات الاختبار — مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py، لا تُحرَّر يدويًّا -->
{| class="wikitable"
! المجموعة !! ما تختبره !! عدد الفحوص !! الصفحات
|-
| 0 || اختبارات مكتوبة يدويًّا على واجهة الوحدة: استخراج الجذور، وتشكيل المشتقّات، والوسائط والتجاوزات والحواشي، والأفعال الشاذّة || 237 || [[نقاش الوحدة:ar-verb/مختبر|النتائج]] · [[وحدة:ar-verb/مختبر|الوحدة]]
|-
| 1 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 1394 || [[نقاش الوحدة:ar-verb/testcases/1|النتائج]] · [[وحدة:ar-verb/testcases/1|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/1|البيانات]]
|-
| 2 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 1423 || [[نقاش الوحدة:ar-verb/testcases/2|النتائج]] · [[وحدة:ar-verb/testcases/2|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/2|البيانات]]
|-
| 3 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 1190 || [[نقاش الوحدة:ar-verb/testcases/3|النتائج]] · [[وحدة:ar-verb/testcases/3|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/3|البيانات]]
|-
| 4 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 930 || [[نقاش الوحدة:ar-verb/testcases/4|النتائج]] · [[وحدة:ar-verb/testcases/4|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/4|البيانات]]
|-
| 5 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 930 || [[نقاش الوحدة:ar-verb/testcases/5|النتائج]] · [[وحدة:ar-verb/testcases/5|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/5|البيانات]]
|-
| 6 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 930 || [[نقاش الوحدة:ar-verb/testcases/6|النتائج]] · [[وحدة:ar-verb/testcases/6|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/6|البيانات]]
|-
| 7 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 930 || [[نقاش الوحدة:ar-verb/testcases/7|النتائج]] · [[وحدة:ar-verb/testcases/7|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/7|البيانات]]
|-
| 8 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 928 || [[نقاش الوحدة:ar-verb/testcases/8|النتائج]] · [[وحدة:ar-verb/testcases/8|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/8|البيانات]]
|-
| 9 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 926 || [[نقاش الوحدة:ar-verb/testcases/9|النتائج]] · [[وحدة:ar-verb/testcases/9|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/9|البيانات]]
|-
| 10 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 929 || [[نقاش الوحدة:ar-verb/testcases/10|النتائج]] · [[وحدة:ar-verb/testcases/10|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/10|البيانات]]
|-
| 11 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 925 || [[نقاش الوحدة:ar-verb/testcases/11|النتائج]] · [[وحدة:ar-verb/testcases/11|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/11|البيانات]]
|-
| 12 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 929 || [[نقاش الوحدة:ar-verb/testcases/12|النتائج]] · [[وحدة:ar-verb/testcases/12|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/12|البيانات]]
|-
| 13 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 955 || [[نقاش الوحدة:ar-verb/testcases/13|النتائج]] · [[وحدة:ar-verb/testcases/13|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/13|البيانات]]
|-
| 14 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 930 || [[نقاش الوحدة:ar-verb/testcases/14|النتائج]] · [[وحدة:ar-verb/testcases/14|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/14|البيانات]]
|-
| 15 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 927 || [[نقاش الوحدة:ar-verb/testcases/15|النتائج]] · [[وحدة:ar-verb/testcases/15|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/15|البيانات]]
|-
| 16 || 10 نماذج تصريفية من المرجع المطبوع || 307 || [[نقاش الوحدة:ar-verb/testcases/16|النتائج]] · [[وحدة:ar-verb/testcases/16|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/16|البيانات]]
|-
! المجموع !! 460 نموذجًا تصريفيًّا !! 15720 !!
|}
<!-- نهاية قائمة مجموعات الاختبار -->
والمجموعة 0 مكتوبة يدويًّا وتختبر واجهة الوحدة نفسها؛ وما بعدها مولَّد من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَل على «معجم تصريف الأفعال العربية» لأنطوان الدحداح، مكتبة لبنان ناشرون. والتقسيم على مجموعات ليبقى زمن المعالجة في كل صفحة دون الحدّ المسموح به. ولا تُحرَّر الصفحات المولَّدة هنا؛ يُحرَّر المستودع ثم تُولَّد من جديد.
ولتجربة استدعاء دون حفظ: [[Special:ExpandTemplates]].
== انظر أيضا ==
* [[قالب:تصريف]]
* [[وحدة:ar-verb-form]] — صفحات الصيغ المصرَّفة، وتقوم على هذه الوحدة
* [[قالب:صندوق معلومات فعل]]
docm52ojlrbz34fxhkxnn80k83h51lg
1159134
1159119
2026-09-11T08:04:05Z
ForzaGreen
28665
corpus 462 paradigms: p204 رأى و p254 يبس، وتدقيق ملاحظات المرجع
1159134
wikitext
text/x-wiki
{{صفحة توثيق فرعية}}
تُصرِّف هذه الوحدة الأفعال العربية انطلاقا من '''جذر''' و'''وزن صرفي''': الماضي والمضارع بأوجهه، والأمر، مبنيةً للمعلوم وللمجهول، ومعها اسم الفاعل واسم المفعول والمصدر.
لا تُستدعى مباشرة في المقالات، بل من خلال [[قالب:تصريف]]:
<pre>
{{تصريف|جذر=كتب|وزن=فعَل يفعُل}}
</pre>
== نقاط الدخول ==
; <code>show</code>
: تعرض جدول التصريف. وهي ما يستدعيه [[قالب:تصريف]].
; <code>do_generate_forms</code>
: تُرجع الصيغ كلها في بنية واحدة، لتُفيد منها وحدة أخرى — وعليها تقوم [[وحدة:ar-verb-form]].
; <code>infer_radicals</code>
: تستخرج حروف الجذر من فعل مكتوب.
وللاطلاع على الصيغ في هيئة JSON:
<pre>
{{تصريف|جذر=كتب|وزن=فعَل يفعُل|json=1}}
</pre>
== ما تُعالجه ==
الأوزان الثلاثية والرباعية كلها، مجردةً ومزيدة — وجدولها في [[قالب:تصريف/شرح]]. ومعها المعتل بأنواعه (المثال والأجوف والناقص واللفيف)، والمضعَّف، والمهموز، والأفعال الشاذة مثل [[رَأَى]] و[[أَكَلَ]] و[[أَخَذَ]].
== وسائط أخرى ==
الوسائط <code>كامل</code> و<code>موسع</code> و<code>بؤرة</code> موصوفة في [[قالب:تصريف/شرح]]. والأخيران وُضعا لصفحات صيغ الأفعال.
== الاختبار ==
الاختبارات موزَّعة على مجموعات، لكلِّ مجموعة صفحةُ نتائجَ تُعرَض عند فتحها:
<!-- بداية قائمة مجموعات الاختبار — مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py، لا تُحرَّر يدويًّا -->
{| class="wikitable"
! المجموعة !! ما تختبره !! عدد الفحوص !! الصفحات
|-
| 0 || اختبارات مكتوبة يدويًّا على واجهة الوحدة: استخراج الجذور، وتشكيل المشتقّات، والوسائط والتجاوزات والحواشي، والأفعال الشاذّة || 237 || [[نقاش الوحدة:ar-verb/مختبر|النتائج]] · [[وحدة:ar-verb/مختبر|الوحدة]]
|-
| 1 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 1394 || [[نقاش الوحدة:ar-verb/testcases/1|النتائج]] · [[وحدة:ar-verb/testcases/1|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/1|البيانات]]
|-
| 2 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 1423 || [[نقاش الوحدة:ar-verb/testcases/2|النتائج]] · [[وحدة:ar-verb/testcases/2|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/2|البيانات]]
|-
| 3 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 1190 || [[نقاش الوحدة:ar-verb/testcases/3|النتائج]] · [[وحدة:ar-verb/testcases/3|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/3|البيانات]]
|-
| 4 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 930 || [[نقاش الوحدة:ar-verb/testcases/4|النتائج]] · [[وحدة:ar-verb/testcases/4|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/4|البيانات]]
|-
| 5 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 930 || [[نقاش الوحدة:ar-verb/testcases/5|النتائج]] · [[وحدة:ar-verb/testcases/5|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/5|البيانات]]
|-
| 6 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 930 || [[نقاش الوحدة:ar-verb/testcases/6|النتائج]] · [[وحدة:ar-verb/testcases/6|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/6|البيانات]]
|-
| 7 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 930 || [[نقاش الوحدة:ar-verb/testcases/7|النتائج]] · [[وحدة:ar-verb/testcases/7|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/7|البيانات]]
|-
| 8 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 928 || [[نقاش الوحدة:ar-verb/testcases/8|النتائج]] · [[وحدة:ar-verb/testcases/8|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/8|البيانات]]
|-
| 9 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 926 || [[نقاش الوحدة:ar-verb/testcases/9|النتائج]] · [[وحدة:ar-verb/testcases/9|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/9|البيانات]]
|-
| 10 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 929 || [[نقاش الوحدة:ar-verb/testcases/10|النتائج]] · [[وحدة:ar-verb/testcases/10|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/10|البيانات]]
|-
| 11 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 925 || [[نقاش الوحدة:ar-verb/testcases/11|النتائج]] · [[وحدة:ar-verb/testcases/11|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/11|البيانات]]
|-
| 12 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 929 || [[نقاش الوحدة:ar-verb/testcases/12|النتائج]] · [[وحدة:ar-verb/testcases/12|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/12|البيانات]]
|-
| 13 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 955 || [[نقاش الوحدة:ar-verb/testcases/13|النتائج]] · [[وحدة:ar-verb/testcases/13|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/13|البيانات]]
|-
| 14 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 930 || [[نقاش الوحدة:ar-verb/testcases/14|النتائج]] · [[وحدة:ar-verb/testcases/14|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/14|البيانات]]
|-
| 15 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 927 || [[نقاش الوحدة:ar-verb/testcases/15|النتائج]] · [[وحدة:ar-verb/testcases/15|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/15|البيانات]]
|-
| 16 || 12 نموذجًا تصريفيًّا من المرجع المطبوع || 369 || [[نقاش الوحدة:ar-verb/testcases/16|النتائج]] · [[وحدة:ar-verb/testcases/16|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/16|البيانات]]
|-
! المجموع !! 462 نموذجًا تصريفيًّا !! 15782 !!
|}
<!-- نهاية قائمة مجموعات الاختبار -->
والمجموعة 0 مكتوبة يدويًّا وتختبر واجهة الوحدة نفسها؛ وما بعدها مولَّد من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَل على «معجم تصريف الأفعال العربية» لأنطوان الدحداح، مكتبة لبنان ناشرون. والتقسيم على مجموعات ليبقى زمن المعالجة في كل صفحة دون الحدّ المسموح به. ولا تُحرَّر الصفحات المولَّدة هنا؛ يُحرَّر المستودع ثم تُولَّد من جديد.
ولتجربة استدعاء دون حفظ: [[Special:ExpandTemplates]].
== انظر أيضا ==
* [[قالب:تصريف]]
* [[وحدة:ar-verb-form]] — صفحات الصيغ المصرَّفة، وتقوم على هذه الوحدة
* [[قالب:صندوق معلومات فعل]]
cfvw7sd7llxq0x92jxba1qvmsvjves0
1159137
1159134
2026-09-11T08:33:43Z
ForzaGreen
28665
corpus 462 paradigms / 15549 cells: خلايا اِظَّنَّ، وإدغام عَيَّ في وحدة ar-verb
1159137
wikitext
text/x-wiki
{{صفحة توثيق فرعية}}
تُصرِّف هذه الوحدة الأفعال العربية انطلاقا من '''جذر''' و'''وزن صرفي''': الماضي والمضارع بأوجهه، والأمر، مبنيةً للمعلوم وللمجهول، ومعها اسم الفاعل واسم المفعول والمصدر.
لا تُستدعى مباشرة في المقالات، بل من خلال [[قالب:تصريف]]:
<pre>
{{تصريف|جذر=كتب|وزن=فعَل يفعُل}}
</pre>
== نقاط الدخول ==
; <code>show</code>
: تعرض جدول التصريف. وهي ما يستدعيه [[قالب:تصريف]].
; <code>do_generate_forms</code>
: تُرجع الصيغ كلها في بنية واحدة، لتُفيد منها وحدة أخرى — وعليها تقوم [[وحدة:ar-verb-form]].
; <code>infer_radicals</code>
: تستخرج حروف الجذر من فعل مكتوب.
وللاطلاع على الصيغ في هيئة JSON:
<pre>
{{تصريف|جذر=كتب|وزن=فعَل يفعُل|json=1}}
</pre>
== ما تُعالجه ==
الأوزان الثلاثية والرباعية كلها، مجردةً ومزيدة — وجدولها في [[قالب:تصريف/شرح]]. ومعها المعتل بأنواعه (المثال والأجوف والناقص واللفيف)، والمضعَّف، والمهموز، والأفعال الشاذة مثل [[رَأَى]] و[[أَكَلَ]] و[[أَخَذَ]].
== وسائط أخرى ==
الوسائط <code>كامل</code> و<code>موسع</code> و<code>بؤرة</code> موصوفة في [[قالب:تصريف/شرح]]. والأخيران وُضعا لصفحات صيغ الأفعال.
== الاختبار ==
الاختبارات موزَّعة على مجموعات، لكلِّ مجموعة صفحةُ نتائجَ تُعرَض عند فتحها:
<!-- بداية قائمة مجموعات الاختبار — مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py، لا تُحرَّر يدويًّا -->
{| class="wikitable"
! المجموعة !! ما تختبره !! عدد الفحوص !! الصفحات
|-
| 0 || اختبارات مكتوبة يدويًّا على واجهة الوحدة: استخراج الجذور، وتشكيل المشتقّات، والوسائط والتجاوزات والحواشي، والأفعال الشاذّة || 237 || [[نقاش الوحدة:ar-verb/مختبر|النتائج]] · [[وحدة:ar-verb/مختبر|الوحدة]]
|-
| 1 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 1398 || [[نقاش الوحدة:ar-verb/testcases/1|النتائج]] · [[وحدة:ar-verb/testcases/1|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/1|البيانات]]
|-
| 2 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 1423 || [[نقاش الوحدة:ar-verb/testcases/2|النتائج]] · [[وحدة:ar-verb/testcases/2|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/2|البيانات]]
|-
| 3 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 1190 || [[نقاش الوحدة:ar-verb/testcases/3|النتائج]] · [[وحدة:ar-verb/testcases/3|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/3|البيانات]]
|-
| 4 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 930 || [[نقاش الوحدة:ar-verb/testcases/4|النتائج]] · [[وحدة:ar-verb/testcases/4|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/4|البيانات]]
|-
| 5 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 930 || [[نقاش الوحدة:ar-verb/testcases/5|النتائج]] · [[وحدة:ar-verb/testcases/5|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/5|البيانات]]
|-
| 6 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 930 || [[نقاش الوحدة:ar-verb/testcases/6|النتائج]] · [[وحدة:ar-verb/testcases/6|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/6|البيانات]]
|-
| 7 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 930 || [[نقاش الوحدة:ar-verb/testcases/7|النتائج]] · [[وحدة:ar-verb/testcases/7|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/7|البيانات]]
|-
| 8 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 928 || [[نقاش الوحدة:ar-verb/testcases/8|النتائج]] · [[وحدة:ar-verb/testcases/8|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/8|البيانات]]
|-
| 9 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 926 || [[نقاش الوحدة:ar-verb/testcases/9|النتائج]] · [[وحدة:ar-verb/testcases/9|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/9|البيانات]]
|-
| 10 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 929 || [[نقاش الوحدة:ar-verb/testcases/10|النتائج]] · [[وحدة:ar-verb/testcases/10|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/10|البيانات]]
|-
| 11 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 925 || [[نقاش الوحدة:ar-verb/testcases/11|النتائج]] · [[وحدة:ar-verb/testcases/11|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/11|البيانات]]
|-
| 12 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 929 || [[نقاش الوحدة:ar-verb/testcases/12|النتائج]] · [[وحدة:ar-verb/testcases/12|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/12|البيانات]]
|-
| 13 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 955 || [[نقاش الوحدة:ar-verb/testcases/13|النتائج]] · [[وحدة:ar-verb/testcases/13|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/13|البيانات]]
|-
| 14 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 930 || [[نقاش الوحدة:ar-verb/testcases/14|النتائج]] · [[وحدة:ar-verb/testcases/14|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/14|البيانات]]
|-
| 15 || 30 نموذجًا تصريفيًّا من المرجع المطبوع || 927 || [[نقاش الوحدة:ar-verb/testcases/15|النتائج]] · [[وحدة:ar-verb/testcases/15|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/15|البيانات]]
|-
| 16 || 12 نموذجًا تصريفيًّا من المرجع المطبوع || 369 || [[نقاش الوحدة:ar-verb/testcases/16|النتائج]] · [[وحدة:ar-verb/testcases/16|الوحدة]] · [[وحدة:ar-verb/testcases/بيانات/16|البيانات]]
|-
! المجموع !! 462 نموذجًا تصريفيًّا !! 15786 !!
|}
<!-- نهاية قائمة مجموعات الاختبار -->
والمجموعة 0 مكتوبة يدويًّا وتختبر واجهة الوحدة نفسها؛ وما بعدها مولَّد من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَل على «معجم تصريف الأفعال العربية» لأنطوان الدحداح، مكتبة لبنان ناشرون. والتقسيم على مجموعات ليبقى زمن المعالجة في كل صفحة دون الحدّ المسموح به. ولا تُحرَّر الصفحات المولَّدة هنا؛ يُحرَّر المستودع ثم تُولَّد من جديد.
ولتجربة استدعاء دون حفظ: [[Special:ExpandTemplates]].
== انظر أيضا ==
* [[قالب:تصريف]]
* [[وحدة:ar-verb-form]] — صفحات الصيغ المصرَّفة، وتقوم على هذه الوحدة
* [[قالب:صندوق معلومات فعل]]
816oe28nskvxuo83njecu9zibo3j8xd
وحدة:ar-verb/testcases/بيانات/1
828
241788
1159001
1158869
2026-09-10T12:39:08Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159001
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 1 من 15.
return {
{
label = "فَعَلَ ـُ (p.125, abstract paradigm)", root = "فعل", wazn = "فعَل يفعُل",
pass = true,
forms = {
{"imp_2d", "اُفْعُلَا"},
{"imp_2fp", "اُفْعُلْنَ"},
{"imp_2fs", "اُفْعُلِي"},
{"imp_2mp", "اُفْعُلُوا"},
{"imp_2ms", "اُفْعُلْ"},
{"ind_1p", "نَفْعُلُ"},
{"ind_1s", "أَفْعُلُ"},
{"ind_2d", "تَفْعُلَانِ"},
{"ind_2fp", "تَفْعُلْنَ"},
{"ind_2fs", "تَفْعُلِينَ"},
{"ind_2mp", "تَفْعُلُونَ"},
{"ind_2ms", "تَفْعُلُ"},
{"ind_3fd", "تَفْعُلَانِ"},
{"ind_3fp", "يَفْعُلْنَ"},
{"ind_3fs", "تَفْعُلُ"},
{"ind_3md", "يَفْعُلَانِ"},
{"ind_3mp", "يَفْعُلُونَ"},
{"ind_3ms", "يَفْعُلُ"},
{"ind_pass_1p", "نُفْعَلُ"},
{"ind_pass_1s", "أُفْعَلُ"},
{"ind_pass_2d", "تُفْعَلَانِ"},
{"ind_pass_2fp", "تُفْعَلْنَ"},
{"ind_pass_2fs", "تُفْعَلِينَ"},
{"ind_pass_2mp", "تُفْعَلُونَ"},
{"ind_pass_2ms", "تُفْعَلُ"},
{"ind_pass_3fd", "تُفْعَلَانِ"},
{"ind_pass_3fp", "يُفْعَلْنَ"},
{"ind_pass_3fs", "تُفْعَلُ"},
{"ind_pass_3md", "يُفْعَلَانِ"},
{"ind_pass_3mp", "يُفْعَلُونَ"},
{"ind_pass_3ms", "يُفْعَلُ"},
{"past_1p", "فَعَلْنَا"},
{"past_1s", "فَعَلْتُ"},
{"past_2d", "فَعَلْتُمَا"},
{"past_2fp", "فَعَلْتُنَّ"},
{"past_2fs", "فَعَلْتِ"},
{"past_2mp", "فَعَلْتُمْ"},
{"past_2ms", "فَعَلْتَ"},
{"past_3fd", "فَعَلَتَا"},
{"past_3fp", "فَعَلْنَ"},
{"past_3fs", "فَعَلَتْ"},
{"past_3md", "فَعَلَا"},
{"past_3mp", "فَعَلُوا"},
{"past_3ms", "فَعَلَ"},
{"past_pass_1p", "فُعِلْنَا"},
{"past_pass_1s", "فُعِلْتُ"},
{"past_pass_2d", "فُعِلْتُمَا"},
{"past_pass_2fp", "فُعِلْتُنَّ"},
{"past_pass_2fs", "فُعِلْتِ"},
{"past_pass_2mp", "فُعِلْتُمْ"},
{"past_pass_2ms", "فُعِلْتَ"},
{"past_pass_3fd", "فُعِلَتَا"},
{"past_pass_3fp", "فُعِلْنَ"},
{"past_pass_3fs", "فُعِلَتْ"},
{"past_pass_3md", "فُعِلَا"},
{"past_pass_3mp", "فُعِلُوا"},
{"past_pass_3ms", "فُعِلَ"},
},
},
{
label = "رَؤُفَ (p.198)", root = "رأف", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُرْؤُفَا"},
{"imp_2fp", "اُرْؤُفْنَ"},
{"imp_2fs", "اُرْؤُفِي"},
{"imp_2mp", "اُرْؤُفُوا"},
{"imp_2ms", "اُرْؤُفْ"},
{"ind_1p", "نَرْؤُفُ"},
{"ind_1s", "أَرْؤُفُ"},
{"ind_2d", "تَرْؤُفَانِ"},
{"ind_2fp", "تَرْؤُفْنَ"},
{"ind_2fs", "تَرْؤُفِينَ"},
{"ind_2mp", "تَرْؤُفُونَ"},
{"ind_2ms", "تَرْؤُفُ"},
{"ind_3fd", "تَرْؤُفَانِ"},
{"ind_3fp", "يَرْؤُفْنَ"},
{"ind_3fs", "تَرْؤُفُ"},
{"ind_3md", "يَرْؤُفَانِ"},
{"ind_3mp", "يَرْؤُفُونَ"},
{"ind_3ms", "يَرْؤُفُ"},
{"past_1p", "رَؤُفْنَا"},
{"past_1s", "رَؤُفْتُ"},
{"past_2d", "رَؤُفْتُمَا"},
{"past_2fp", "رَؤُفْتُنَّ"},
{"past_2fs", "رَؤُفْتِ"},
{"past_2mp", "رَؤُفْتُمْ"},
{"past_2ms", "رَؤُفْتَ"},
{"past_3fd", "رَؤُفَتَا"},
{"past_3fp", "رَؤُفْنَ"},
{"past_3fs", "رَؤُفَتْ"},
{"past_3md", "رَؤُفَا"},
{"past_3mp", "رَؤُفُوا"},
{"past_3ms", "رَؤُفَ"},
},
},
{
label = "ضَؤُلَ (p.198)", root = "ضأل", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُضْؤُلَا"},
{"imp_2fp", "اُضْؤُلْنَ"},
{"imp_2fs", "اُضْؤُلِي"},
{"imp_2mp", "اُضْؤُلُوا"},
{"imp_2ms", "اُضْؤُلْ"},
{"ind_1p", "نَضْؤُلُ"},
{"ind_1s", "أَضْؤُلُ"},
{"ind_2d", "تَضْؤُلَانِ"},
{"ind_2fp", "تَضْؤُلْنَ"},
{"ind_2fs", "تَضْؤُلِينَ"},
{"ind_2mp", "تَضْؤُلُونَ"},
{"ind_2ms", "تَضْؤُلُ"},
{"ind_3fd", "تَضْؤُلَانِ"},
{"ind_3fp", "يَضْؤُلْنَ"},
{"ind_3fs", "تَضْؤُلُ"},
{"ind_3md", "يَضْؤُلَانِ"},
{"ind_3mp", "يَضْؤُلُونَ"},
{"ind_3ms", "يَضْؤُلُ"},
{"past_1p", "ضَؤُلْنَا"},
{"past_1s", "ضَؤُلْتُ"},
{"past_2d", "ضَؤُلْتُمَا"},
{"past_2fp", "ضَؤُلْتُنَّ"},
{"past_2fs", "ضَؤُلْتِ"},
{"past_2mp", "ضَؤُلْتُمْ"},
{"past_2ms", "ضَؤُلْتَ"},
{"past_3fd", "ضَؤُلَتَا"},
{"past_3fp", "ضَؤُلْنَ"},
{"past_3fs", "ضَؤُلَتْ"},
{"past_3md", "ضَؤُلَا"},
{"past_3mp", "ضَؤُلُوا"},
{"past_3ms", "ضَؤُلَ"},
},
},
{
label = "آخَذَ (p.260)", root = "أخذ", wazn = "فاعل",
forms = {
{"imp_2d", "آخِذَا"},
{"imp_2fp", "آخِذْنَ"},
{"imp_2fs", "آخِذِي"},
{"imp_2mp", "آخِذُوا"},
{"imp_2ms", "آخِذْ"},
{"ind_1p", "نُؤَاخِذُ"},
{"ind_1s", "أُؤَاخِذُ"},
{"ind_2d", "تُؤَاخِذَانِ"},
{"ind_2fp", "تُؤَاخِذْنَ"},
{"ind_2fs", "تُؤَاخِذِينَ"},
{"ind_2mp", "تُؤَاخِذُونَ"},
{"ind_2ms", "تُؤَاخِذُ"},
{"ind_3fd", "تُؤَاخِذَانِ"},
{"ind_3fp", "يُؤَاخِذْنَ"},
{"ind_3fs", "تُؤَاخِذُ"},
{"ind_3md", "يُؤَاخِذَانِ"},
{"ind_3mp", "يُؤَاخِذُونَ"},
{"ind_3ms", "يُؤَاخِذُ"},
{"past_1p", "آخَذْنَا"},
{"past_1s", "آخَذْتُ"},
{"past_2d", "آخَذْتُمَا"},
{"past_2fp", "آخَذْتُنَّ"},
{"past_2fs", "آخَذْتِ"},
{"past_2mp", "آخَذْتُمْ"},
{"past_2ms", "آخَذْتَ"},
{"past_3fd", "آخَذَتَا"},
{"past_3fp", "آخَذْنَ"},
{"past_3fs", "آخَذَتْ"},
{"past_3md", "آخَذَا"},
{"past_3mp", "آخَذُوا"},
{"past_3ms", "آخَذَ"},
},
},
{
label = "اِدَّعَمَ (p.334)", root = "دعم", wazn = "افتعل",
forms = {
{"imp_2d", "اِدَّعِمَا"},
{"imp_2fp", "اِدَّعِمْنَ"},
{"imp_2fs", "اِدَّعِمِي"},
{"imp_2mp", "اِدَّعِمُوا"},
{"imp_2ms", "اِدَّعِمْ"},
{"ind_1p", "نَدَّعِمُ"},
{"ind_1s", "أَدَّعِمُ"},
{"ind_2d", "تَدَّعِمَانِ"},
{"ind_2fp", "تَدَّعِمْنَ"},
{"ind_2fs", "تَدَّعِمِينَ"},
{"ind_2mp", "تَدَّعِمُونَ"},
{"ind_2ms", "تَدَّعِمُ"},
{"ind_3fd", "تَدَّعِمَانِ"},
{"ind_3fp", "يَدَّعِمْنَ"},
{"ind_3fs", "تَدَّعِمُ"},
{"ind_3md", "يَدَّعِمَانِ"},
{"ind_3mp", "يَدَّعِمُونَ"},
{"ind_3ms", "يَدَّعِمُ"},
{"past_1p", "اِدَّعَمْنَا"},
{"past_1s", "اِدَّعَمْتُ"},
{"past_2d", "اِدَّعَمْتُمَا"},
{"past_2fp", "اِدَّعَمْتُنَّ"},
{"past_2fs", "اِدَّعَمْتِ"},
{"past_2mp", "اِدَّعَمْتُمْ"},
{"past_2ms", "اِدَّعَمْتَ"},
{"past_3fd", "اِدَّعَمَتَا"},
{"past_3fp", "اِدَّعَمْنَ"},
{"past_3fs", "اِدَّعَمَتْ"},
{"past_3md", "اِدَّعَمَا"},
{"past_3mp", "اِدَّعَمُوا"},
{"past_3ms", "اِدَّعَمَ"},
},
},
{
label = "هَنَأَ ـُ (p.135، مهموز اللام)", root = "هنأ", wazn = "فعَل يفعُل",
pass = true,
forms = {
{"imp_2d", "اُهْنُؤَا"},
{"imp_2fp", "اُهْنُؤْنَ"},
{"imp_2fs", "اُهْنُئِي"},
{"imp_2mp", "اُهْنُؤُوا"},
{"imp_2ms", "اُهْنُؤْ"},
{"ind_1p", "نَهْنُؤُ"},
{"ind_1s", "أَهْنُؤُ"},
{"ind_2d", "تَهْنُؤَانِ"},
{"ind_2fp", "تَهْنُؤْنَ"},
{"ind_2fs", "تَهْنُئِينَ"},
{"ind_2mp", "تَهْنُؤُونَ"},
{"ind_2ms", "تَهْنُؤُ"},
{"ind_3fd", "تَهْنُؤَانِ"},
{"ind_3fp", "يَهْنُؤْنَ"},
{"ind_3fs", "تَهْنُؤُ"},
{"ind_3md", "يَهْنُؤَانِ"},
{"ind_3mp", "يَهْنُؤُونَ"},
{"ind_3ms", "يَهْنُؤُ"},
{"ind_pass_1p", "نُهْنَأُ"},
{"ind_pass_1s", "أُهْنَأُ"},
{"ind_pass_2d", "تُهْنَآنِ"},
{"ind_pass_2fp", "تُهْنَأْنَ"},
{"ind_pass_2fs", "تُهْنَئِينَ"},
{"ind_pass_2mp", "تُهْنَؤُونَ"},
{"ind_pass_2ms", "تُهْنَأُ"},
{"ind_pass_3fd", "تُهْنَآنِ"},
{"ind_pass_3fp", "يُهْنَأْنَ"},
{"ind_pass_3fs", "تُهْنَأُ"},
{"ind_pass_3md", "يُهْنَآنِ"},
{"ind_pass_3mp", "يُهْنَؤُونَ"},
{"ind_pass_3ms", "يُهْنَأُ"},
{"past_1p", "هَنَأْنَا"},
{"past_1s", "هَنَأْتُ"},
{"past_2d", "هَنَأْتُمَا"},
{"past_2fp", "هَنَأْتُنَّ"},
{"past_2fs", "هَنَأْتِ"},
{"past_2mp", "هَنَأْتُمْ"},
{"past_2ms", "هَنَأْتَ"},
{"past_3fd", "هَنَأَتَا"},
{"past_3fp", "هَنَأْنَ"},
{"past_3fs", "هَنَأَتْ"},
{"past_3md", "هَنَآ"},
{"past_3mp", "هَنَؤُوا"},
{"past_3ms", "هَنَأَ"},
{"past_pass_1p", "هُنِئْنَا"},
{"past_pass_1s", "هُنِئْتُ"},
{"past_pass_2d", "هُنِئْتُمَا"},
{"past_pass_2fp", "هُنِئْتُنَّ"},
{"past_pass_2fs", "هُنِئْتِ"},
{"past_pass_2mp", "هُنِئْتُمْ"},
{"past_pass_2ms", "هُنِئْتَ"},
{"past_pass_3fd", "هُنِئَتَا"},
{"past_pass_3fp", "هُنِئْنَ"},
{"past_pass_3fs", "هُنِئَتْ"},
{"past_pass_3md", "هُنِئَا"},
{"past_pass_3mp", "هُنِئُوا"},
{"past_pass_3ms", "هُنِئَ"},
},
},
{
label = "دَعا ـُ (p.141، ناقص واوي)", root = "دعو", wazn = "فعَل يفعُل",
pass = true,
forms = {
{"imp_2d", "اُدْعُوَا"},
{"imp_2fp", "اُدْعُونَ"},
{"imp_2fs", "اُدْعِي"},
{"imp_2mp", "اُدْعُوا"},
{"imp_2ms", "اُدْعُ"},
{"ind_1p", "نَدْعُو"},
{"ind_1s", "أَدْعُو"},
{"ind_2d", "تَدْعُوَانِ"},
{"ind_2fp", "تَدْعُونَ"},
{"ind_2fs", "تَدْعِينَ"},
{"ind_2mp", "تَدْعُونَ"},
{"ind_2ms", "تَدْعُو"},
{"ind_3fd", "تَدْعُوَانِ"},
{"ind_3fp", "يَدْعُونَ"},
{"ind_3fs", "تَدْعُو"},
{"ind_3md", "يَدْعُوَانِ"},
{"ind_3mp", "يَدْعُونَ"},
{"ind_3ms", "يَدْعُو"},
{"ind_pass_1p", "نُدْعَى"},
{"ind_pass_1s", "أُدْعَى"},
{"ind_pass_2d", "تُدْعَيَانِ"},
{"ind_pass_2fp", "تُدْعَيْنَ"},
{"ind_pass_2fs", "تُدْعَيْنَ"},
{"ind_pass_2mp", "تُدْعَوْنَ"},
{"ind_pass_2ms", "تُدْعَى"},
{"ind_pass_3fd", "تُدْعَيَانِ"},
{"ind_pass_3fp", "يُدْعَيْنَ"},
{"ind_pass_3fs", "تُدْعَى"},
{"ind_pass_3md", "يُدْعَيَانِ"},
{"ind_pass_3mp", "يُدْعَوْنَ"},
{"ind_pass_3ms", "يُدْعَى"},
{"past_1p", "دَعَوْنَا"},
{"past_1s", "دَعَوْتُ"},
{"past_2d", "دَعَوْتُمَا"},
{"past_2fp", "دَعَوْتُنَّ"},
{"past_2fs", "دَعَوْتِ"},
{"past_2mp", "دَعَوْتُمْ"},
{"past_2ms", "دَعَوْتَ"},
{"past_3fd", "دَعَتَا"},
{"past_3fp", "دَعَوْنَ"},
{"past_3fs", "دَعَتْ"},
{"past_3md", "دَعَوَا"},
{"past_3mp", "دَعَوْا"},
{"past_3ms", "دَعَا"},
{"past_pass_1p", "دُعِينَا"},
{"past_pass_1s", "دُعِيتُ"},
{"past_pass_2d", "دُعِيتُمَا"},
{"past_pass_2fp", "دُعِيتُنَّ"},
{"past_pass_2fs", "دُعِيتِ"},
{"past_pass_2mp", "دُعِيتُمْ"},
{"past_pass_2ms", "دُعِيتَ"},
{"past_pass_3fd", "دُعِيَتَا"},
{"past_pass_3fp", "دُعِينَ"},
{"past_pass_3fs", "دُعِيَتْ"},
{"past_pass_3md", "دُعِيَا"},
{"past_pass_3mp", "دُعُوا"},
{"past_pass_3ms", "دُعِيَ"},
},
},
{
label = "هَيُؤَ ـُ (p.203، أجوف على فعُل)", root = "هيأ", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُهْيُؤَا"},
{"imp_2fp", "اُهْيُؤْنَ"},
{"imp_2fs", "اُهْيُئِي"},
{"imp_2mp", "اُهْيُؤُوا"},
{"imp_2ms", "اُهْيُؤْ"},
{"ind_1p", "نَهْيُؤُ"},
{"ind_1s", "أَهْيُؤُ"},
{"ind_2d", "تَهْيُؤَانِ"},
{"ind_2fp", "تَهْيُؤْنَ"},
{"ind_2fs", "تَهْيُئِينَ"},
{"ind_2mp", "تَهْيُؤُونَ"},
{"ind_2ms", "تَهْيُؤُ"},
{"ind_3fd", "تَهْيُؤَانِ"},
{"ind_3fp", "يَهْيُؤْنَ"},
{"ind_3fs", "تَهْيُؤُ"},
{"ind_3md", "يَهْيُؤَانِ"},
{"ind_3mp", "يَهْيُؤُونَ"},
{"ind_3ms", "يَهْيُؤُ"},
{"past_1p", "هَيُؤْنَا"},
{"past_1s", "هَيُؤْتُ"},
{"past_2d", "هَيُؤْتُمَا"},
{"past_2fp", "هَيُؤْتُنَّ"},
{"past_2fs", "هَيُؤْتِ"},
{"past_2mp", "هَيُؤْتُمْ"},
{"past_2ms", "هَيُؤْتَ"},
{"past_3fd", "هَيُؤَتَا"},
{"past_3fp", "هَيُؤْنَ"},
{"past_3fs", "هَيُؤَتْ"},
{"past_3md", "هَيُؤَا"},
{"past_3mp", "هَيُؤُوا"},
{"past_3ms", "هَيُؤَ"},
},
},
{
label = "وَفَى ـِ (p.164، لفيف مفروق)", root = "وفي", wazn = "فعَل يفعِل",
pass = true,
forms = {
{"imp_2d", "فِيَا"},
{"imp_2fp", "فِينَ"},
{"imp_2fs", "فِي"},
{"imp_2mp", "فُوا"},
{"imp_2ms", "فِ"},
{"ind_1p", "نَفِي"},
{"ind_1s", "أَفِي"},
{"ind_2d", "تَفِيَانِ"},
{"ind_2fp", "تَفِينَ"},
{"ind_2fs", "تَفِينَ"},
{"ind_2mp", "تَفُونَ"},
{"ind_2ms", "تَفِي"},
{"ind_3fd", "تَفِيَانِ"},
{"ind_3fp", "يَفِينَ"},
{"ind_3fs", "تَفِي"},
{"ind_3md", "يَفِيَانِ"},
{"ind_3mp", "يَفُونَ"},
{"ind_3ms", "يَفِي"},
{"ind_pass_1p", "نُوفَى"},
{"ind_pass_1s", "أُوفَى"},
{"ind_pass_2d", "تُوفَيَانِ"},
{"ind_pass_2fp", "تُوفَيْنَ"},
{"ind_pass_2fs", "تُوفَيْنَ"},
{"ind_pass_2mp", "تُوفَوْنَ"},
{"ind_pass_2ms", "تُوفَى"},
{"ind_pass_3fd", "تُوفَيَانِ"},
{"ind_pass_3fp", "يُوفَيْنَ"},
{"ind_pass_3fs", "تُوفَى"},
{"ind_pass_3md", "يُوفَيَانِ"},
{"ind_pass_3mp", "يُوفَوْنَ"},
{"ind_pass_3ms", "يُوفَى"},
{"past_1p", "وَفَيْنَا"},
{"past_1s", "وَفَيْتُ"},
{"past_2d", "وَفَيْتُمَا"},
{"past_2fp", "وَفَيْتُنَّ"},
{"past_2fs", "وَفَيْتِ"},
{"past_2mp", "وَفَيْتُمْ"},
{"past_2ms", "وَفَيْتَ"},
{"past_3fd", "وَفَتَا"},
{"past_3fp", "وَفَيْنَ"},
{"past_3fs", "وَفَتْ"},
{"past_3md", "وَفَيَا"},
{"past_3mp", "وَفَوْا"},
{"past_3ms", "وَفَى"},
{"past_pass_1p", "وُفِينَا"},
{"past_pass_1s", "وُفِيتُ"},
{"past_pass_2d", "وُفِيتُمَا"},
{"past_pass_2fp", "وُفِيتُنَّ"},
{"past_pass_2fs", "وُفِيتِ"},
{"past_pass_2mp", "وُفِيتُمْ"},
{"past_pass_2ms", "وُفِيتَ"},
{"past_pass_3fd", "وُفِيَتَا"},
{"past_pass_3fp", "وُفِينَ"},
{"past_pass_3fs", "وُفِيَتْ"},
{"past_pass_3md", "وُفِيَا"},
{"past_pass_3mp", "وُفُوا"},
{"past_pass_3ms", "وُفِيَ"},
},
},
{
label = "وَلِيَ ـِ (p.238، لفيف مفروق)", root = "ولي", wazn = "فعِل يفعِل",
pass = true,
forms = {
{"imp_2d", "لِيَا"},
{"imp_2fp", "لِينَ"},
{"imp_2fs", "لِي"},
{"imp_2mp", "لُوا"},
{"imp_2ms", "لِ"},
{"ind_1p", "نَلِي"},
{"ind_1s", "أَلِي"},
{"ind_2d", "تَلِيَانِ"},
{"ind_2fp", "تَلِينَ"},
{"ind_2fs", "تَلِينَ"},
{"ind_2mp", "تَلُونَ"},
{"ind_2ms", "تَلِي"},
{"ind_3fd", "تَلِيَانِ"},
{"ind_3fp", "يَلِينَ"},
{"ind_3fs", "تَلِي"},
{"ind_3md", "يَلِيَانِ"},
{"ind_3mp", "يَلُونَ"},
{"ind_3ms", "يَلِي"},
{"ind_pass_1p", "نُولَى"},
{"ind_pass_1s", "أُولَى"},
{"ind_pass_2d", "تُولَيَانِ"},
{"ind_pass_2fp", "تُولَيْنَ"},
{"ind_pass_2fs", "تُولَيْنَ"},
{"ind_pass_2mp", "تُولَوْنَ"},
{"ind_pass_2ms", "تُولَى"},
{"ind_pass_3fd", "تُولَيَانِ"},
{"ind_pass_3fp", "يُولَيْنَ"},
{"ind_pass_3fs", "تُولَى"},
{"ind_pass_3md", "يُولَيَانِ"},
{"ind_pass_3mp", "يُولَوْنَ"},
{"ind_pass_3ms", "يُولَى"},
{"past_1p", "وَلِينَا"},
{"past_1s", "وَلِيتُ"},
{"past_2d", "وَلِيتُمَا"},
{"past_2fp", "وَلِيتُنَّ"},
{"past_2fs", "وَلِيتِ"},
{"past_2mp", "وَلِيتُمْ"},
{"past_2ms", "وَلِيتَ"},
{"past_3fd", "وَلِيَتَا"},
{"past_3fp", "وَلِينَ"},
{"past_3fs", "وَلِيَتْ"},
{"past_3md", "وَلِيَا"},
{"past_3mp", "وَلُوا"},
{"past_3ms", "وَلِيَ"},
{"past_pass_1p", "وُلِينَا"},
{"past_pass_1s", "وُلِيتُ"},
{"past_pass_2d", "وُلِيتُمَا"},
{"past_pass_2fp", "وُلِيتُنَّ"},
{"past_pass_2fs", "وُلِيتِ"},
{"past_pass_2mp", "وُلِيتُمْ"},
{"past_pass_2ms", "وُلِيتَ"},
{"past_pass_3fd", "وُلِيَتَا"},
{"past_pass_3fp", "وُلِينَ"},
{"past_pass_3fs", "وُلِيَتْ"},
{"past_pass_3md", "وُلِيَا"},
{"past_pass_3mp", "وُلُوا"},
{"past_pass_3ms", "وُلِيَ"},
},
},
{
label = "تَفاعَلَ (p.302، الوزن السادس)", root = "فعل", wazn = "تفاعل",
pass = true,
forms = {
{"imp_2d", "تَفَاعَلَا"},
{"imp_2fp", "تَفَاعَلْنَ"},
{"imp_2fs", "تَفَاعَلِي"},
{"imp_2mp", "تَفَاعَلُوا"},
{"imp_2ms", "تَفَاعَلْ"},
{"ind_1p", "نَتَفَاعَلُ"},
{"ind_1s", "أَتَفَاعَلُ"},
{"ind_2d", "تَتَفَاعَلَانِ"},
{"ind_2fp", "تَتَفَاعَلْنَ"},
{"ind_2fs", "تَتَفَاعَلِينَ"},
{"ind_2mp", "تَتَفَاعَلُونَ"},
{"ind_2ms", "تَتَفَاعَلُ"},
{"ind_3fd", "تَتَفَاعَلَانِ"},
{"ind_3fp", "يَتَفَاعَلْنَ"},
{"ind_3fs", "تَتَفَاعَلُ"},
{"ind_3md", "يَتَفَاعَلَانِ"},
{"ind_3mp", "يَتَفَاعَلُونَ"},
{"ind_3ms", "يَتَفَاعَلُ"},
{"ind_pass_1p", "نُتَفَاعَلُ"},
{"ind_pass_1s", "أُتَفَاعَلُ"},
{"ind_pass_2d", "تُتَفَاعَلَانِ"},
{"ind_pass_2fp", "تُتَفَاعَلْنَ"},
{"ind_pass_2fs", "تُتَفَاعَلِينَ"},
{"ind_pass_2mp", "تُتَفَاعَلُونَ"},
{"ind_pass_2ms", "تُتَفَاعَلُ"},
{"ind_pass_3fd", "تُتَفَاعَلَانِ"},
{"ind_pass_3fp", "يُتَفَاعَلْنَ"},
{"ind_pass_3fs", "تُتَفَاعَلُ"},
{"ind_pass_3md", "يُتَفَاعَلَانِ"},
{"ind_pass_3mp", "يُتَفَاعَلُونَ"},
{"ind_pass_3ms", "يُتَفَاعَلُ"},
{"past_1p", "تَفَاعَلْنَا"},
{"past_1s", "تَفَاعَلْتُ"},
{"past_2d", "تَفَاعَلْتُمَا"},
{"past_2fp", "تَفَاعَلْتُنَّ"},
{"past_2fs", "تَفَاعَلْتِ"},
{"past_2mp", "تَفَاعَلْتُمْ"},
{"past_2ms", "تَفَاعَلْتَ"},
{"past_3fd", "تَفَاعَلَتَا"},
{"past_3fp", "تَفَاعَلْنَ"},
{"past_3fs", "تَفَاعَلَتْ"},
{"past_3md", "تَفَاعَلَا"},
{"past_3mp", "تَفَاعَلُوا"},
{"past_3ms", "تَفَاعَلَ"},
{"past_pass_1p", "تُفُوعِلْنَا"},
{"past_pass_1s", "تُفُوعِلْتُ"},
{"past_pass_2d", "تُفُوعِلْتُمَا"},
{"past_pass_2fp", "تُفُوعِلْتُنَّ"},
{"past_pass_2fs", "تُفُوعِلْتِ"},
{"past_pass_2mp", "تُفُوعِلْتُمْ"},
{"past_pass_2ms", "تُفُوعِلْتَ"},
{"past_pass_3fd", "تُفُوعِلَتَا"},
{"past_pass_3fp", "تُفُوعِلْنَ"},
{"past_pass_3fs", "تُفُوعِلَتْ"},
{"past_pass_3md", "تُفُوعِلَا"},
{"past_pass_3mp", "تُفُوعِلُوا"},
{"past_pass_3ms", "تُفُوعِلَ"},
},
},
{
label = "فَرَّ ـِ (p.147، مضاعف)", root = "فرر", wazn = "فعَل يفعِل",
pass = true,
forms = {
{"imp_2d", "فِرَّا"},
{"imp_2fp", "اِفْرِرْنَ"},
{"imp_2fs", "فِرِّي"},
{"imp_2mp", "فِرُّوا"},
{"imp_2ms", "فِرَّ"},
{"ind_1p", "نَفِرُّ"},
{"ind_1s", "أَفِرُّ"},
{"ind_2d", "تَفِرَّانِ"},
{"ind_2fp", "تَفْرِرْنَ"},
{"ind_2fs", "تَفِرِّينَ"},
{"ind_2mp", "تَفِرُّونَ"},
{"ind_2ms", "تَفِرُّ"},
{"ind_3fd", "تَفِرَّانِ"},
{"ind_3fp", "يَفْرِرْنَ"},
{"ind_3fs", "تَفِرُّ"},
{"ind_3md", "يَفِرَّانِ"},
{"ind_3mp", "يَفِرُّونَ"},
{"ind_3ms", "يَفِرُّ"},
{"ind_pass_1p", "نُفَرُّ"},
{"ind_pass_1s", "أُفَرُّ"},
{"ind_pass_2d", "تُفَرَّانِ"},
{"ind_pass_2fp", "تُفْرَرْنَ"},
{"ind_pass_2fs", "تُفَرِّينَ"},
{"ind_pass_2mp", "تُفَرُّونَ"},
{"ind_pass_2ms", "تُفَرُّ"},
{"ind_pass_3fd", "تُفَرَّانِ"},
{"ind_pass_3fp", "يُفْرَرْنَ"},
{"ind_pass_3fs", "تُفَرُّ"},
{"ind_pass_3md", "يُفَرَّانِ"},
{"ind_pass_3mp", "يُفَرُّونَ"},
{"ind_pass_3ms", "يُفَرُّ"},
{"past_1p", "فَرَرْنَا"},
{"past_1s", "فَرَرْتُ"},
{"past_2d", "فَرَرْتُمَا"},
{"past_2fp", "فَرَرْتُنَّ"},
{"past_2fs", "فَرَرْتِ"},
{"past_2mp", "فَرَرْتُمْ"},
{"past_2ms", "فَرَرْتَ"},
{"past_3fd", "فَرَّتَا"},
{"past_3fp", "فَرَرْنَ"},
{"past_3fs", "فَرَّتْ"},
{"past_3md", "فَرَّا"},
{"past_3mp", "فَرُّوا"},
{"past_3ms", "فَرَّ"},
{"past_pass_1p", "فُرِرْنَا"},
{"past_pass_1s", "فُرِرْتُ"},
{"past_pass_2d", "فُرِرْتُمَا"},
{"past_pass_2fp", "فُرِرْتُنَّ"},
{"past_pass_2fs", "فُرِرْتِ"},
{"past_pass_2mp", "فُرِرْتُمْ"},
{"past_pass_2ms", "فُرِرْتَ"},
{"past_pass_3fd", "فُرَّتَا"},
{"past_pass_3fp", "فُرِرْنَ"},
{"past_pass_3fs", "فُرَّتْ"},
{"past_pass_3md", "فُرَّا"},
{"past_pass_3mp", "فُرُّوا"},
{"past_pass_3ms", "فُرَّ"},
},
},
{
label = "خافَ ـَ (p.222، أجوف واوي)", root = "خوف", wazn = "فعِل يفعَل",
pass = true,
forms = {
{"imp_2d", "خَافَا"},
{"imp_2fp", "خَفْنَ"},
{"imp_2fs", "خَافِي"},
{"imp_2mp", "خَافُوا"},
{"imp_2ms", "خَفْ"},
{"ind_1p", "نَخَافُ"},
{"ind_1s", "أَخَافُ"},
{"ind_2d", "تَخَافَانِ"},
{"ind_2fp", "تَخَفْنَ"},
{"ind_2fs", "تَخَافِينَ"},
{"ind_2mp", "تَخَافُونَ"},
{"ind_2ms", "تَخَافُ"},
{"ind_3fd", "تَخَافَانِ"},
{"ind_3fp", "يَخَفْنَ"},
{"ind_3fs", "تَخَافُ"},
{"ind_3md", "يَخَافَانِ"},
{"ind_3mp", "يَخَافُونَ"},
{"ind_3ms", "يَخَافُ"},
{"ind_pass_1p", "نُخَافُ"},
{"ind_pass_1s", "أُخَافُ"},
{"ind_pass_2d", "تُخَافَانِ"},
{"ind_pass_2fp", "تُخَفْنَ"},
{"ind_pass_2fs", "تُخَافِينَ"},
{"ind_pass_2mp", "تُخَافُونَ"},
{"ind_pass_2ms", "تُخَافُ"},
{"ind_pass_3fd", "تُخَافَانِ"},
{"ind_pass_3fp", "يُخَفْنَ"},
{"ind_pass_3fs", "تُخَافُ"},
{"ind_pass_3md", "يُخَافَانِ"},
{"ind_pass_3mp", "يُخَافُونَ"},
{"ind_pass_3ms", "يُخَافُ"},
{"past_1p", "خِفْنَا"},
{"past_1s", "خِفْتُ"},
{"past_2d", "خِفْتُمَا"},
{"past_2fp", "خِفْتُنَّ"},
{"past_2fs", "خِفْتِ"},
{"past_2mp", "خِفْتُمْ"},
{"past_2ms", "خِفْتَ"},
{"past_3fd", "خَافَتَا"},
{"past_3fp", "خِفْنَ"},
{"past_3fs", "خَافَتْ"},
{"past_3md", "خَافَا"},
{"past_3mp", "خَافُوا"},
{"past_3ms", "خَافَ"},
{"past_pass_1p", "خُفْنَا"},
{"past_pass_1s", "خُفْتُ"},
{"past_pass_2d", "خُفْتُمَا"},
{"past_pass_2fp", "خُفْتُنَّ"},
{"past_pass_2fs", "خُفْتِ"},
{"past_pass_2mp", "خُفْتُمْ"},
{"past_pass_2ms", "خُفْتَ"},
{"past_pass_3fd", "خِيفَتَا"},
{"past_pass_3fp", "خُفْنَ"},
{"past_pass_3fs", "خِيفَتْ"},
{"past_pass_3md", "خِيفَا"},
{"past_pass_3mp", "خِيفُوا"},
{"past_pass_3ms", "خِيفَ"},
},
},
{
label = "فَعْلَلَ (p.385، رباعي مجرد)", root = "فعلل", wazn = "فعلل",
pass = true,
forms = {
{"imp_2d", "فَعْلِلَا"},
{"imp_2fp", "فَعْلِلْنَ"},
{"imp_2fs", "فَعْلِلِي"},
{"imp_2mp", "فَعْلِلُوا"},
{"imp_2ms", "فَعْلِلْ"},
{"ind_1p", "نُفَعْلِلُ"},
{"ind_1s", "أُفَعْلِلُ"},
{"ind_2d", "تُفَعْلِلَانِ"},
{"ind_2fp", "تُفَعْلِلْنَ"},
{"ind_2fs", "تُفَعْلِلِينَ"},
{"ind_2mp", "تُفَعْلِلُونَ"},
{"ind_2ms", "تُفَعْلِلُ"},
{"ind_3fd", "تُفَعْلِلَانِ"},
{"ind_3fp", "يُفَعْلِلْنَ"},
{"ind_3fs", "تُفَعْلِلُ"},
{"ind_3md", "يُفَعْلِلَانِ"},
{"ind_3mp", "يُفَعْلِلُونَ"},
{"ind_3ms", "يُفَعْلِلُ"},
{"ind_pass_1p", "نُفَعْلَلُ"},
{"ind_pass_1s", "أُفَعْلَلُ"},
{"ind_pass_2d", "تُفَعْلَلَانِ"},
{"ind_pass_2fp", "تُفَعْلَلْنَ"},
{"ind_pass_2fs", "تُفَعْلَلِينَ"},
{"ind_pass_2mp", "تُفَعْلَلُونَ"},
{"ind_pass_2ms", "تُفَعْلَلُ"},
{"ind_pass_3fd", "تُفَعْلَلَانِ"},
{"ind_pass_3fp", "يُفَعْلَلْنَ"},
{"ind_pass_3fs", "تُفَعْلَلُ"},
{"ind_pass_3md", "يُفَعْلَلَانِ"},
{"ind_pass_3mp", "يُفَعْلَلُونَ"},
{"ind_pass_3ms", "يُفَعْلَلُ"},
{"past_1p", "فَعْلَلْنَا"},
{"past_1s", "فَعْلَلْتُ"},
{"past_2d", "فَعْلَلْتُمَا"},
{"past_2fp", "فَعْلَلْتُنَّ"},
{"past_2fs", "فَعْلَلْتِ"},
{"past_2mp", "فَعْلَلْتُمْ"},
{"past_2ms", "فَعْلَلْتَ"},
{"past_3fd", "فَعْلَلَتَا"},
{"past_3fp", "فَعْلَلْنَ"},
{"past_3fs", "فَعْلَلَتْ"},
{"past_3md", "فَعْلَلَا"},
{"past_3mp", "فَعْلَلُوا"},
{"past_3ms", "فَعْلَلَ"},
{"past_pass_1p", "فُعْلِلْنَا"},
{"past_pass_1s", "فُعْلِلْتُ"},
{"past_pass_2d", "فُعْلِلْتُمَا"},
{"past_pass_2fp", "فُعْلِلْتُنَّ"},
{"past_pass_2fs", "فُعْلِلْتِ"},
{"past_pass_2mp", "فُعْلِلْتُمْ"},
{"past_pass_2ms", "فُعْلِلْتَ"},
{"past_pass_3fd", "فُعْلِلَتَا"},
{"past_pass_3fp", "فُعْلِلْنَ"},
{"past_pass_3fs", "فُعْلِلَتْ"},
{"past_pass_3md", "فُعْلِلَا"},
{"past_pass_3mp", "فُعْلِلُوا"},
{"past_pass_3ms", "فُعْلِلَ"},
},
},
{
label = "اِسَّمَّعَ (p.287، تفعّل مدغم)", root = "سمع", wazn = "تفعّل",
reduced = true,
forms = {
{"imp_2d", "اِسَّمَّعَا"},
{"imp_2fp", "اِسَّمَّعْنَ"},
{"imp_2fs", "اِسَّمَّعِي"},
{"imp_2mp", "اِسَّمَّعُوا"},
{"imp_2ms", "اِسَّمَّعْ"},
{"ind_1p", "نَسَّمَّعُ"},
{"ind_1s", "أَسَّمَّعُ"},
{"ind_2d", "تَسَّمَّعَانِ"},
{"ind_2fp", "تَسَّمَّعْنَ"},
{"ind_2fs", "تَسَّمَّعِينَ"},
{"ind_2mp", "تَسَّمَّعُونَ"},
{"ind_2ms", "تَسَّمَّعُ"},
{"ind_3fd", "تَسَّمَّعَانِ"},
{"ind_3fp", "يَسَّمَّعْنَ"},
{"ind_3fs", "تَسَّمَّعُ"},
{"ind_3md", "يَسَّمَّعَانِ"},
{"ind_3mp", "يَسَّمَّعُونَ"},
{"ind_3ms", "يَسَّمَّعُ"},
{"past_1p", "اِسَّمَّعْنَا"},
{"past_1s", "اِسَّمَّعْتُ"},
{"past_2d", "اِسَّمَّعْتُمَا"},
{"past_2fp", "اِسَّمَّعْتُنَّ"},
{"past_2fs", "اِسَّمَّعْتِ"},
{"past_2mp", "اِسَّمَّعْتُمْ"},
{"past_2ms", "اِسَّمَّعْتَ"},
{"past_3fd", "اِسَّمَّعَتَا"},
{"past_3fp", "اِسَّمَّعْنَ"},
{"past_3fs", "اِسَّمَّعَتْ"},
{"past_3md", "اِسَّمَّعَا"},
{"past_3mp", "اِسَّمَّعُوا"},
{"past_3ms", "اِسَّمَّعَ"},
},
},
{
label = "فَعَّلَ (p.241، الوزن الثاني)", root = "فعل", wazn = "فعّل",
pass = true,
forms = {
{"imp_2d", "فَعِّلَا"},
{"imp_2fp", "فَعِّلْنَ"},
{"imp_2fs", "فَعِّلِي"},
{"imp_2mp", "فَعِّلُوا"},
{"imp_2ms", "فَعِّلْ"},
{"ind_1p", "نُفَعِّلُ"},
{"ind_1s", "أُفَعِّلُ"},
{"ind_2d", "تُفَعِّلَانِ"},
{"ind_2fp", "تُفَعِّلْنَ"},
{"ind_2fs", "تُفَعِّلِينَ"},
{"ind_2mp", "تُفَعِّلُونَ"},
{"ind_2ms", "تُفَعِّلُ"},
{"ind_3fd", "تُفَعِّلَانِ"},
{"ind_3fp", "يُفَعِّلْنَ"},
{"ind_3fs", "تُفَعِّلُ"},
{"ind_3md", "يُفَعِّلَانِ"},
{"ind_3mp", "يُفَعِّلُونَ"},
{"ind_3ms", "يُفَعِّلُ"},
{"ind_pass_1p", "نُفَعَّلُ"},
{"ind_pass_1s", "أُفَعَّلُ"},
{"ind_pass_2d", "تُفَعَّلَانِ"},
{"ind_pass_2fp", "تُفَعَّلْنَ"},
{"ind_pass_2fs", "تُفَعَّلِينَ"},
{"ind_pass_2mp", "تُفَعَّلُونَ"},
{"ind_pass_2ms", "تُفَعَّلُ"},
{"ind_pass_3fd", "تُفَعَّلَانِ"},
{"ind_pass_3fp", "يُفَعَّلْنَ"},
{"ind_pass_3fs", "تُفَعَّلُ"},
{"ind_pass_3md", "يُفَعَّلَانِ"},
{"ind_pass_3mp", "يُفَعَّلُونَ"},
{"ind_pass_3ms", "يُفَعَّلُ"},
{"past_1p", "فَعَّلْنَا"},
{"past_1s", "فَعَّلْتُ"},
{"past_2d", "فَعَّلْتُمَا"},
{"past_2fp", "فَعَّلْتُنَّ"},
{"past_2fs", "فَعَّلْتِ"},
{"past_2mp", "فَعَّلْتُمْ"},
{"past_2ms", "فَعَّلْتَ"},
{"past_3fd", "فَعَّلَتَا"},
{"past_3fp", "فَعَّلْنَ"},
{"past_3fs", "فَعَّلَتْ"},
{"past_3md", "فَعَّلَا"},
{"past_3mp", "فَعَّلُوا"},
{"past_3ms", "فَعَّلَ"},
{"past_pass_1p", "فُعِّلْنَا"},
{"past_pass_1s", "فُعِّلْتُ"},
{"past_pass_2d", "فُعِّلْتُمَا"},
{"past_pass_2fp", "فُعِّلْتُنَّ"},
{"past_pass_2fs", "فُعِّلْتِ"},
{"past_pass_2mp", "فُعِّلْتُمْ"},
{"past_pass_2ms", "فُعِّلْتَ"},
{"past_pass_3fd", "فُعِّلَتَا"},
{"past_pass_3fp", "فُعِّلْنَ"},
{"past_pass_3fs", "فُعِّلَتْ"},
{"past_pass_3md", "فُعِّلَا"},
{"past_pass_3mp", "فُعِّلُوا"},
{"past_pass_3ms", "فُعِّلَ"},
},
},
{
label = "حَيِيَ ـَ (p.229، لفيف مقرون)", root = "حيي", wazn = "فعِل يفعَل",
pass = true,
forms = {
{"imp_2d", "اِحْيَيَا"},
{"imp_2fp", "اِحْيَيْنَ"},
{"imp_2fs", "اِحْيَيْ"},
{"imp_2mp", "اِحْيَوْا"},
{"imp_2ms", "اِحْيَ"},
{"ind_1p", "نَحْيَا"},
{"ind_1s", "أَحْيَا"},
{"ind_2d", "تَحْيَيَانِ"},
{"ind_2fp", "تَحْيَيْنَ"},
{"ind_2fs", "تَحْيَيْنَ"},
{"ind_2mp", "تَحْيَوْنَ"},
{"ind_2ms", "تَحْيَا"},
{"ind_3fd", "تَحْيَيَانِ"},
{"ind_3fp", "يَحْيَيْنَ"},
{"ind_3fs", "تَحْيَا"},
{"ind_3md", "يَحْيَيَانِ"},
{"ind_3mp", "يَحْيَوْنَ"},
{"ind_3ms", "يَحْيَا"},
{"ind_pass_1p", "نُحْيَا"},
{"ind_pass_1s", "أُحْيَا"},
{"ind_pass_2d", "تُحْيَيَانِ"},
{"ind_pass_2fp", "تُحْيَيْنَ"},
{"ind_pass_2fs", "تُحْيَيْنَ"},
{"ind_pass_2mp", "تُحْيَوْنَ"},
{"ind_pass_2ms", "تُحْيَا"},
{"ind_pass_3fd", "تُحْيَيَانِ"},
{"ind_pass_3fp", "يُحْيَيْنَ"},
{"ind_pass_3fs", "تُحْيَا"},
{"ind_pass_3md", "يُحْيَيَانِ"},
{"ind_pass_3mp", "يُحْيَوْنَ"},
{"ind_pass_3ms", "يُحْيَا"},
{"past_1p", "حَيِينَا"},
{"past_1s", "حَيِيتُ"},
{"past_2d", "حَيِيتُمَا"},
{"past_2fp", "حَيِيتُنَّ"},
{"past_2fs", "حَيِيتِ"},
{"past_2mp", "حَيِيتُمْ"},
{"past_2ms", "حَيِيتَ"},
{"past_3fd", "حَيِيَتَا"},
{"past_3fp", "حَيِينَ"},
{"past_3fs", "حَيِيَتْ"},
{"past_3md", "حَيِيَا"},
{"past_3mp", "حَيُوا"},
{"past_3ms", "حَيِيَ"},
{"past_pass_1p", "حُيِينَا"},
{"past_pass_1s", "حُيِيتُ"},
{"past_pass_2d", "حُيِيتُمَا"},
{"past_pass_2fp", "حُيِيتُنَّ"},
{"past_pass_2fs", "حُيِيتِ"},
{"past_pass_2mp", "حُيِيتُمْ"},
{"past_pass_2ms", "حُيِيتَ"},
{"past_pass_3fd", "حُيِيَتَا"},
{"past_pass_3fp", "حُيِينَ"},
{"past_pass_3fs", "حُيِيَتْ"},
{"past_pass_3md", "حُيِيَا"},
{"past_pass_3mp", "حُيُوا"},
{"past_pass_3ms", "حُيِيَ"},
},
},
{
label = "اِحْوَنْصَلَ (p.412، افعنلل)", root = "حوصل", wazn = "افعنلل",
forms = {
{"imp_2d", "اِحْوَنْصِلَا"},
{"imp_2fp", "اِحْوَنْصِلْنَ"},
{"imp_2fs", "اِحْوَنْصِلِي"},
{"imp_2mp", "اِحْوَنْصِلُوا"},
{"imp_2ms", "اِحْوَنْصِلْ"},
{"ind_1p", "نَحْوَنْصِلُ"},
{"ind_1s", "أَحْوَنْصِلُ"},
{"ind_2d", "تَحْوَنْصِلَانِ"},
{"ind_2fp", "تَحْوَنْصِلْنَ"},
{"ind_2fs", "تَحْوَنْصِلِينَ"},
{"ind_2mp", "تَحْوَنْصِلُونَ"},
{"ind_2ms", "تَحْوَنْصِلُ"},
{"ind_3fd", "تَحْوَنْصِلَانِ"},
{"ind_3fp", "يَحْوَنْصِلْنَ"},
{"ind_3fs", "تَحْوَنْصِلُ"},
{"ind_3md", "يَحْوَنْصِلَانِ"},
{"ind_3mp", "يَحْوَنْصِلُونَ"},
{"ind_3ms", "يَحْوَنْصِلُ"},
{"past_1p", "اِحْوَنْصَلْنَا"},
{"past_1s", "اِحْوَنْصَلْتُ"},
{"past_2d", "اِحْوَنْصَلْتُمَا"},
{"past_2fp", "اِحْوَنْصَلْتُنَّ"},
{"past_2fs", "اِحْوَنْصَلْتِ"},
{"past_2mp", "اِحْوَنْصَلْتُمْ"},
{"past_2ms", "اِحْوَنْصَلْتَ"},
{"past_3fd", "اِحْوَنْصَلَتَا"},
{"past_3fp", "اِحْوَنْصَلْنَ"},
{"past_3fs", "اِحْوَنْصَلَتْ"},
{"past_3md", "اِحْوَنْصَلَا"},
{"past_3mp", "اِحْوَنْصَلُوا"},
{"past_3ms", "اِحْوَنْصَلَ"},
},
},
{
label = "اِرْعَوَى (p.357، افعلّ ناقص)", root = "رعو", wazn = "افعلّ",
forms = {
{"imp_2d", "اِرْعَوِيَا"},
{"imp_2fp", "اِرْعَوِينَ"},
{"imp_2fs", "اِرْعَوِي"},
{"imp_2mp", "اِرْعَوُوا"},
{"imp_2ms", "اِرْعَوِ"},
{"ind_1p", "نَرْعَوِي"},
{"ind_1s", "أَرْعَوِي"},
{"ind_2d", "تَرْعَوِيَانِ"},
{"ind_2fp", "تَرْعَوِينَ"},
{"ind_2fs", "تَرْعَوِينَ"},
{"ind_2mp", "تَرْعَوُونَ"},
{"ind_2ms", "تَرْعَوِي"},
{"ind_3fd", "تَرْعَوِيَانِ"},
{"ind_3fp", "يَرْعَوِينَ"},
{"ind_3fs", "تَرْعَوِي"},
{"ind_3md", "يَرْعَوِيَانِ"},
{"ind_3mp", "يَرْعَوُونَ"},
{"ind_3ms", "يَرْعَوِي"},
{"past_1p", "اِرْعَوَيْنَا"},
{"past_1s", "اِرْعَوَيْتُ"},
{"past_2d", "اِرْعَوَيْتُمَا"},
{"past_2fp", "اِرْعَوَيْتُنَّ"},
{"past_2fs", "اِرْعَوَيْتِ"},
{"past_2mp", "اِرْعَوَيْتُمْ"},
{"past_2ms", "اِرْعَوَيْتَ"},
{"past_3fd", "اِرْعَوَتَا"},
{"past_3fp", "اِرْعَوَيْنَ"},
{"past_3fs", "اِرْعَوَتْ"},
{"past_3md", "اِرْعَوَيَا"},
{"past_3mp", "اِرْعَوَوْا"},
{"past_3ms", "اِرْعَوَى"},
},
},
{
label = "تَفَوْعَلَ (p.398، تفعلل)", root = "فوعل", wazn = "تفعلل",
pass = true,
forms = {
{"imp_2d", "تَفَوْعَلَا"},
{"imp_2fp", "تَفَوْعَلْنَ"},
{"imp_2fs", "تَفَوْعَلِي"},
{"imp_2mp", "تَفَوْعَلُوا"},
{"imp_2ms", "تَفَوْعَلْ"},
{"ind_1p", "نَتَفَوْعَلُ"},
{"ind_1s", "أَتَفَوْعَلُ"},
{"ind_2d", "تَتَفَوْعَلَانِ"},
{"ind_2fp", "تَتَفَوْعَلْنَ"},
{"ind_2fs", "تَتَفَوْعَلِينَ"},
{"ind_2mp", "تَتَفَوْعَلُونَ"},
{"ind_2ms", "تَتَفَوْعَلُ"},
{"ind_3fd", "تَتَفَوْعَلَانِ"},
{"ind_3fp", "يَتَفَوْعَلْنَ"},
{"ind_3fs", "تَتَفَوْعَلُ"},
{"ind_3md", "يَتَفَوْعَلَانِ"},
{"ind_3mp", "يَتَفَوْعَلُونَ"},
{"ind_3ms", "يَتَفَوْعَلُ"},
{"ind_pass_1p", "نُتَفَوْعَلُ"},
{"ind_pass_1s", "أُتَفَوْعَلُ"},
{"ind_pass_2d", "تُتَفَوْعَلَانِ"},
{"ind_pass_2fp", "تُتَفَوْعَلْنَ"},
{"ind_pass_2fs", "تُتَفَوْعَلِينَ"},
{"ind_pass_2mp", "تُتَفَوْعَلُونَ"},
{"ind_pass_2ms", "تُتَفَوْعَلُ"},
{"ind_pass_3fd", "تُتَفَوْعَلَانِ"},
{"ind_pass_3fp", "يُتَفَوْعَلْنَ"},
{"ind_pass_3fs", "تُتَفَوْعَلُ"},
{"ind_pass_3md", "يُتَفَوْعَلَانِ"},
{"ind_pass_3mp", "يُتَفَوْعَلُونَ"},
{"ind_pass_3ms", "يُتَفَوْعَلُ"},
{"past_1p", "تَفَوْعَلْنَا"},
{"past_1s", "تَفَوْعَلْتُ"},
{"past_2d", "تَفَوْعَلْتُمَا"},
{"past_2fp", "تَفَوْعَلْتُنَّ"},
{"past_2fs", "تَفَوْعَلْتِ"},
{"past_2mp", "تَفَوْعَلْتُمْ"},
{"past_2ms", "تَفَوْعَلْتَ"},
{"past_3fd", "تَفَوْعَلَتَا"},
{"past_3fp", "تَفَوْعَلْنَ"},
{"past_3fs", "تَفَوْعَلَتْ"},
{"past_3md", "تَفَوْعَلَا"},
{"past_3mp", "تَفَوْعَلُوا"},
{"past_3ms", "تَفَوْعَلَ"},
{"past_pass_1p", "تُفُوعِلْنَا"},
{"past_pass_1s", "تُفُوعِلْتُ"},
{"past_pass_2d", "تُفُوعِلْتُمَا"},
{"past_pass_2fp", "تُفُوعِلْتُنَّ"},
{"past_pass_2fs", "تُفُوعِلْتِ"},
{"past_pass_2mp", "تُفُوعِلْتُمْ"},
{"past_pass_2ms", "تُفُوعِلْتَ"},
{"past_pass_3fd", "تُفُوعِلَتَا"},
{"past_pass_3fp", "تُفُوعِلْنَ"},
{"past_pass_3fs", "تُفُوعِلَتْ"},
{"past_pass_3md", "تُفُوعِلَا"},
{"past_pass_3mp", "تُفُوعِلُوا"},
{"past_pass_3ms", "تُفُوعِلَ"},
},
},
{
label = "اِظَّنَّ (p.336، افتعل مدغم مضاعف)", root = "ظنن", wazn = "افتعل",
forms = {
{"imp_2d", "اِظَّنَّا"},
{"imp_2fs", "اِظَّنِّي"},
{"imp_2mp", "اِظَّنُّوا"},
{"imp_2ms", "اِظَّنَّ"},
{"ind_1p", "نَظَّنُّ"},
{"ind_1s", "أَظَّنُّ"},
{"ind_2d", "تَظَّنَّانِ"},
{"ind_2fs", "تَظَّنِّينَ"},
{"ind_2mp", "تَظَّنُّونَ"},
{"ind_2ms", "تَظَّنُّ"},
{"ind_3fd", "تَظَّنَّانِ"},
{"ind_3fs", "تَظَّنُّ"},
{"ind_3md", "يَظَّنَّانِ"},
{"ind_3mp", "يَظَّنُّونَ"},
{"ind_3ms", "يَظَّنُّ"},
{"past_1p", "اِظَّنَنَّا"},
{"past_1s", "اِظَّنَنْتُ"},
{"past_2d", "اِظَّنَنْتُمَا"},
{"past_2fp", "اِظَّنَنْتُنَّ"},
{"past_2fs", "اِظَّنَنْتِ"},
{"past_2mp", "اِظَّنَنْتُمْ"},
{"past_2ms", "اِظَّنَنْتَ"},
{"past_3fd", "اِظَّنَّتَا"},
{"past_3fs", "اِظَّنَّتْ"},
{"past_3md", "اِظَّنَّا"},
{"past_3mp", "اِظَّنُّوا"},
{"past_3ms", "اِظَّنَّ"},
},
},
{
label = "اِصّاعَدَ (p.304، تفاعل مدغم)", root = "صعد", wazn = "تفاعل",
reduced = true,
forms = {
{"imp_2d", "اِصَّاعَدَا"},
{"imp_2fp", "اِصَّاعَدْنَ"},
{"imp_2fs", "اِصَّاعَدِي"},
{"imp_2mp", "اِصَّاعَدُوا"},
{"imp_2ms", "اِصَّاعَدْ"},
{"ind_1p", "نَصَّاعَدُ"},
{"ind_1s", "أَصَّاعَدُ"},
{"ind_2d", "تَصَّاعَدَانِ"},
{"ind_2fp", "تَصَّاعَدْنَ"},
{"ind_2fs", "تَصَّاعَدِينَ"},
{"ind_2mp", "تَصَّاعَدُونَ"},
{"ind_2ms", "تَصَّاعَدُ"},
{"ind_3fd", "تَصَّاعَدَانِ"},
{"ind_3fp", "يَصَّاعَدْنَ"},
{"ind_3fs", "تَصَّاعَدُ"},
{"ind_3md", "يَصَّاعَدَانِ"},
{"ind_3mp", "يَصَّاعَدُونَ"},
{"ind_3ms", "يَصَّاعَدُ"},
{"past_1p", "اِصَّاعَدْنَا"},
{"past_1s", "اِصَّاعَدْتُ"},
{"past_2d", "اِصَّاعَدْتُمَا"},
{"past_2fp", "اِصَّاعَدْتُنَّ"},
{"past_2fs", "اِصَّاعَدْتِ"},
{"past_2mp", "اِصَّاعَدْتُمْ"},
{"past_2ms", "اِصَّاعَدْتَ"},
{"past_3fd", "اِصَّاعَدَتَا"},
{"past_3fp", "اِصَّاعَدْنَ"},
{"past_3fs", "اِصَّاعَدَتْ"},
{"past_3md", "اِصَّاعَدَا"},
{"past_3mp", "اِصَّاعَدُوا"},
{"past_3ms", "اِصَّاعَدَ"},
},
},
{
label = "فاعَلَ (p.256، الوزن الثالث)", root = "فعل", wazn = "فاعل",
pass = true,
forms = {
{"imp_2d", "فَاعِلَا"},
{"imp_2fp", "فَاعِلْنَ"},
{"imp_2fs", "فَاعِلِي"},
{"imp_2mp", "فَاعِلُوا"},
{"imp_2ms", "فَاعِلْ"},
{"ind_1p", "نُفَاعِلُ"},
{"ind_1s", "أُفَاعِلُ"},
{"ind_2d", "تُفَاعِلَانِ"},
{"ind_2fp", "تُفَاعِلْنَ"},
{"ind_2fs", "تُفَاعِلِينَ"},
{"ind_2mp", "تُفَاعِلُونَ"},
{"ind_2ms", "تُفَاعِلُ"},
{"ind_3fd", "تُفَاعِلَانِ"},
{"ind_3fp", "يُفَاعِلْنَ"},
{"ind_3fs", "تُفَاعِلُ"},
{"ind_3md", "يُفَاعِلَانِ"},
{"ind_3mp", "يُفَاعِلُونَ"},
{"ind_3ms", "يُفَاعِلُ"},
{"ind_pass_1p", "نُفَاعَلُ"},
{"ind_pass_1s", "أُفَاعَلُ"},
{"ind_pass_2d", "تُفَاعَلَانِ"},
{"ind_pass_2fp", "تُفَاعَلْنَ"},
{"ind_pass_2fs", "تُفَاعَلِينَ"},
{"ind_pass_2mp", "تُفَاعَلُونَ"},
{"ind_pass_2ms", "تُفَاعَلُ"},
{"ind_pass_3fd", "تُفَاعَلَانِ"},
{"ind_pass_3fp", "يُفَاعَلْنَ"},
{"ind_pass_3fs", "تُفَاعَلُ"},
{"ind_pass_3md", "يُفَاعَلَانِ"},
{"ind_pass_3mp", "يُفَاعَلُونَ"},
{"ind_pass_3ms", "يُفَاعَلُ"},
{"past_1p", "فَاعَلْنَا"},
{"past_1s", "فَاعَلْتُ"},
{"past_2d", "فَاعَلْتُمَا"},
{"past_2fp", "فَاعَلْتُنَّ"},
{"past_2fs", "فَاعَلْتِ"},
{"past_2mp", "فَاعَلْتُمْ"},
{"past_2ms", "فَاعَلْتَ"},
{"past_3fd", "فَاعَلَتَا"},
{"past_3fp", "فَاعَلْنَ"},
{"past_3fs", "فَاعَلَتْ"},
{"past_3md", "فَاعَلَا"},
{"past_3mp", "فَاعَلُوا"},
{"past_3ms", "فَاعَلَ"},
{"past_pass_1p", "فُوعِلْنَا"},
{"past_pass_1s", "فُوعِلْتُ"},
{"past_pass_2d", "فُوعِلْتُمَا"},
{"past_pass_2fp", "فُوعِلْتُنَّ"},
{"past_pass_2fs", "فُوعِلْتِ"},
{"past_pass_2mp", "فُوعِلْتُمْ"},
{"past_pass_2ms", "فُوعِلْتَ"},
{"past_pass_3fd", "فُوعِلَتَا"},
{"past_pass_3fp", "فُوعِلْنَ"},
{"past_pass_3fs", "فُوعِلَتْ"},
{"past_pass_3md", "فُوعِلَا"},
{"past_pass_3mp", "فُوعِلُوا"},
{"past_pass_3ms", "فُوعِلَ"},
},
},
{
label = "بَقِيَ ـَ (p.225، ناقص يائي)", root = "بقي", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِبْقَيَا"},
{"imp_2fp", "اِبْقَيْنَ"},
{"imp_2fs", "اِبْقَيْ"},
{"imp_2mp", "اِبْقَوْا"},
{"imp_2ms", "اِبْقَ"},
{"ind_1p", "نَبْقَى"},
{"ind_1s", "أَبْقَى"},
{"ind_2d", "تَبْقَيَانِ"},
{"ind_2fp", "تَبْقَيْنَ"},
{"ind_2fs", "تَبْقَيْنَ"},
{"ind_2mp", "تَبْقَوْنَ"},
{"ind_2ms", "تَبْقَى"},
{"ind_3fd", "تَبْقَيَانِ"},
{"ind_3fp", "يَبْقَيْنَ"},
{"ind_3fs", "تَبْقَى"},
{"ind_3md", "يَبْقَيَانِ"},
{"ind_3mp", "يَبْقَوْنَ"},
{"ind_3ms", "يَبْقَى"},
{"past_1p", "بَقِينَا"},
{"past_1s", "بَقِيتُ"},
{"past_2d", "بَقِيتُمَا"},
{"past_2fp", "بَقِيتُنَّ"},
{"past_2fs", "بَقِيتِ"},
{"past_2mp", "بَقِيتُمْ"},
{"past_2ms", "بَقِيتَ"},
{"past_3fd", "بَقِيَتَا"},
{"past_3fp", "بَقِينَ"},
{"past_3fs", "بَقِيَتْ"},
{"past_3md", "بَقِيَا"},
{"past_3mp", "بَقُوا"},
{"past_3ms", "بَقِيَ"},
},
},
{
label = "اِنْوَرَبَ (p.325، انفعل معتل الفاء)", root = "ورب", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْوَرِبَا"},
{"imp_2fp", "اِنْوَرِبْنَ"},
{"imp_2fs", "اِنْوَرِبِي"},
{"imp_2mp", "اِنْوَرِبُوا"},
{"imp_2ms", "اِنْوَرِبْ"},
{"ind_1p", "نَنْوَرِبُ"},
{"ind_1s", "أَنْوَرِبُ"},
{"ind_2d", "تَنْوَرِبَانِ"},
{"ind_2fp", "تَنْوَرِبْنَ"},
{"ind_2fs", "تَنْوَرِبِينَ"},
{"ind_2mp", "تَنْوَرِبُونَ"},
{"ind_2ms", "تَنْوَرِبُ"},
{"ind_3fd", "تَنْوَرِبَانِ"},
{"ind_3fp", "يَنْوَرِبْنَ"},
{"ind_3fs", "تَنْوَرِبُ"},
{"ind_3md", "يَنْوَرِبَانِ"},
{"ind_3mp", "يَنْوَرِبُونَ"},
{"ind_3ms", "يَنْوَرِبُ"},
{"past_1p", "اِنْوَرَبْنَا"},
{"past_1s", "اِنْوَرَبْتُ"},
{"past_2d", "اِنْوَرَبْتُمَا"},
{"past_2fp", "اِنْوَرَبْتُنَّ"},
{"past_2fs", "اِنْوَرَبْتِ"},
{"past_2mp", "اِنْوَرَبْتُمْ"},
{"past_2ms", "اِنْوَرَبْتَ"},
{"past_3fd", "اِنْوَرَبَتَا"},
{"past_3fp", "اِنْوَرَبْنَ"},
{"past_3fs", "اِنْوَرَبَتْ"},
{"past_3md", "اِنْوَرَبَا"},
{"past_3mp", "اِنْوَرَبُوا"},
{"past_3ms", "اِنْوَرَبَ"},
},
},
{
label = "مَدَّ ـُ (p.129، مضاعف)", root = "مدد", wazn = "فعَل يفعُل",
pass = true,
forms = {
{"imp_2d", "مُدَّا"},
{"imp_2fp", "اُمْدُدْنَ"},
{"imp_2fs", "مُدِّي"},
{"imp_2mp", "مُدُّوا"},
{"imp_2ms", "مُدَّ"},
{"ind_1p", "نَمُدُّ"},
{"ind_1s", "أَمُدُّ"},
{"ind_2d", "تَمُدَّانِ"},
{"ind_2fp", "تَمْدُدْنَ"},
{"ind_2fs", "تَمُدِّينَ"},
{"ind_2mp", "تَمُدُّونَ"},
{"ind_2ms", "تَمُدُّ"},
{"ind_3fd", "تَمُدَّانِ"},
{"ind_3fp", "يَمْدُدْنَ"},
{"ind_3fs", "تَمُدُّ"},
{"ind_3md", "يَمُدَّانِ"},
{"ind_3mp", "يَمُدُّونَ"},
{"ind_3ms", "يَمُدُّ"},
{"ind_pass_1p", "نُمَدُّ"},
{"ind_pass_1s", "أُمَدُّ"},
{"ind_pass_2d", "تُمَدَّانِ"},
{"ind_pass_2fp", "تُمْدَدْنَ"},
{"ind_pass_2fs", "تُمَدِّينَ"},
{"ind_pass_2mp", "تُمَدُّونَ"},
{"ind_pass_2ms", "تُمَدُّ"},
{"ind_pass_3fd", "تُمَدَّانِ"},
{"ind_pass_3fp", "يُمْدَدْنَ"},
{"ind_pass_3fs", "تُمَدُّ"},
{"ind_pass_3md", "يُمَدَّانِ"},
{"ind_pass_3mp", "يُمَدُّونَ"},
{"ind_pass_3ms", "يُمَدُّ"},
{"past_1p", "مَدَدْنَا"},
{"past_1s", "مَدَدْتُ"},
{"past_2d", "مَدَدْتُمَا"},
{"past_2fp", "مَدَدْتُنَّ"},
{"past_2fs", "مَدَدْتِ"},
{"past_2mp", "مَدَدْتُمْ"},
{"past_2ms", "مَدَدْتَ"},
{"past_3fd", "مَدَّتَا"},
{"past_3fp", "مَدَدْنَ"},
{"past_3fs", "مَدَّتْ"},
{"past_3md", "مَدَّا"},
{"past_3mp", "مَدُّوا"},
{"past_3ms", "مَدَّ"},
{"past_pass_1p", "مُدِدْنَا"},
{"past_pass_1s", "مُدِدْتُ"},
{"past_pass_2d", "مُدِدْتُمَا"},
{"past_pass_2fp", "مُدِدْتُنَّ"},
{"past_pass_2fs", "مُدِدْتِ"},
{"past_pass_2mp", "مُدِدْتُمْ"},
{"past_pass_2ms", "مُدِدْتَ"},
{"past_pass_3fd", "مُدَّتَا"},
{"past_pass_3fp", "مُدِدْنَ"},
{"past_pass_3fs", "مُدَّتْ"},
{"past_pass_3md", "مُدَّا"},
{"past_pass_3mp", "مُدُّوا"},
{"past_pass_3ms", "مُدَّ"},
},
},
{
label = "أَكَلَ ـُ (p.133، مهموز الفاء)", root = "أكل", wazn = "فعَل يفعُل",
pass = true,
forms = {
{"imp_2d", "كُلَا"},
{"imp_2fp", "كُلْنَ"},
{"imp_2fs", "كُلِي"},
{"imp_2mp", "كُلُوا"},
{"imp_2ms", "كُلْ"},
{"ind_1p", "نَأْكُلُ"},
{"ind_1s", "آكُلُ"},
{"ind_2d", "تَأْكُلَانِ"},
{"ind_2fp", "تَأْكُلْنَ"},
{"ind_2fs", "تَأْكُلِينَ"},
{"ind_2mp", "تَأْكُلُونَ"},
{"ind_2ms", "تَأْكُلُ"},
{"ind_3fd", "تَأْكُلَانِ"},
{"ind_3fp", "يَأْكُلْنَ"},
{"ind_3fs", "تَأْكُلُ"},
{"ind_3md", "يَأْكُلَانِ"},
{"ind_3mp", "يَأْكُلُونَ"},
{"ind_3ms", "يَأْكُلُ"},
{"ind_pass_1p", "نُؤْكَلُ"},
{"ind_pass_1s", "أُوكَلُ"},
{"ind_pass_2d", "تُؤْكَلَانِ"},
{"ind_pass_2fp", "تُؤْكَلْنَ"},
{"ind_pass_2fs", "تُؤْكَلِينَ"},
{"ind_pass_2mp", "تُؤْكَلُونَ"},
{"ind_pass_2ms", "تُؤْكَلُ"},
{"ind_pass_3fd", "تُؤْكَلَانِ"},
{"ind_pass_3fp", "يُؤْكَلْنَ"},
{"ind_pass_3fs", "تُؤْكَلُ"},
{"ind_pass_3md", "يُؤْكَلَانِ"},
{"ind_pass_3mp", "يُؤْكَلُونَ"},
{"ind_pass_3ms", "يُؤْكَلُ"},
{"past_1p", "أَكَلْنَا"},
{"past_1s", "أَكَلْتُ"},
{"past_2d", "أَكَلْتُمَا"},
{"past_2fp", "أَكَلْتُنَّ"},
{"past_2fs", "أَكَلْتِ"},
{"past_2mp", "أَكَلْتُمْ"},
{"past_2ms", "أَكَلْتَ"},
{"past_3fd", "أَكَلَتَا"},
{"past_3fp", "أَكَلْنَ"},
{"past_3fs", "أَكَلَتْ"},
{"past_3md", "أَكَلَا"},
{"past_3mp", "أَكَلُوا"},
{"past_3ms", "أَكَلَ"},
{"past_pass_1p", "أُكِلْنَا"},
{"past_pass_1s", "أُكِلْتُ"},
{"past_pass_2d", "أُكِلْتُمَا"},
{"past_pass_2fp", "أُكِلْتُنَّ"},
{"past_pass_2fs", "أُكِلْتِ"},
{"past_pass_2mp", "أُكِلْتُمْ"},
{"past_pass_2ms", "أُكِلْتَ"},
{"past_pass_3fd", "أُكِلَتَا"},
{"past_pass_3fp", "أُكِلْنَ"},
{"past_pass_3fs", "أُكِلَتْ"},
{"past_pass_3md", "أُكِلَا"},
{"past_pass_3mp", "أُكِلُوا"},
{"past_pass_3ms", "أُكِلَ"},
},
},
{
label = "قالَ ـُ (p.138، أجوف واوي)", root = "قول", wazn = "فعَل يفعُل",
pass = true,
forms = {
{"imp_2d", "قُولَا"},
{"imp_2fp", "قُلْنَ"},
{"imp_2fs", "قُولِي"},
{"imp_2mp", "قُولُوا"},
{"imp_2ms", "قُلْ"},
{"ind_1p", "نَقُولُ"},
{"ind_1s", "أَقُولُ"},
{"ind_2d", "تَقُولَانِ"},
{"ind_2fp", "تَقُلْنَ"},
{"ind_2fs", "تَقُولِينَ"},
{"ind_2mp", "تَقُولُونَ"},
{"ind_2ms", "تَقُولُ"},
{"ind_3fd", "تَقُولَانِ"},
{"ind_3fp", "يَقُلْنَ"},
{"ind_3fs", "تَقُولُ"},
{"ind_3md", "يَقُولَانِ"},
{"ind_3mp", "يَقُولُونَ"},
{"ind_3ms", "يَقُولُ"},
{"ind_pass_1p", "نُقَالُ"},
{"ind_pass_1s", "أُقَالُ"},
{"ind_pass_2d", "تُقَالَانِ"},
{"ind_pass_2fp", "تُقَلْنَ"},
{"ind_pass_2fs", "تُقَالِينَ"},
{"ind_pass_2mp", "تُقَالُونَ"},
{"ind_pass_2ms", "تُقَالُ"},
{"ind_pass_3fd", "تُقَالَانِ"},
{"ind_pass_3fp", "يُقَلْنَ"},
{"ind_pass_3fs", "تُقَالُ"},
{"ind_pass_3md", "يُقَالَانِ"},
{"ind_pass_3mp", "يُقَالُونَ"},
{"ind_pass_3ms", "يُقَالُ"},
{"past_1p", "قُلْنَا"},
{"past_1s", "قُلْتُ"},
{"past_2d", "قُلْتُمَا"},
{"past_2fp", "قُلْتُنَّ"},
{"past_2fs", "قُلْتِ"},
{"past_2mp", "قُلْتُمْ"},
{"past_2ms", "قُلْتَ"},
{"past_3fd", "قَالَتَا"},
{"past_3fp", "قُلْنَ"},
{"past_3fs", "قَالَتْ"},
{"past_3md", "قَالَا"},
{"past_3mp", "قَالُوا"},
{"past_3ms", "قَالَ"},
{"past_pass_1p", "قِلْنَا"},
{"past_pass_1s", "قِلْتُ"},
{"past_pass_2d", "قِلْتُمَا"},
{"past_pass_2fp", "قِلْتُنَّ"},
{"past_pass_2fs", "قِلْتِ"},
{"past_pass_2mp", "قِلْتُمْ"},
{"past_pass_2ms", "قِلْتَ"},
{"past_pass_3fd", "قِيلَتَا"},
{"past_pass_3fp", "قِلْنَ"},
{"past_pass_3fs", "قِيلَتْ"},
{"past_pass_3md", "قِيلَا"},
{"past_pass_3mp", "قِيلُوا"},
{"past_pass_3ms", "قِيلَ"},
},
},
{
label = "ضَرَبَ ـِ (p.144، صحيح سالم)", root = "ضرب", wazn = "فعَل يفعِل",
pass = true,
forms = {
{"imp_2d", "اِضْرِبَا"},
{"imp_2fp", "اِضْرِبْنَ"},
{"imp_2fs", "اِضْرِبِي"},
{"imp_2mp", "اِضْرِبُوا"},
{"imp_2ms", "اِضْرِبْ"},
{"ind_1p", "نَضْرِبُ"},
{"ind_1s", "أَضْرِبُ"},
{"ind_2d", "تَضْرِبَانِ"},
{"ind_2fp", "تَضْرِبْنَ"},
{"ind_2fs", "تَضْرِبِينَ"},
{"ind_2mp", "تَضْرِبُونَ"},
{"ind_2ms", "تَضْرِبُ"},
{"ind_3fd", "تَضْرِبَانِ"},
{"ind_3fp", "يَضْرِبْنَ"},
{"ind_3fs", "تَضْرِبُ"},
{"ind_3md", "يَضْرِبَانِ"},
{"ind_3mp", "يَضْرِبُونَ"},
{"ind_3ms", "يَضْرِبُ"},
{"ind_pass_1p", "نُضْرَبُ"},
{"ind_pass_1s", "أُضْرَبُ"},
{"ind_pass_2d", "تُضْرَبَانِ"},
{"ind_pass_2fp", "تُضْرَبْنَ"},
{"ind_pass_2fs", "تُضْرَبِينَ"},
{"ind_pass_2mp", "تُضْرَبُونَ"},
{"ind_pass_2ms", "تُضْرَبُ"},
{"ind_pass_3fd", "تُضْرَبَانِ"},
{"ind_pass_3fp", "يُضْرَبْنَ"},
{"ind_pass_3fs", "تُضْرَبُ"},
{"ind_pass_3md", "يُضْرَبَانِ"},
{"ind_pass_3mp", "يُضْرَبُونَ"},
{"ind_pass_3ms", "يُضْرَبُ"},
{"past_1p", "ضَرَبْنَا"},
{"past_1s", "ضَرَبْتُ"},
{"past_2d", "ضَرَبْتُمَا"},
{"past_2fp", "ضَرَبْتُنَّ"},
{"past_2fs", "ضَرَبْتِ"},
{"past_2mp", "ضَرَبْتُمْ"},
{"past_2ms", "ضَرَبْتَ"},
{"past_3fd", "ضَرَبَتَا"},
{"past_3fp", "ضَرَبْنَ"},
{"past_3fs", "ضَرَبَتْ"},
{"past_3md", "ضَرَبَا"},
{"past_3mp", "ضَرَبُوا"},
{"past_3ms", "ضَرَبَ"},
{"past_pass_1p", "ضُرِبْنَا"},
{"past_pass_1s", "ضُرِبْتُ"},
{"past_pass_2d", "ضُرِبْتُمَا"},
{"past_pass_2fp", "ضُرِبْتُنَّ"},
{"past_pass_2fs", "ضُرِبْتِ"},
{"past_pass_2mp", "ضُرِبْتُمْ"},
{"past_pass_2ms", "ضُرِبْتَ"},
{"past_pass_3fd", "ضُرِبَتَا"},
{"past_pass_3fp", "ضُرِبْنَ"},
{"past_pass_3fs", "ضُرِبَتْ"},
{"past_pass_3md", "ضُرِبَا"},
{"past_pass_3mp", "ضُرِبُوا"},
{"past_pass_3ms", "ضُرِبَ"},
},
},
{
label = "رَأَسَ ـِ (p.153، مهموز العين)", root = "رأس", wazn = "فعَل يفعِل",
pass = true,
forms = {
{"imp_2d", "اِرْئِسَا"},
{"imp_2fp", "اِرْئِسْنَ"},
{"imp_2fs", "اِرْئِسِي"},
{"imp_2mp", "اِرْئِسُوا"},
{"imp_2ms", "اِرْئِسْ"},
{"ind_1p", "نَرْئِسُ"},
{"ind_1s", "أَرْئِسُ"},
{"ind_2d", "تَرْئِسَانِ"},
{"ind_2fp", "تَرْئِسْنَ"},
{"ind_2fs", "تَرْئِسِينَ"},
{"ind_2mp", "تَرْئِسُونَ"},
{"ind_2ms", "تَرْئِسُ"},
{"ind_3fd", "تَرْئِسَانِ"},
{"ind_3fp", "يَرْئِسْنَ"},
{"ind_3fs", "تَرْئِسُ"},
{"ind_3md", "يَرْئِسَانِ"},
{"ind_3mp", "يَرْئِسُونَ"},
{"ind_3ms", "يَرْئِسُ"},
{"ind_pass_1p", "نُرْأَسُ"},
{"ind_pass_1s", "أُرْأَسُ"},
{"ind_pass_2d", "تُرْأَسَانِ"},
{"ind_pass_2fp", "تُرْأَسْنَ"},
{"ind_pass_2fs", "تُرْأَسِينَ"},
{"ind_pass_2mp", "تُرْأَسُونَ"},
{"ind_pass_2ms", "تُرْأَسُ"},
{"ind_pass_3fd", "تُرْأَسَانِ"},
{"ind_pass_3fp", "يُرْأَسْنَ"},
{"ind_pass_3fs", "تُرْأَسُ"},
{"ind_pass_3md", "يُرْأَسَانِ"},
{"ind_pass_3mp", "يُرْأَسُونَ"},
{"ind_pass_3ms", "يُرْأَسُ"},
{"past_1p", "رَأَسْنَا"},
{"past_1s", "رَأَسْتُ"},
{"past_2d", "رَأَسْتُمَا"},
{"past_2fp", "رَأَسْتُنَّ"},
{"past_2fs", "رَأَسْتِ"},
{"past_2mp", "رَأَسْتُمْ"},
{"past_2ms", "رَأَسْتَ"},
{"past_3fd", "رَأَسَتَا"},
{"past_3fp", "رَأَسْنَ"},
{"past_3fs", "رَأَسَتْ"},
{"past_3md", "رَأَسَا"},
{"past_3mp", "رَأَسُوا"},
{"past_3ms", "رَأَسَ"},
{"past_pass_1p", "رُئِسْنَا"},
{"past_pass_1s", "رُئِسْتُ"},
{"past_pass_2d", "رُئِسْتُمَا"},
{"past_pass_2fp", "رُئِسْتُنَّ"},
{"past_pass_2fs", "رُئِسْتِ"},
{"past_pass_2mp", "رُئِسْتُمْ"},
{"past_pass_2ms", "رُئِسْتَ"},
{"past_pass_3fd", "رُئِسَتَا"},
{"past_pass_3fp", "رُئِسْنَ"},
{"past_pass_3fs", "رُئِسَتْ"},
{"past_pass_3md", "رُئِسَا"},
{"past_pass_3mp", "رُئِسُوا"},
{"past_pass_3ms", "رُئِسَ"},
},
},
}
7n0ade0yhkz6rgi7j8b4bcr68gn4mw2
1159059
1159001
2026-09-10T19:33:36Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159059
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 1 من 16.
return {
{
label = "فَعَلَ ـُ (p.125, abstract paradigm)", root = "فعل", wazn = "فعَل يفعُل",
pass = true,
forms = {
{"imp_2d", "اُفْعُلَا"},
{"imp_2fp", "اُفْعُلْنَ"},
{"imp_2fs", "اُفْعُلِي"},
{"imp_2mp", "اُفْعُلُوا"},
{"imp_2ms", "اُفْعُلْ"},
{"ind_1p", "نَفْعُلُ"},
{"ind_1s", "أَفْعُلُ"},
{"ind_2d", "تَفْعُلَانِ"},
{"ind_2fp", "تَفْعُلْنَ"},
{"ind_2fs", "تَفْعُلِينَ"},
{"ind_2mp", "تَفْعُلُونَ"},
{"ind_2ms", "تَفْعُلُ"},
{"ind_3fd", "تَفْعُلَانِ"},
{"ind_3fp", "يَفْعُلْنَ"},
{"ind_3fs", "تَفْعُلُ"},
{"ind_3md", "يَفْعُلَانِ"},
{"ind_3mp", "يَفْعُلُونَ"},
{"ind_3ms", "يَفْعُلُ"},
{"ind_pass_1p", "نُفْعَلُ"},
{"ind_pass_1s", "أُفْعَلُ"},
{"ind_pass_2d", "تُفْعَلَانِ"},
{"ind_pass_2fp", "تُفْعَلْنَ"},
{"ind_pass_2fs", "تُفْعَلِينَ"},
{"ind_pass_2mp", "تُفْعَلُونَ"},
{"ind_pass_2ms", "تُفْعَلُ"},
{"ind_pass_3fd", "تُفْعَلَانِ"},
{"ind_pass_3fp", "يُفْعَلْنَ"},
{"ind_pass_3fs", "تُفْعَلُ"},
{"ind_pass_3md", "يُفْعَلَانِ"},
{"ind_pass_3mp", "يُفْعَلُونَ"},
{"ind_pass_3ms", "يُفْعَلُ"},
{"past_1p", "فَعَلْنَا"},
{"past_1s", "فَعَلْتُ"},
{"past_2d", "فَعَلْتُمَا"},
{"past_2fp", "فَعَلْتُنَّ"},
{"past_2fs", "فَعَلْتِ"},
{"past_2mp", "فَعَلْتُمْ"},
{"past_2ms", "فَعَلْتَ"},
{"past_3fd", "فَعَلَتَا"},
{"past_3fp", "فَعَلْنَ"},
{"past_3fs", "فَعَلَتْ"},
{"past_3md", "فَعَلَا"},
{"past_3mp", "فَعَلُوا"},
{"past_3ms", "فَعَلَ"},
{"past_pass_1p", "فُعِلْنَا"},
{"past_pass_1s", "فُعِلْتُ"},
{"past_pass_2d", "فُعِلْتُمَا"},
{"past_pass_2fp", "فُعِلْتُنَّ"},
{"past_pass_2fs", "فُعِلْتِ"},
{"past_pass_2mp", "فُعِلْتُمْ"},
{"past_pass_2ms", "فُعِلْتَ"},
{"past_pass_3fd", "فُعِلَتَا"},
{"past_pass_3fp", "فُعِلْنَ"},
{"past_pass_3fs", "فُعِلَتْ"},
{"past_pass_3md", "فُعِلَا"},
{"past_pass_3mp", "فُعِلُوا"},
{"past_pass_3ms", "فُعِلَ"},
},
},
{
label = "رَؤُفَ (p.198)", root = "رأف", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُرْؤُفَا"},
{"imp_2fp", "اُرْؤُفْنَ"},
{"imp_2fs", "اُرْؤُفِي"},
{"imp_2mp", "اُرْؤُفُوا"},
{"imp_2ms", "اُرْؤُفْ"},
{"ind_1p", "نَرْؤُفُ"},
{"ind_1s", "أَرْؤُفُ"},
{"ind_2d", "تَرْؤُفَانِ"},
{"ind_2fp", "تَرْؤُفْنَ"},
{"ind_2fs", "تَرْؤُفِينَ"},
{"ind_2mp", "تَرْؤُفُونَ"},
{"ind_2ms", "تَرْؤُفُ"},
{"ind_3fd", "تَرْؤُفَانِ"},
{"ind_3fp", "يَرْؤُفْنَ"},
{"ind_3fs", "تَرْؤُفُ"},
{"ind_3md", "يَرْؤُفَانِ"},
{"ind_3mp", "يَرْؤُفُونَ"},
{"ind_3ms", "يَرْؤُفُ"},
{"past_1p", "رَؤُفْنَا"},
{"past_1s", "رَؤُفْتُ"},
{"past_2d", "رَؤُفْتُمَا"},
{"past_2fp", "رَؤُفْتُنَّ"},
{"past_2fs", "رَؤُفْتِ"},
{"past_2mp", "رَؤُفْتُمْ"},
{"past_2ms", "رَؤُفْتَ"},
{"past_3fd", "رَؤُفَتَا"},
{"past_3fp", "رَؤُفْنَ"},
{"past_3fs", "رَؤُفَتْ"},
{"past_3md", "رَؤُفَا"},
{"past_3mp", "رَؤُفُوا"},
{"past_3ms", "رَؤُفَ"},
},
},
{
label = "ضَؤُلَ (p.198)", root = "ضأل", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُضْؤُلَا"},
{"imp_2fp", "اُضْؤُلْنَ"},
{"imp_2fs", "اُضْؤُلِي"},
{"imp_2mp", "اُضْؤُلُوا"},
{"imp_2ms", "اُضْؤُلْ"},
{"ind_1p", "نَضْؤُلُ"},
{"ind_1s", "أَضْؤُلُ"},
{"ind_2d", "تَضْؤُلَانِ"},
{"ind_2fp", "تَضْؤُلْنَ"},
{"ind_2fs", "تَضْؤُلِينَ"},
{"ind_2mp", "تَضْؤُلُونَ"},
{"ind_2ms", "تَضْؤُلُ"},
{"ind_3fd", "تَضْؤُلَانِ"},
{"ind_3fp", "يَضْؤُلْنَ"},
{"ind_3fs", "تَضْؤُلُ"},
{"ind_3md", "يَضْؤُلَانِ"},
{"ind_3mp", "يَضْؤُلُونَ"},
{"ind_3ms", "يَضْؤُلُ"},
{"past_1p", "ضَؤُلْنَا"},
{"past_1s", "ضَؤُلْتُ"},
{"past_2d", "ضَؤُلْتُمَا"},
{"past_2fp", "ضَؤُلْتُنَّ"},
{"past_2fs", "ضَؤُلْتِ"},
{"past_2mp", "ضَؤُلْتُمْ"},
{"past_2ms", "ضَؤُلْتَ"},
{"past_3fd", "ضَؤُلَتَا"},
{"past_3fp", "ضَؤُلْنَ"},
{"past_3fs", "ضَؤُلَتْ"},
{"past_3md", "ضَؤُلَا"},
{"past_3mp", "ضَؤُلُوا"},
{"past_3ms", "ضَؤُلَ"},
},
},
{
label = "آخَذَ (p.260)", root = "أخذ", wazn = "فاعل",
forms = {
{"imp_2d", "آخِذَا"},
{"imp_2fp", "آخِذْنَ"},
{"imp_2fs", "آخِذِي"},
{"imp_2mp", "آخِذُوا"},
{"imp_2ms", "آخِذْ"},
{"ind_1p", "نُؤَاخِذُ"},
{"ind_1s", "أُؤَاخِذُ"},
{"ind_2d", "تُؤَاخِذَانِ"},
{"ind_2fp", "تُؤَاخِذْنَ"},
{"ind_2fs", "تُؤَاخِذِينَ"},
{"ind_2mp", "تُؤَاخِذُونَ"},
{"ind_2ms", "تُؤَاخِذُ"},
{"ind_3fd", "تُؤَاخِذَانِ"},
{"ind_3fp", "يُؤَاخِذْنَ"},
{"ind_3fs", "تُؤَاخِذُ"},
{"ind_3md", "يُؤَاخِذَانِ"},
{"ind_3mp", "يُؤَاخِذُونَ"},
{"ind_3ms", "يُؤَاخِذُ"},
{"past_1p", "آخَذْنَا"},
{"past_1s", "آخَذْتُ"},
{"past_2d", "آخَذْتُمَا"},
{"past_2fp", "آخَذْتُنَّ"},
{"past_2fs", "آخَذْتِ"},
{"past_2mp", "آخَذْتُمْ"},
{"past_2ms", "آخَذْتَ"},
{"past_3fd", "آخَذَتَا"},
{"past_3fp", "آخَذْنَ"},
{"past_3fs", "آخَذَتْ"},
{"past_3md", "آخَذَا"},
{"past_3mp", "آخَذُوا"},
{"past_3ms", "آخَذَ"},
},
},
{
label = "اِدَّعَمَ (p.334)", root = "دعم", wazn = "افتعل",
forms = {
{"imp_2d", "اِدَّعِمَا"},
{"imp_2fp", "اِدَّعِمْنَ"},
{"imp_2fs", "اِدَّعِمِي"},
{"imp_2mp", "اِدَّعِمُوا"},
{"imp_2ms", "اِدَّعِمْ"},
{"ind_1p", "نَدَّعِمُ"},
{"ind_1s", "أَدَّعِمُ"},
{"ind_2d", "تَدَّعِمَانِ"},
{"ind_2fp", "تَدَّعِمْنَ"},
{"ind_2fs", "تَدَّعِمِينَ"},
{"ind_2mp", "تَدَّعِمُونَ"},
{"ind_2ms", "تَدَّعِمُ"},
{"ind_3fd", "تَدَّعِمَانِ"},
{"ind_3fp", "يَدَّعِمْنَ"},
{"ind_3fs", "تَدَّعِمُ"},
{"ind_3md", "يَدَّعِمَانِ"},
{"ind_3mp", "يَدَّعِمُونَ"},
{"ind_3ms", "يَدَّعِمُ"},
{"past_1p", "اِدَّعَمْنَا"},
{"past_1s", "اِدَّعَمْتُ"},
{"past_2d", "اِدَّعَمْتُمَا"},
{"past_2fp", "اِدَّعَمْتُنَّ"},
{"past_2fs", "اِدَّعَمْتِ"},
{"past_2mp", "اِدَّعَمْتُمْ"},
{"past_2ms", "اِدَّعَمْتَ"},
{"past_3fd", "اِدَّعَمَتَا"},
{"past_3fp", "اِدَّعَمْنَ"},
{"past_3fs", "اِدَّعَمَتْ"},
{"past_3md", "اِدَّعَمَا"},
{"past_3mp", "اِدَّعَمُوا"},
{"past_3ms", "اِدَّعَمَ"},
},
},
{
label = "هَنَأَ ـُ (p.135، مهموز اللام)", root = "هنأ", wazn = "فعَل يفعُل",
pass = true,
forms = {
{"imp_2d", "اُهْنُؤَا"},
{"imp_2fp", "اُهْنُؤْنَ"},
{"imp_2fs", "اُهْنُئِي"},
{"imp_2mp", "اُهْنُؤُوا"},
{"imp_2ms", "اُهْنُؤْ"},
{"ind_1p", "نَهْنُؤُ"},
{"ind_1s", "أَهْنُؤُ"},
{"ind_2d", "تَهْنُؤَانِ"},
{"ind_2fp", "تَهْنُؤْنَ"},
{"ind_2fs", "تَهْنُئِينَ"},
{"ind_2mp", "تَهْنُؤُونَ"},
{"ind_2ms", "تَهْنُؤُ"},
{"ind_3fd", "تَهْنُؤَانِ"},
{"ind_3fp", "يَهْنُؤْنَ"},
{"ind_3fs", "تَهْنُؤُ"},
{"ind_3md", "يَهْنُؤَانِ"},
{"ind_3mp", "يَهْنُؤُونَ"},
{"ind_3ms", "يَهْنُؤُ"},
{"ind_pass_1p", "نُهْنَأُ"},
{"ind_pass_1s", "أُهْنَأُ"},
{"ind_pass_2d", "تُهْنَآنِ"},
{"ind_pass_2fp", "تُهْنَأْنَ"},
{"ind_pass_2fs", "تُهْنَئِينَ"},
{"ind_pass_2mp", "تُهْنَؤُونَ"},
{"ind_pass_2ms", "تُهْنَأُ"},
{"ind_pass_3fd", "تُهْنَآنِ"},
{"ind_pass_3fp", "يُهْنَأْنَ"},
{"ind_pass_3fs", "تُهْنَأُ"},
{"ind_pass_3md", "يُهْنَآنِ"},
{"ind_pass_3mp", "يُهْنَؤُونَ"},
{"ind_pass_3ms", "يُهْنَأُ"},
{"past_1p", "هَنَأْنَا"},
{"past_1s", "هَنَأْتُ"},
{"past_2d", "هَنَأْتُمَا"},
{"past_2fp", "هَنَأْتُنَّ"},
{"past_2fs", "هَنَأْتِ"},
{"past_2mp", "هَنَأْتُمْ"},
{"past_2ms", "هَنَأْتَ"},
{"past_3fd", "هَنَأَتَا"},
{"past_3fp", "هَنَأْنَ"},
{"past_3fs", "هَنَأَتْ"},
{"past_3md", "هَنَآ"},
{"past_3mp", "هَنَؤُوا"},
{"past_3ms", "هَنَأَ"},
{"past_pass_1p", "هُنِئْنَا"},
{"past_pass_1s", "هُنِئْتُ"},
{"past_pass_2d", "هُنِئْتُمَا"},
{"past_pass_2fp", "هُنِئْتُنَّ"},
{"past_pass_2fs", "هُنِئْتِ"},
{"past_pass_2mp", "هُنِئْتُمْ"},
{"past_pass_2ms", "هُنِئْتَ"},
{"past_pass_3fd", "هُنِئَتَا"},
{"past_pass_3fp", "هُنِئْنَ"},
{"past_pass_3fs", "هُنِئَتْ"},
{"past_pass_3md", "هُنِئَا"},
{"past_pass_3mp", "هُنِئُوا"},
{"past_pass_3ms", "هُنِئَ"},
},
},
{
label = "دَعا ـُ (p.141، ناقص واوي)", root = "دعو", wazn = "فعَل يفعُل",
pass = true,
forms = {
{"imp_2d", "اُدْعُوَا"},
{"imp_2fp", "اُدْعُونَ"},
{"imp_2fs", "اُدْعِي"},
{"imp_2mp", "اُدْعُوا"},
{"imp_2ms", "اُدْعُ"},
{"ind_1p", "نَدْعُو"},
{"ind_1s", "أَدْعُو"},
{"ind_2d", "تَدْعُوَانِ"},
{"ind_2fp", "تَدْعُونَ"},
{"ind_2fs", "تَدْعِينَ"},
{"ind_2mp", "تَدْعُونَ"},
{"ind_2ms", "تَدْعُو"},
{"ind_3fd", "تَدْعُوَانِ"},
{"ind_3fp", "يَدْعُونَ"},
{"ind_3fs", "تَدْعُو"},
{"ind_3md", "يَدْعُوَانِ"},
{"ind_3mp", "يَدْعُونَ"},
{"ind_3ms", "يَدْعُو"},
{"ind_pass_1p", "نُدْعَى"},
{"ind_pass_1s", "أُدْعَى"},
{"ind_pass_2d", "تُدْعَيَانِ"},
{"ind_pass_2fp", "تُدْعَيْنَ"},
{"ind_pass_2fs", "تُدْعَيْنَ"},
{"ind_pass_2mp", "تُدْعَوْنَ"},
{"ind_pass_2ms", "تُدْعَى"},
{"ind_pass_3fd", "تُدْعَيَانِ"},
{"ind_pass_3fp", "يُدْعَيْنَ"},
{"ind_pass_3fs", "تُدْعَى"},
{"ind_pass_3md", "يُدْعَيَانِ"},
{"ind_pass_3mp", "يُدْعَوْنَ"},
{"ind_pass_3ms", "يُدْعَى"},
{"past_1p", "دَعَوْنَا"},
{"past_1s", "دَعَوْتُ"},
{"past_2d", "دَعَوْتُمَا"},
{"past_2fp", "دَعَوْتُنَّ"},
{"past_2fs", "دَعَوْتِ"},
{"past_2mp", "دَعَوْتُمْ"},
{"past_2ms", "دَعَوْتَ"},
{"past_3fd", "دَعَتَا"},
{"past_3fp", "دَعَوْنَ"},
{"past_3fs", "دَعَتْ"},
{"past_3md", "دَعَوَا"},
{"past_3mp", "دَعَوْا"},
{"past_3ms", "دَعَا"},
{"past_pass_1p", "دُعِينَا"},
{"past_pass_1s", "دُعِيتُ"},
{"past_pass_2d", "دُعِيتُمَا"},
{"past_pass_2fp", "دُعِيتُنَّ"},
{"past_pass_2fs", "دُعِيتِ"},
{"past_pass_2mp", "دُعِيتُمْ"},
{"past_pass_2ms", "دُعِيتَ"},
{"past_pass_3fd", "دُعِيَتَا"},
{"past_pass_3fp", "دُعِينَ"},
{"past_pass_3fs", "دُعِيَتْ"},
{"past_pass_3md", "دُعِيَا"},
{"past_pass_3mp", "دُعُوا"},
{"past_pass_3ms", "دُعِيَ"},
},
},
{
label = "هَيُؤَ ـُ (p.203، أجوف على فعُل)", root = "هيأ", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُهْيُؤَا"},
{"imp_2fp", "اُهْيُؤْنَ"},
{"imp_2fs", "اُهْيُئِي"},
{"imp_2mp", "اُهْيُؤُوا"},
{"imp_2ms", "اُهْيُؤْ"},
{"ind_1p", "نَهْيُؤُ"},
{"ind_1s", "أَهْيُؤُ"},
{"ind_2d", "تَهْيُؤَانِ"},
{"ind_2fp", "تَهْيُؤْنَ"},
{"ind_2fs", "تَهْيُئِينَ"},
{"ind_2mp", "تَهْيُؤُونَ"},
{"ind_2ms", "تَهْيُؤُ"},
{"ind_3fd", "تَهْيُؤَانِ"},
{"ind_3fp", "يَهْيُؤْنَ"},
{"ind_3fs", "تَهْيُؤُ"},
{"ind_3md", "يَهْيُؤَانِ"},
{"ind_3mp", "يَهْيُؤُونَ"},
{"ind_3ms", "يَهْيُؤُ"},
{"past_1p", "هَيُؤْنَا"},
{"past_1s", "هَيُؤْتُ"},
{"past_2d", "هَيُؤْتُمَا"},
{"past_2fp", "هَيُؤْتُنَّ"},
{"past_2fs", "هَيُؤْتِ"},
{"past_2mp", "هَيُؤْتُمْ"},
{"past_2ms", "هَيُؤْتَ"},
{"past_3fd", "هَيُؤَتَا"},
{"past_3fp", "هَيُؤْنَ"},
{"past_3fs", "هَيُؤَتْ"},
{"past_3md", "هَيُؤَا"},
{"past_3mp", "هَيُؤُوا"},
{"past_3ms", "هَيُؤَ"},
},
},
{
label = "وَفَى ـِ (p.164، لفيف مفروق)", root = "وفي", wazn = "فعَل يفعِل",
pass = true,
forms = {
{"imp_2d", "فِيَا"},
{"imp_2fp", "فِينَ"},
{"imp_2fs", "فِي"},
{"imp_2mp", "فُوا"},
{"imp_2ms", "فِ"},
{"ind_1p", "نَفِي"},
{"ind_1s", "أَفِي"},
{"ind_2d", "تَفِيَانِ"},
{"ind_2fp", "تَفِينَ"},
{"ind_2fs", "تَفِينَ"},
{"ind_2mp", "تَفُونَ"},
{"ind_2ms", "تَفِي"},
{"ind_3fd", "تَفِيَانِ"},
{"ind_3fp", "يَفِينَ"},
{"ind_3fs", "تَفِي"},
{"ind_3md", "يَفِيَانِ"},
{"ind_3mp", "يَفُونَ"},
{"ind_3ms", "يَفِي"},
{"ind_pass_1p", "نُوفَى"},
{"ind_pass_1s", "أُوفَى"},
{"ind_pass_2d", "تُوفَيَانِ"},
{"ind_pass_2fp", "تُوفَيْنَ"},
{"ind_pass_2fs", "تُوفَيْنَ"},
{"ind_pass_2mp", "تُوفَوْنَ"},
{"ind_pass_2ms", "تُوفَى"},
{"ind_pass_3fd", "تُوفَيَانِ"},
{"ind_pass_3fp", "يُوفَيْنَ"},
{"ind_pass_3fs", "تُوفَى"},
{"ind_pass_3md", "يُوفَيَانِ"},
{"ind_pass_3mp", "يُوفَوْنَ"},
{"ind_pass_3ms", "يُوفَى"},
{"past_1p", "وَفَيْنَا"},
{"past_1s", "وَفَيْتُ"},
{"past_2d", "وَفَيْتُمَا"},
{"past_2fp", "وَفَيْتُنَّ"},
{"past_2fs", "وَفَيْتِ"},
{"past_2mp", "وَفَيْتُمْ"},
{"past_2ms", "وَفَيْتَ"},
{"past_3fd", "وَفَتَا"},
{"past_3fp", "وَفَيْنَ"},
{"past_3fs", "وَفَتْ"},
{"past_3md", "وَفَيَا"},
{"past_3mp", "وَفَوْا"},
{"past_3ms", "وَفَى"},
{"past_pass_1p", "وُفِينَا"},
{"past_pass_1s", "وُفِيتُ"},
{"past_pass_2d", "وُفِيتُمَا"},
{"past_pass_2fp", "وُفِيتُنَّ"},
{"past_pass_2fs", "وُفِيتِ"},
{"past_pass_2mp", "وُفِيتُمْ"},
{"past_pass_2ms", "وُفِيتَ"},
{"past_pass_3fd", "وُفِيَتَا"},
{"past_pass_3fp", "وُفِينَ"},
{"past_pass_3fs", "وُفِيَتْ"},
{"past_pass_3md", "وُفِيَا"},
{"past_pass_3mp", "وُفُوا"},
{"past_pass_3ms", "وُفِيَ"},
},
},
{
label = "وَلِيَ ـِ (p.238، لفيف مفروق)", root = "ولي", wazn = "فعِل يفعِل",
pass = true,
forms = {
{"imp_2d", "لِيَا"},
{"imp_2fp", "لِينَ"},
{"imp_2fs", "لِي"},
{"imp_2mp", "لُوا"},
{"imp_2ms", "لِ"},
{"ind_1p", "نَلِي"},
{"ind_1s", "أَلِي"},
{"ind_2d", "تَلِيَانِ"},
{"ind_2fp", "تَلِينَ"},
{"ind_2fs", "تَلِينَ"},
{"ind_2mp", "تَلُونَ"},
{"ind_2ms", "تَلِي"},
{"ind_3fd", "تَلِيَانِ"},
{"ind_3fp", "يَلِينَ"},
{"ind_3fs", "تَلِي"},
{"ind_3md", "يَلِيَانِ"},
{"ind_3mp", "يَلُونَ"},
{"ind_3ms", "يَلِي"},
{"ind_pass_1p", "نُولَى"},
{"ind_pass_1s", "أُولَى"},
{"ind_pass_2d", "تُولَيَانِ"},
{"ind_pass_2fp", "تُولَيْنَ"},
{"ind_pass_2fs", "تُولَيْنَ"},
{"ind_pass_2mp", "تُولَوْنَ"},
{"ind_pass_2ms", "تُولَى"},
{"ind_pass_3fd", "تُولَيَانِ"},
{"ind_pass_3fp", "يُولَيْنَ"},
{"ind_pass_3fs", "تُولَى"},
{"ind_pass_3md", "يُولَيَانِ"},
{"ind_pass_3mp", "يُولَوْنَ"},
{"ind_pass_3ms", "يُولَى"},
{"past_1p", "وَلِينَا"},
{"past_1s", "وَلِيتُ"},
{"past_2d", "وَلِيتُمَا"},
{"past_2fp", "وَلِيتُنَّ"},
{"past_2fs", "وَلِيتِ"},
{"past_2mp", "وَلِيتُمْ"},
{"past_2ms", "وَلِيتَ"},
{"past_3fd", "وَلِيَتَا"},
{"past_3fp", "وَلِينَ"},
{"past_3fs", "وَلِيَتْ"},
{"past_3md", "وَلِيَا"},
{"past_3mp", "وَلُوا"},
{"past_3ms", "وَلِيَ"},
{"past_pass_1p", "وُلِينَا"},
{"past_pass_1s", "وُلِيتُ"},
{"past_pass_2d", "وُلِيتُمَا"},
{"past_pass_2fp", "وُلِيتُنَّ"},
{"past_pass_2fs", "وُلِيتِ"},
{"past_pass_2mp", "وُلِيتُمْ"},
{"past_pass_2ms", "وُلِيتَ"},
{"past_pass_3fd", "وُلِيَتَا"},
{"past_pass_3fp", "وُلِينَ"},
{"past_pass_3fs", "وُلِيَتْ"},
{"past_pass_3md", "وُلِيَا"},
{"past_pass_3mp", "وُلُوا"},
{"past_pass_3ms", "وُلِيَ"},
},
},
{
label = "تَفاعَلَ (p.302، الوزن السادس)", root = "فعل", wazn = "تفاعل",
pass = true,
forms = {
{"imp_2d", "تَفَاعَلَا"},
{"imp_2fp", "تَفَاعَلْنَ"},
{"imp_2fs", "تَفَاعَلِي"},
{"imp_2mp", "تَفَاعَلُوا"},
{"imp_2ms", "تَفَاعَلْ"},
{"ind_1p", "نَتَفَاعَلُ"},
{"ind_1s", "أَتَفَاعَلُ"},
{"ind_2d", "تَتَفَاعَلَانِ"},
{"ind_2fp", "تَتَفَاعَلْنَ"},
{"ind_2fs", "تَتَفَاعَلِينَ"},
{"ind_2mp", "تَتَفَاعَلُونَ"},
{"ind_2ms", "تَتَفَاعَلُ"},
{"ind_3fd", "تَتَفَاعَلَانِ"},
{"ind_3fp", "يَتَفَاعَلْنَ"},
{"ind_3fs", "تَتَفَاعَلُ"},
{"ind_3md", "يَتَفَاعَلَانِ"},
{"ind_3mp", "يَتَفَاعَلُونَ"},
{"ind_3ms", "يَتَفَاعَلُ"},
{"ind_pass_1p", "نُتَفَاعَلُ"},
{"ind_pass_1s", "أُتَفَاعَلُ"},
{"ind_pass_2d", "تُتَفَاعَلَانِ"},
{"ind_pass_2fp", "تُتَفَاعَلْنَ"},
{"ind_pass_2fs", "تُتَفَاعَلِينَ"},
{"ind_pass_2mp", "تُتَفَاعَلُونَ"},
{"ind_pass_2ms", "تُتَفَاعَلُ"},
{"ind_pass_3fd", "تُتَفَاعَلَانِ"},
{"ind_pass_3fp", "يُتَفَاعَلْنَ"},
{"ind_pass_3fs", "تُتَفَاعَلُ"},
{"ind_pass_3md", "يُتَفَاعَلَانِ"},
{"ind_pass_3mp", "يُتَفَاعَلُونَ"},
{"ind_pass_3ms", "يُتَفَاعَلُ"},
{"past_1p", "تَفَاعَلْنَا"},
{"past_1s", "تَفَاعَلْتُ"},
{"past_2d", "تَفَاعَلْتُمَا"},
{"past_2fp", "تَفَاعَلْتُنَّ"},
{"past_2fs", "تَفَاعَلْتِ"},
{"past_2mp", "تَفَاعَلْتُمْ"},
{"past_2ms", "تَفَاعَلْتَ"},
{"past_3fd", "تَفَاعَلَتَا"},
{"past_3fp", "تَفَاعَلْنَ"},
{"past_3fs", "تَفَاعَلَتْ"},
{"past_3md", "تَفَاعَلَا"},
{"past_3mp", "تَفَاعَلُوا"},
{"past_3ms", "تَفَاعَلَ"},
{"past_pass_1p", "تُفُوعِلْنَا"},
{"past_pass_1s", "تُفُوعِلْتُ"},
{"past_pass_2d", "تُفُوعِلْتُمَا"},
{"past_pass_2fp", "تُفُوعِلْتُنَّ"},
{"past_pass_2fs", "تُفُوعِلْتِ"},
{"past_pass_2mp", "تُفُوعِلْتُمْ"},
{"past_pass_2ms", "تُفُوعِلْتَ"},
{"past_pass_3fd", "تُفُوعِلَتَا"},
{"past_pass_3fp", "تُفُوعِلْنَ"},
{"past_pass_3fs", "تُفُوعِلَتْ"},
{"past_pass_3md", "تُفُوعِلَا"},
{"past_pass_3mp", "تُفُوعِلُوا"},
{"past_pass_3ms", "تُفُوعِلَ"},
},
},
{
label = "فَرَّ ـِ (p.147، مضاعف)", root = "فرر", wazn = "فعَل يفعِل",
pass = true,
forms = {
{"imp_2d", "فِرَّا"},
{"imp_2fp", "اِفْرِرْنَ"},
{"imp_2fs", "فِرِّي"},
{"imp_2mp", "فِرُّوا"},
{"imp_2ms", "فِرَّ"},
{"ind_1p", "نَفِرُّ"},
{"ind_1s", "أَفِرُّ"},
{"ind_2d", "تَفِرَّانِ"},
{"ind_2fp", "تَفْرِرْنَ"},
{"ind_2fs", "تَفِرِّينَ"},
{"ind_2mp", "تَفِرُّونَ"},
{"ind_2ms", "تَفِرُّ"},
{"ind_3fd", "تَفِرَّانِ"},
{"ind_3fp", "يَفْرِرْنَ"},
{"ind_3fs", "تَفِرُّ"},
{"ind_3md", "يَفِرَّانِ"},
{"ind_3mp", "يَفِرُّونَ"},
{"ind_3ms", "يَفِرُّ"},
{"ind_pass_1p", "نُفَرُّ"},
{"ind_pass_1s", "أُفَرُّ"},
{"ind_pass_2d", "تُفَرَّانِ"},
{"ind_pass_2fp", "تُفْرَرْنَ"},
{"ind_pass_2fs", "تُفَرِّينَ"},
{"ind_pass_2mp", "تُفَرُّونَ"},
{"ind_pass_2ms", "تُفَرُّ"},
{"ind_pass_3fd", "تُفَرَّانِ"},
{"ind_pass_3fp", "يُفْرَرْنَ"},
{"ind_pass_3fs", "تُفَرُّ"},
{"ind_pass_3md", "يُفَرَّانِ"},
{"ind_pass_3mp", "يُفَرُّونَ"},
{"ind_pass_3ms", "يُفَرُّ"},
{"past_1p", "فَرَرْنَا"},
{"past_1s", "فَرَرْتُ"},
{"past_2d", "فَرَرْتُمَا"},
{"past_2fp", "فَرَرْتُنَّ"},
{"past_2fs", "فَرَرْتِ"},
{"past_2mp", "فَرَرْتُمْ"},
{"past_2ms", "فَرَرْتَ"},
{"past_3fd", "فَرَّتَا"},
{"past_3fp", "فَرَرْنَ"},
{"past_3fs", "فَرَّتْ"},
{"past_3md", "فَرَّا"},
{"past_3mp", "فَرُّوا"},
{"past_3ms", "فَرَّ"},
{"past_pass_1p", "فُرِرْنَا"},
{"past_pass_1s", "فُرِرْتُ"},
{"past_pass_2d", "فُرِرْتُمَا"},
{"past_pass_2fp", "فُرِرْتُنَّ"},
{"past_pass_2fs", "فُرِرْتِ"},
{"past_pass_2mp", "فُرِرْتُمْ"},
{"past_pass_2ms", "فُرِرْتَ"},
{"past_pass_3fd", "فُرَّتَا"},
{"past_pass_3fp", "فُرِرْنَ"},
{"past_pass_3fs", "فُرَّتْ"},
{"past_pass_3md", "فُرَّا"},
{"past_pass_3mp", "فُرُّوا"},
{"past_pass_3ms", "فُرَّ"},
},
},
{
label = "خافَ ـَ (p.222، أجوف واوي)", root = "خوف", wazn = "فعِل يفعَل",
pass = true,
forms = {
{"imp_2d", "خَافَا"},
{"imp_2fp", "خَفْنَ"},
{"imp_2fs", "خَافِي"},
{"imp_2mp", "خَافُوا"},
{"imp_2ms", "خَفْ"},
{"ind_1p", "نَخَافُ"},
{"ind_1s", "أَخَافُ"},
{"ind_2d", "تَخَافَانِ"},
{"ind_2fp", "تَخَفْنَ"},
{"ind_2fs", "تَخَافِينَ"},
{"ind_2mp", "تَخَافُونَ"},
{"ind_2ms", "تَخَافُ"},
{"ind_3fd", "تَخَافَانِ"},
{"ind_3fp", "يَخَفْنَ"},
{"ind_3fs", "تَخَافُ"},
{"ind_3md", "يَخَافَانِ"},
{"ind_3mp", "يَخَافُونَ"},
{"ind_3ms", "يَخَافُ"},
{"ind_pass_1p", "نُخَافُ"},
{"ind_pass_1s", "أُخَافُ"},
{"ind_pass_2d", "تُخَافَانِ"},
{"ind_pass_2fp", "تُخَفْنَ"},
{"ind_pass_2fs", "تُخَافِينَ"},
{"ind_pass_2mp", "تُخَافُونَ"},
{"ind_pass_2ms", "تُخَافُ"},
{"ind_pass_3fd", "تُخَافَانِ"},
{"ind_pass_3fp", "يُخَفْنَ"},
{"ind_pass_3fs", "تُخَافُ"},
{"ind_pass_3md", "يُخَافَانِ"},
{"ind_pass_3mp", "يُخَافُونَ"},
{"ind_pass_3ms", "يُخَافُ"},
{"past_1p", "خِفْنَا"},
{"past_1s", "خِفْتُ"},
{"past_2d", "خِفْتُمَا"},
{"past_2fp", "خِفْتُنَّ"},
{"past_2fs", "خِفْتِ"},
{"past_2mp", "خِفْتُمْ"},
{"past_2ms", "خِفْتَ"},
{"past_3fd", "خَافَتَا"},
{"past_3fp", "خِفْنَ"},
{"past_3fs", "خَافَتْ"},
{"past_3md", "خَافَا"},
{"past_3mp", "خَافُوا"},
{"past_3ms", "خَافَ"},
{"past_pass_1p", "خُفْنَا"},
{"past_pass_1s", "خُفْتُ"},
{"past_pass_2d", "خُفْتُمَا"},
{"past_pass_2fp", "خُفْتُنَّ"},
{"past_pass_2fs", "خُفْتِ"},
{"past_pass_2mp", "خُفْتُمْ"},
{"past_pass_2ms", "خُفْتَ"},
{"past_pass_3fd", "خِيفَتَا"},
{"past_pass_3fp", "خُفْنَ"},
{"past_pass_3fs", "خِيفَتْ"},
{"past_pass_3md", "خِيفَا"},
{"past_pass_3mp", "خِيفُوا"},
{"past_pass_3ms", "خِيفَ"},
},
},
{
label = "فَعْلَلَ (p.385، رباعي مجرد)", root = "فعلل", wazn = "فعلل",
pass = true,
forms = {
{"imp_2d", "فَعْلِلَا"},
{"imp_2fp", "فَعْلِلْنَ"},
{"imp_2fs", "فَعْلِلِي"},
{"imp_2mp", "فَعْلِلُوا"},
{"imp_2ms", "فَعْلِلْ"},
{"ind_1p", "نُفَعْلِلُ"},
{"ind_1s", "أُفَعْلِلُ"},
{"ind_2d", "تُفَعْلِلَانِ"},
{"ind_2fp", "تُفَعْلِلْنَ"},
{"ind_2fs", "تُفَعْلِلِينَ"},
{"ind_2mp", "تُفَعْلِلُونَ"},
{"ind_2ms", "تُفَعْلِلُ"},
{"ind_3fd", "تُفَعْلِلَانِ"},
{"ind_3fp", "يُفَعْلِلْنَ"},
{"ind_3fs", "تُفَعْلِلُ"},
{"ind_3md", "يُفَعْلِلَانِ"},
{"ind_3mp", "يُفَعْلِلُونَ"},
{"ind_3ms", "يُفَعْلِلُ"},
{"ind_pass_1p", "نُفَعْلَلُ"},
{"ind_pass_1s", "أُفَعْلَلُ"},
{"ind_pass_2d", "تُفَعْلَلَانِ"},
{"ind_pass_2fp", "تُفَعْلَلْنَ"},
{"ind_pass_2fs", "تُفَعْلَلِينَ"},
{"ind_pass_2mp", "تُفَعْلَلُونَ"},
{"ind_pass_2ms", "تُفَعْلَلُ"},
{"ind_pass_3fd", "تُفَعْلَلَانِ"},
{"ind_pass_3fp", "يُفَعْلَلْنَ"},
{"ind_pass_3fs", "تُفَعْلَلُ"},
{"ind_pass_3md", "يُفَعْلَلَانِ"},
{"ind_pass_3mp", "يُفَعْلَلُونَ"},
{"ind_pass_3ms", "يُفَعْلَلُ"},
{"past_1p", "فَعْلَلْنَا"},
{"past_1s", "فَعْلَلْتُ"},
{"past_2d", "فَعْلَلْتُمَا"},
{"past_2fp", "فَعْلَلْتُنَّ"},
{"past_2fs", "فَعْلَلْتِ"},
{"past_2mp", "فَعْلَلْتُمْ"},
{"past_2ms", "فَعْلَلْتَ"},
{"past_3fd", "فَعْلَلَتَا"},
{"past_3fp", "فَعْلَلْنَ"},
{"past_3fs", "فَعْلَلَتْ"},
{"past_3md", "فَعْلَلَا"},
{"past_3mp", "فَعْلَلُوا"},
{"past_3ms", "فَعْلَلَ"},
{"past_pass_1p", "فُعْلِلْنَا"},
{"past_pass_1s", "فُعْلِلْتُ"},
{"past_pass_2d", "فُعْلِلْتُمَا"},
{"past_pass_2fp", "فُعْلِلْتُنَّ"},
{"past_pass_2fs", "فُعْلِلْتِ"},
{"past_pass_2mp", "فُعْلِلْتُمْ"},
{"past_pass_2ms", "فُعْلِلْتَ"},
{"past_pass_3fd", "فُعْلِلَتَا"},
{"past_pass_3fp", "فُعْلِلْنَ"},
{"past_pass_3fs", "فُعْلِلَتْ"},
{"past_pass_3md", "فُعْلِلَا"},
{"past_pass_3mp", "فُعْلِلُوا"},
{"past_pass_3ms", "فُعْلِلَ"},
},
},
{
label = "اِسَّمَّعَ (p.287، تفعّل مدغم)", root = "سمع", wazn = "تفعّل",
reduced = true,
forms = {
{"imp_2d", "اِسَّمَّعَا"},
{"imp_2fp", "اِسَّمَّعْنَ"},
{"imp_2fs", "اِسَّمَّعِي"},
{"imp_2mp", "اِسَّمَّعُوا"},
{"imp_2ms", "اِسَّمَّعْ"},
{"ind_1p", "نَسَّمَّعُ"},
{"ind_1s", "أَسَّمَّعُ"},
{"ind_2d", "تَسَّمَّعَانِ"},
{"ind_2fp", "تَسَّمَّعْنَ"},
{"ind_2fs", "تَسَّمَّعِينَ"},
{"ind_2mp", "تَسَّمَّعُونَ"},
{"ind_2ms", "تَسَّمَّعُ"},
{"ind_3fd", "تَسَّمَّعَانِ"},
{"ind_3fp", "يَسَّمَّعْنَ"},
{"ind_3fs", "تَسَّمَّعُ"},
{"ind_3md", "يَسَّمَّعَانِ"},
{"ind_3mp", "يَسَّمَّعُونَ"},
{"ind_3ms", "يَسَّمَّعُ"},
{"past_1p", "اِسَّمَّعْنَا"},
{"past_1s", "اِسَّمَّعْتُ"},
{"past_2d", "اِسَّمَّعْتُمَا"},
{"past_2fp", "اِسَّمَّعْتُنَّ"},
{"past_2fs", "اِسَّمَّعْتِ"},
{"past_2mp", "اِسَّمَّعْتُمْ"},
{"past_2ms", "اِسَّمَّعْتَ"},
{"past_3fd", "اِسَّمَّعَتَا"},
{"past_3fp", "اِسَّمَّعْنَ"},
{"past_3fs", "اِسَّمَّعَتْ"},
{"past_3md", "اِسَّمَّعَا"},
{"past_3mp", "اِسَّمَّعُوا"},
{"past_3ms", "اِسَّمَّعَ"},
},
},
{
label = "فَعَّلَ (p.241، الوزن الثاني)", root = "فعل", wazn = "فعّل",
pass = true,
forms = {
{"imp_2d", "فَعِّلَا"},
{"imp_2fp", "فَعِّلْنَ"},
{"imp_2fs", "فَعِّلِي"},
{"imp_2mp", "فَعِّلُوا"},
{"imp_2ms", "فَعِّلْ"},
{"ind_1p", "نُفَعِّلُ"},
{"ind_1s", "أُفَعِّلُ"},
{"ind_2d", "تُفَعِّلَانِ"},
{"ind_2fp", "تُفَعِّلْنَ"},
{"ind_2fs", "تُفَعِّلِينَ"},
{"ind_2mp", "تُفَعِّلُونَ"},
{"ind_2ms", "تُفَعِّلُ"},
{"ind_3fd", "تُفَعِّلَانِ"},
{"ind_3fp", "يُفَعِّلْنَ"},
{"ind_3fs", "تُفَعِّلُ"},
{"ind_3md", "يُفَعِّلَانِ"},
{"ind_3mp", "يُفَعِّلُونَ"},
{"ind_3ms", "يُفَعِّلُ"},
{"ind_pass_1p", "نُفَعَّلُ"},
{"ind_pass_1s", "أُفَعَّلُ"},
{"ind_pass_2d", "تُفَعَّلَانِ"},
{"ind_pass_2fp", "تُفَعَّلْنَ"},
{"ind_pass_2fs", "تُفَعَّلِينَ"},
{"ind_pass_2mp", "تُفَعَّلُونَ"},
{"ind_pass_2ms", "تُفَعَّلُ"},
{"ind_pass_3fd", "تُفَعَّلَانِ"},
{"ind_pass_3fp", "يُفَعَّلْنَ"},
{"ind_pass_3fs", "تُفَعَّلُ"},
{"ind_pass_3md", "يُفَعَّلَانِ"},
{"ind_pass_3mp", "يُفَعَّلُونَ"},
{"ind_pass_3ms", "يُفَعَّلُ"},
{"past_1p", "فَعَّلْنَا"},
{"past_1s", "فَعَّلْتُ"},
{"past_2d", "فَعَّلْتُمَا"},
{"past_2fp", "فَعَّلْتُنَّ"},
{"past_2fs", "فَعَّلْتِ"},
{"past_2mp", "فَعَّلْتُمْ"},
{"past_2ms", "فَعَّلْتَ"},
{"past_3fd", "فَعَّلَتَا"},
{"past_3fp", "فَعَّلْنَ"},
{"past_3fs", "فَعَّلَتْ"},
{"past_3md", "فَعَّلَا"},
{"past_3mp", "فَعَّلُوا"},
{"past_3ms", "فَعَّلَ"},
{"past_pass_1p", "فُعِّلْنَا"},
{"past_pass_1s", "فُعِّلْتُ"},
{"past_pass_2d", "فُعِّلْتُمَا"},
{"past_pass_2fp", "فُعِّلْتُنَّ"},
{"past_pass_2fs", "فُعِّلْتِ"},
{"past_pass_2mp", "فُعِّلْتُمْ"},
{"past_pass_2ms", "فُعِّلْتَ"},
{"past_pass_3fd", "فُعِّلَتَا"},
{"past_pass_3fp", "فُعِّلْنَ"},
{"past_pass_3fs", "فُعِّلَتْ"},
{"past_pass_3md", "فُعِّلَا"},
{"past_pass_3mp", "فُعِّلُوا"},
{"past_pass_3ms", "فُعِّلَ"},
},
},
{
label = "حَيِيَ ـَ (p.229، لفيف مقرون)", root = "حيي", wazn = "فعِل يفعَل",
pass = true,
forms = {
{"imp_2d", "اِحْيَيَا"},
{"imp_2fp", "اِحْيَيْنَ"},
{"imp_2fs", "اِحْيَيْ"},
{"imp_2mp", "اِحْيَوْا"},
{"imp_2ms", "اِحْيَ"},
{"ind_1p", "نَحْيَا"},
{"ind_1s", "أَحْيَا"},
{"ind_2d", "تَحْيَيَانِ"},
{"ind_2fp", "تَحْيَيْنَ"},
{"ind_2fs", "تَحْيَيْنَ"},
{"ind_2mp", "تَحْيَوْنَ"},
{"ind_2ms", "تَحْيَا"},
{"ind_3fd", "تَحْيَيَانِ"},
{"ind_3fp", "يَحْيَيْنَ"},
{"ind_3fs", "تَحْيَا"},
{"ind_3md", "يَحْيَيَانِ"},
{"ind_3mp", "يَحْيَوْنَ"},
{"ind_3ms", "يَحْيَا"},
{"ind_pass_1p", "نُحْيَا"},
{"ind_pass_1s", "أُحْيَا"},
{"ind_pass_2d", "تُحْيَيَانِ"},
{"ind_pass_2fp", "تُحْيَيْنَ"},
{"ind_pass_2fs", "تُحْيَيْنَ"},
{"ind_pass_2mp", "تُحْيَوْنَ"},
{"ind_pass_2ms", "تُحْيَا"},
{"ind_pass_3fd", "تُحْيَيَانِ"},
{"ind_pass_3fp", "يُحْيَيْنَ"},
{"ind_pass_3fs", "تُحْيَا"},
{"ind_pass_3md", "يُحْيَيَانِ"},
{"ind_pass_3mp", "يُحْيَوْنَ"},
{"ind_pass_3ms", "يُحْيَا"},
{"past_1p", "حَيِينَا"},
{"past_1s", "حَيِيتُ"},
{"past_2d", "حَيِيتُمَا"},
{"past_2fp", "حَيِيتُنَّ"},
{"past_2fs", "حَيِيتِ"},
{"past_2mp", "حَيِيتُمْ"},
{"past_2ms", "حَيِيتَ"},
{"past_3fd", "حَيِيَتَا"},
{"past_3fp", "حَيِينَ"},
{"past_3fs", "حَيِيَتْ"},
{"past_3md", "حَيِيَا"},
{"past_3mp", "حَيُوا"},
{"past_3ms", "حَيِيَ"},
{"past_pass_1p", "حُيِينَا"},
{"past_pass_1s", "حُيِيتُ"},
{"past_pass_2d", "حُيِيتُمَا"},
{"past_pass_2fp", "حُيِيتُنَّ"},
{"past_pass_2fs", "حُيِيتِ"},
{"past_pass_2mp", "حُيِيتُمْ"},
{"past_pass_2ms", "حُيِيتَ"},
{"past_pass_3fd", "حُيِيَتَا"},
{"past_pass_3fp", "حُيِينَ"},
{"past_pass_3fs", "حُيِيَتْ"},
{"past_pass_3md", "حُيِيَا"},
{"past_pass_3mp", "حُيُوا"},
{"past_pass_3ms", "حُيِيَ"},
},
},
{
label = "اِحْوَنْصَلَ (p.412، افعنلل)", root = "حوصل", wazn = "افعنلل",
forms = {
{"imp_2d", "اِحْوَنْصِلَا"},
{"imp_2fp", "اِحْوَنْصِلْنَ"},
{"imp_2fs", "اِحْوَنْصِلِي"},
{"imp_2mp", "اِحْوَنْصِلُوا"},
{"imp_2ms", "اِحْوَنْصِلْ"},
{"ind_1p", "نَحْوَنْصِلُ"},
{"ind_1s", "أَحْوَنْصِلُ"},
{"ind_2d", "تَحْوَنْصِلَانِ"},
{"ind_2fp", "تَحْوَنْصِلْنَ"},
{"ind_2fs", "تَحْوَنْصِلِينَ"},
{"ind_2mp", "تَحْوَنْصِلُونَ"},
{"ind_2ms", "تَحْوَنْصِلُ"},
{"ind_3fd", "تَحْوَنْصِلَانِ"},
{"ind_3fp", "يَحْوَنْصِلْنَ"},
{"ind_3fs", "تَحْوَنْصِلُ"},
{"ind_3md", "يَحْوَنْصِلَانِ"},
{"ind_3mp", "يَحْوَنْصِلُونَ"},
{"ind_3ms", "يَحْوَنْصِلُ"},
{"past_1p", "اِحْوَنْصَلْنَا"},
{"past_1s", "اِحْوَنْصَلْتُ"},
{"past_2d", "اِحْوَنْصَلْتُمَا"},
{"past_2fp", "اِحْوَنْصَلْتُنَّ"},
{"past_2fs", "اِحْوَنْصَلْتِ"},
{"past_2mp", "اِحْوَنْصَلْتُمْ"},
{"past_2ms", "اِحْوَنْصَلْتَ"},
{"past_3fd", "اِحْوَنْصَلَتَا"},
{"past_3fp", "اِحْوَنْصَلْنَ"},
{"past_3fs", "اِحْوَنْصَلَتْ"},
{"past_3md", "اِحْوَنْصَلَا"},
{"past_3mp", "اِحْوَنْصَلُوا"},
{"past_3ms", "اِحْوَنْصَلَ"},
},
},
{
label = "اِرْعَوَى (p.357، افعلّ ناقص)", root = "رعو", wazn = "افعلّ",
forms = {
{"imp_2d", "اِرْعَوِيَا"},
{"imp_2fp", "اِرْعَوِينَ"},
{"imp_2fs", "اِرْعَوِي"},
{"imp_2mp", "اِرْعَوُوا"},
{"imp_2ms", "اِرْعَوِ"},
{"ind_1p", "نَرْعَوِي"},
{"ind_1s", "أَرْعَوِي"},
{"ind_2d", "تَرْعَوِيَانِ"},
{"ind_2fp", "تَرْعَوِينَ"},
{"ind_2fs", "تَرْعَوِينَ"},
{"ind_2mp", "تَرْعَوُونَ"},
{"ind_2ms", "تَرْعَوِي"},
{"ind_3fd", "تَرْعَوِيَانِ"},
{"ind_3fp", "يَرْعَوِينَ"},
{"ind_3fs", "تَرْعَوِي"},
{"ind_3md", "يَرْعَوِيَانِ"},
{"ind_3mp", "يَرْعَوُونَ"},
{"ind_3ms", "يَرْعَوِي"},
{"past_1p", "اِرْعَوَيْنَا"},
{"past_1s", "اِرْعَوَيْتُ"},
{"past_2d", "اِرْعَوَيْتُمَا"},
{"past_2fp", "اِرْعَوَيْتُنَّ"},
{"past_2fs", "اِرْعَوَيْتِ"},
{"past_2mp", "اِرْعَوَيْتُمْ"},
{"past_2ms", "اِرْعَوَيْتَ"},
{"past_3fd", "اِرْعَوَتَا"},
{"past_3fp", "اِرْعَوَيْنَ"},
{"past_3fs", "اِرْعَوَتْ"},
{"past_3md", "اِرْعَوَيَا"},
{"past_3mp", "اِرْعَوَوْا"},
{"past_3ms", "اِرْعَوَى"},
},
},
{
label = "تَفَوْعَلَ (p.398، تفعلل)", root = "فوعل", wazn = "تفعلل",
pass = true,
forms = {
{"imp_2d", "تَفَوْعَلَا"},
{"imp_2fp", "تَفَوْعَلْنَ"},
{"imp_2fs", "تَفَوْعَلِي"},
{"imp_2mp", "تَفَوْعَلُوا"},
{"imp_2ms", "تَفَوْعَلْ"},
{"ind_1p", "نَتَفَوْعَلُ"},
{"ind_1s", "أَتَفَوْعَلُ"},
{"ind_2d", "تَتَفَوْعَلَانِ"},
{"ind_2fp", "تَتَفَوْعَلْنَ"},
{"ind_2fs", "تَتَفَوْعَلِينَ"},
{"ind_2mp", "تَتَفَوْعَلُونَ"},
{"ind_2ms", "تَتَفَوْعَلُ"},
{"ind_3fd", "تَتَفَوْعَلَانِ"},
{"ind_3fp", "يَتَفَوْعَلْنَ"},
{"ind_3fs", "تَتَفَوْعَلُ"},
{"ind_3md", "يَتَفَوْعَلَانِ"},
{"ind_3mp", "يَتَفَوْعَلُونَ"},
{"ind_3ms", "يَتَفَوْعَلُ"},
{"ind_pass_1p", "نُتَفَوْعَلُ"},
{"ind_pass_1s", "أُتَفَوْعَلُ"},
{"ind_pass_2d", "تُتَفَوْعَلَانِ"},
{"ind_pass_2fp", "تُتَفَوْعَلْنَ"},
{"ind_pass_2fs", "تُتَفَوْعَلِينَ"},
{"ind_pass_2mp", "تُتَفَوْعَلُونَ"},
{"ind_pass_2ms", "تُتَفَوْعَلُ"},
{"ind_pass_3fd", "تُتَفَوْعَلَانِ"},
{"ind_pass_3fp", "يُتَفَوْعَلْنَ"},
{"ind_pass_3fs", "تُتَفَوْعَلُ"},
{"ind_pass_3md", "يُتَفَوْعَلَانِ"},
{"ind_pass_3mp", "يُتَفَوْعَلُونَ"},
{"ind_pass_3ms", "يُتَفَوْعَلُ"},
{"past_1p", "تَفَوْعَلْنَا"},
{"past_1s", "تَفَوْعَلْتُ"},
{"past_2d", "تَفَوْعَلْتُمَا"},
{"past_2fp", "تَفَوْعَلْتُنَّ"},
{"past_2fs", "تَفَوْعَلْتِ"},
{"past_2mp", "تَفَوْعَلْتُمْ"},
{"past_2ms", "تَفَوْعَلْتَ"},
{"past_3fd", "تَفَوْعَلَتَا"},
{"past_3fp", "تَفَوْعَلْنَ"},
{"past_3fs", "تَفَوْعَلَتْ"},
{"past_3md", "تَفَوْعَلَا"},
{"past_3mp", "تَفَوْعَلُوا"},
{"past_3ms", "تَفَوْعَلَ"},
{"past_pass_1p", "تُفُوعِلْنَا"},
{"past_pass_1s", "تُفُوعِلْتُ"},
{"past_pass_2d", "تُفُوعِلْتُمَا"},
{"past_pass_2fp", "تُفُوعِلْتُنَّ"},
{"past_pass_2fs", "تُفُوعِلْتِ"},
{"past_pass_2mp", "تُفُوعِلْتُمْ"},
{"past_pass_2ms", "تُفُوعِلْتَ"},
{"past_pass_3fd", "تُفُوعِلَتَا"},
{"past_pass_3fp", "تُفُوعِلْنَ"},
{"past_pass_3fs", "تُفُوعِلَتْ"},
{"past_pass_3md", "تُفُوعِلَا"},
{"past_pass_3mp", "تُفُوعِلُوا"},
{"past_pass_3ms", "تُفُوعِلَ"},
},
},
{
label = "اِظَّنَّ (p.336، افتعل مدغم مضاعف)", root = "ظنن", wazn = "افتعل",
forms = {
{"imp_2d", "اِظَّنَّا"},
{"imp_2fs", "اِظَّنِّي"},
{"imp_2mp", "اِظَّنُّوا"},
{"imp_2ms", "اِظَّنَّ"},
{"ind_1p", "نَظَّنُّ"},
{"ind_1s", "أَظَّنُّ"},
{"ind_2d", "تَظَّنَّانِ"},
{"ind_2fs", "تَظَّنِّينَ"},
{"ind_2mp", "تَظَّنُّونَ"},
{"ind_2ms", "تَظَّنُّ"},
{"ind_3fd", "تَظَّنَّانِ"},
{"ind_3fs", "تَظَّنُّ"},
{"ind_3md", "يَظَّنَّانِ"},
{"ind_3mp", "يَظَّنُّونَ"},
{"ind_3ms", "يَظَّنُّ"},
{"past_1p", "اِظَّنَنَّا"},
{"past_1s", "اِظَّنَنْتُ"},
{"past_2d", "اِظَّنَنْتُمَا"},
{"past_2fp", "اِظَّنَنْتُنَّ"},
{"past_2fs", "اِظَّنَنْتِ"},
{"past_2mp", "اِظَّنَنْتُمْ"},
{"past_2ms", "اِظَّنَنْتَ"},
{"past_3fd", "اِظَّنَّتَا"},
{"past_3fs", "اِظَّنَّتْ"},
{"past_3md", "اِظَّنَّا"},
{"past_3mp", "اِظَّنُّوا"},
{"past_3ms", "اِظَّنَّ"},
},
},
{
label = "اِصّاعَدَ (p.304، تفاعل مدغم)", root = "صعد", wazn = "تفاعل",
reduced = true,
forms = {
{"imp_2d", "اِصَّاعَدَا"},
{"imp_2fp", "اِصَّاعَدْنَ"},
{"imp_2fs", "اِصَّاعَدِي"},
{"imp_2mp", "اِصَّاعَدُوا"},
{"imp_2ms", "اِصَّاعَدْ"},
{"ind_1p", "نَصَّاعَدُ"},
{"ind_1s", "أَصَّاعَدُ"},
{"ind_2d", "تَصَّاعَدَانِ"},
{"ind_2fp", "تَصَّاعَدْنَ"},
{"ind_2fs", "تَصَّاعَدِينَ"},
{"ind_2mp", "تَصَّاعَدُونَ"},
{"ind_2ms", "تَصَّاعَدُ"},
{"ind_3fd", "تَصَّاعَدَانِ"},
{"ind_3fp", "يَصَّاعَدْنَ"},
{"ind_3fs", "تَصَّاعَدُ"},
{"ind_3md", "يَصَّاعَدَانِ"},
{"ind_3mp", "يَصَّاعَدُونَ"},
{"ind_3ms", "يَصَّاعَدُ"},
{"past_1p", "اِصَّاعَدْنَا"},
{"past_1s", "اِصَّاعَدْتُ"},
{"past_2d", "اِصَّاعَدْتُمَا"},
{"past_2fp", "اِصَّاعَدْتُنَّ"},
{"past_2fs", "اِصَّاعَدْتِ"},
{"past_2mp", "اِصَّاعَدْتُمْ"},
{"past_2ms", "اِصَّاعَدْتَ"},
{"past_3fd", "اِصَّاعَدَتَا"},
{"past_3fp", "اِصَّاعَدْنَ"},
{"past_3fs", "اِصَّاعَدَتْ"},
{"past_3md", "اِصَّاعَدَا"},
{"past_3mp", "اِصَّاعَدُوا"},
{"past_3ms", "اِصَّاعَدَ"},
},
},
{
label = "فاعَلَ (p.256، الوزن الثالث)", root = "فعل", wazn = "فاعل",
pass = true,
forms = {
{"imp_2d", "فَاعِلَا"},
{"imp_2fp", "فَاعِلْنَ"},
{"imp_2fs", "فَاعِلِي"},
{"imp_2mp", "فَاعِلُوا"},
{"imp_2ms", "فَاعِلْ"},
{"ind_1p", "نُفَاعِلُ"},
{"ind_1s", "أُفَاعِلُ"},
{"ind_2d", "تُفَاعِلَانِ"},
{"ind_2fp", "تُفَاعِلْنَ"},
{"ind_2fs", "تُفَاعِلِينَ"},
{"ind_2mp", "تُفَاعِلُونَ"},
{"ind_2ms", "تُفَاعِلُ"},
{"ind_3fd", "تُفَاعِلَانِ"},
{"ind_3fp", "يُفَاعِلْنَ"},
{"ind_3fs", "تُفَاعِلُ"},
{"ind_3md", "يُفَاعِلَانِ"},
{"ind_3mp", "يُفَاعِلُونَ"},
{"ind_3ms", "يُفَاعِلُ"},
{"ind_pass_1p", "نُفَاعَلُ"},
{"ind_pass_1s", "أُفَاعَلُ"},
{"ind_pass_2d", "تُفَاعَلَانِ"},
{"ind_pass_2fp", "تُفَاعَلْنَ"},
{"ind_pass_2fs", "تُفَاعَلِينَ"},
{"ind_pass_2mp", "تُفَاعَلُونَ"},
{"ind_pass_2ms", "تُفَاعَلُ"},
{"ind_pass_3fd", "تُفَاعَلَانِ"},
{"ind_pass_3fp", "يُفَاعَلْنَ"},
{"ind_pass_3fs", "تُفَاعَلُ"},
{"ind_pass_3md", "يُفَاعَلَانِ"},
{"ind_pass_3mp", "يُفَاعَلُونَ"},
{"ind_pass_3ms", "يُفَاعَلُ"},
{"past_1p", "فَاعَلْنَا"},
{"past_1s", "فَاعَلْتُ"},
{"past_2d", "فَاعَلْتُمَا"},
{"past_2fp", "فَاعَلْتُنَّ"},
{"past_2fs", "فَاعَلْتِ"},
{"past_2mp", "فَاعَلْتُمْ"},
{"past_2ms", "فَاعَلْتَ"},
{"past_3fd", "فَاعَلَتَا"},
{"past_3fp", "فَاعَلْنَ"},
{"past_3fs", "فَاعَلَتْ"},
{"past_3md", "فَاعَلَا"},
{"past_3mp", "فَاعَلُوا"},
{"past_3ms", "فَاعَلَ"},
{"past_pass_1p", "فُوعِلْنَا"},
{"past_pass_1s", "فُوعِلْتُ"},
{"past_pass_2d", "فُوعِلْتُمَا"},
{"past_pass_2fp", "فُوعِلْتُنَّ"},
{"past_pass_2fs", "فُوعِلْتِ"},
{"past_pass_2mp", "فُوعِلْتُمْ"},
{"past_pass_2ms", "فُوعِلْتَ"},
{"past_pass_3fd", "فُوعِلَتَا"},
{"past_pass_3fp", "فُوعِلْنَ"},
{"past_pass_3fs", "فُوعِلَتْ"},
{"past_pass_3md", "فُوعِلَا"},
{"past_pass_3mp", "فُوعِلُوا"},
{"past_pass_3ms", "فُوعِلَ"},
},
},
{
label = "بَقِيَ ـَ (p.225، ناقص يائي)", root = "بقي", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِبْقَيَا"},
{"imp_2fp", "اِبْقَيْنَ"},
{"imp_2fs", "اِبْقَيْ"},
{"imp_2mp", "اِبْقَوْا"},
{"imp_2ms", "اِبْقَ"},
{"ind_1p", "نَبْقَى"},
{"ind_1s", "أَبْقَى"},
{"ind_2d", "تَبْقَيَانِ"},
{"ind_2fp", "تَبْقَيْنَ"},
{"ind_2fs", "تَبْقَيْنَ"},
{"ind_2mp", "تَبْقَوْنَ"},
{"ind_2ms", "تَبْقَى"},
{"ind_3fd", "تَبْقَيَانِ"},
{"ind_3fp", "يَبْقَيْنَ"},
{"ind_3fs", "تَبْقَى"},
{"ind_3md", "يَبْقَيَانِ"},
{"ind_3mp", "يَبْقَوْنَ"},
{"ind_3ms", "يَبْقَى"},
{"past_1p", "بَقِينَا"},
{"past_1s", "بَقِيتُ"},
{"past_2d", "بَقِيتُمَا"},
{"past_2fp", "بَقِيتُنَّ"},
{"past_2fs", "بَقِيتِ"},
{"past_2mp", "بَقِيتُمْ"},
{"past_2ms", "بَقِيتَ"},
{"past_3fd", "بَقِيَتَا"},
{"past_3fp", "بَقِينَ"},
{"past_3fs", "بَقِيَتْ"},
{"past_3md", "بَقِيَا"},
{"past_3mp", "بَقُوا"},
{"past_3ms", "بَقِيَ"},
},
},
{
label = "اِنْوَرَبَ (p.325، انفعل معتل الفاء)", root = "ورب", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْوَرِبَا"},
{"imp_2fp", "اِنْوَرِبْنَ"},
{"imp_2fs", "اِنْوَرِبِي"},
{"imp_2mp", "اِنْوَرِبُوا"},
{"imp_2ms", "اِنْوَرِبْ"},
{"ind_1p", "نَنْوَرِبُ"},
{"ind_1s", "أَنْوَرِبُ"},
{"ind_2d", "تَنْوَرِبَانِ"},
{"ind_2fp", "تَنْوَرِبْنَ"},
{"ind_2fs", "تَنْوَرِبِينَ"},
{"ind_2mp", "تَنْوَرِبُونَ"},
{"ind_2ms", "تَنْوَرِبُ"},
{"ind_3fd", "تَنْوَرِبَانِ"},
{"ind_3fp", "يَنْوَرِبْنَ"},
{"ind_3fs", "تَنْوَرِبُ"},
{"ind_3md", "يَنْوَرِبَانِ"},
{"ind_3mp", "يَنْوَرِبُونَ"},
{"ind_3ms", "يَنْوَرِبُ"},
{"past_1p", "اِنْوَرَبْنَا"},
{"past_1s", "اِنْوَرَبْتُ"},
{"past_2d", "اِنْوَرَبْتُمَا"},
{"past_2fp", "اِنْوَرَبْتُنَّ"},
{"past_2fs", "اِنْوَرَبْتِ"},
{"past_2mp", "اِنْوَرَبْتُمْ"},
{"past_2ms", "اِنْوَرَبْتَ"},
{"past_3fd", "اِنْوَرَبَتَا"},
{"past_3fp", "اِنْوَرَبْنَ"},
{"past_3fs", "اِنْوَرَبَتْ"},
{"past_3md", "اِنْوَرَبَا"},
{"past_3mp", "اِنْوَرَبُوا"},
{"past_3ms", "اِنْوَرَبَ"},
},
},
{
label = "مَدَّ ـُ (p.129، مضاعف)", root = "مدد", wazn = "فعَل يفعُل",
pass = true,
forms = {
{"imp_2d", "مُدَّا"},
{"imp_2fp", "اُمْدُدْنَ"},
{"imp_2fs", "مُدِّي"},
{"imp_2mp", "مُدُّوا"},
{"imp_2ms", "مُدَّ"},
{"ind_1p", "نَمُدُّ"},
{"ind_1s", "أَمُدُّ"},
{"ind_2d", "تَمُدَّانِ"},
{"ind_2fp", "تَمْدُدْنَ"},
{"ind_2fs", "تَمُدِّينَ"},
{"ind_2mp", "تَمُدُّونَ"},
{"ind_2ms", "تَمُدُّ"},
{"ind_3fd", "تَمُدَّانِ"},
{"ind_3fp", "يَمْدُدْنَ"},
{"ind_3fs", "تَمُدُّ"},
{"ind_3md", "يَمُدَّانِ"},
{"ind_3mp", "يَمُدُّونَ"},
{"ind_3ms", "يَمُدُّ"},
{"ind_pass_1p", "نُمَدُّ"},
{"ind_pass_1s", "أُمَدُّ"},
{"ind_pass_2d", "تُمَدَّانِ"},
{"ind_pass_2fp", "تُمْدَدْنَ"},
{"ind_pass_2fs", "تُمَدِّينَ"},
{"ind_pass_2mp", "تُمَدُّونَ"},
{"ind_pass_2ms", "تُمَدُّ"},
{"ind_pass_3fd", "تُمَدَّانِ"},
{"ind_pass_3fp", "يُمْدَدْنَ"},
{"ind_pass_3fs", "تُمَدُّ"},
{"ind_pass_3md", "يُمَدَّانِ"},
{"ind_pass_3mp", "يُمَدُّونَ"},
{"ind_pass_3ms", "يُمَدُّ"},
{"past_1p", "مَدَدْنَا"},
{"past_1s", "مَدَدْتُ"},
{"past_2d", "مَدَدْتُمَا"},
{"past_2fp", "مَدَدْتُنَّ"},
{"past_2fs", "مَدَدْتِ"},
{"past_2mp", "مَدَدْتُمْ"},
{"past_2ms", "مَدَدْتَ"},
{"past_3fd", "مَدَّتَا"},
{"past_3fp", "مَدَدْنَ"},
{"past_3fs", "مَدَّتْ"},
{"past_3md", "مَدَّا"},
{"past_3mp", "مَدُّوا"},
{"past_3ms", "مَدَّ"},
{"past_pass_1p", "مُدِدْنَا"},
{"past_pass_1s", "مُدِدْتُ"},
{"past_pass_2d", "مُدِدْتُمَا"},
{"past_pass_2fp", "مُدِدْتُنَّ"},
{"past_pass_2fs", "مُدِدْتِ"},
{"past_pass_2mp", "مُدِدْتُمْ"},
{"past_pass_2ms", "مُدِدْتَ"},
{"past_pass_3fd", "مُدَّتَا"},
{"past_pass_3fp", "مُدِدْنَ"},
{"past_pass_3fs", "مُدَّتْ"},
{"past_pass_3md", "مُدَّا"},
{"past_pass_3mp", "مُدُّوا"},
{"past_pass_3ms", "مُدَّ"},
},
},
{
label = "أَكَلَ ـُ (p.133، مهموز الفاء)", root = "أكل", wazn = "فعَل يفعُل",
pass = true,
forms = {
{"imp_2d", "كُلَا"},
{"imp_2fp", "كُلْنَ"},
{"imp_2fs", "كُلِي"},
{"imp_2mp", "كُلُوا"},
{"imp_2ms", "كُلْ"},
{"ind_1p", "نَأْكُلُ"},
{"ind_1s", "آكُلُ"},
{"ind_2d", "تَأْكُلَانِ"},
{"ind_2fp", "تَأْكُلْنَ"},
{"ind_2fs", "تَأْكُلِينَ"},
{"ind_2mp", "تَأْكُلُونَ"},
{"ind_2ms", "تَأْكُلُ"},
{"ind_3fd", "تَأْكُلَانِ"},
{"ind_3fp", "يَأْكُلْنَ"},
{"ind_3fs", "تَأْكُلُ"},
{"ind_3md", "يَأْكُلَانِ"},
{"ind_3mp", "يَأْكُلُونَ"},
{"ind_3ms", "يَأْكُلُ"},
{"ind_pass_1p", "نُؤْكَلُ"},
{"ind_pass_1s", "أُوكَلُ"},
{"ind_pass_2d", "تُؤْكَلَانِ"},
{"ind_pass_2fp", "تُؤْكَلْنَ"},
{"ind_pass_2fs", "تُؤْكَلِينَ"},
{"ind_pass_2mp", "تُؤْكَلُونَ"},
{"ind_pass_2ms", "تُؤْكَلُ"},
{"ind_pass_3fd", "تُؤْكَلَانِ"},
{"ind_pass_3fp", "يُؤْكَلْنَ"},
{"ind_pass_3fs", "تُؤْكَلُ"},
{"ind_pass_3md", "يُؤْكَلَانِ"},
{"ind_pass_3mp", "يُؤْكَلُونَ"},
{"ind_pass_3ms", "يُؤْكَلُ"},
{"past_1p", "أَكَلْنَا"},
{"past_1s", "أَكَلْتُ"},
{"past_2d", "أَكَلْتُمَا"},
{"past_2fp", "أَكَلْتُنَّ"},
{"past_2fs", "أَكَلْتِ"},
{"past_2mp", "أَكَلْتُمْ"},
{"past_2ms", "أَكَلْتَ"},
{"past_3fd", "أَكَلَتَا"},
{"past_3fp", "أَكَلْنَ"},
{"past_3fs", "أَكَلَتْ"},
{"past_3md", "أَكَلَا"},
{"past_3mp", "أَكَلُوا"},
{"past_3ms", "أَكَلَ"},
{"past_pass_1p", "أُكِلْنَا"},
{"past_pass_1s", "أُكِلْتُ"},
{"past_pass_2d", "أُكِلْتُمَا"},
{"past_pass_2fp", "أُكِلْتُنَّ"},
{"past_pass_2fs", "أُكِلْتِ"},
{"past_pass_2mp", "أُكِلْتُمْ"},
{"past_pass_2ms", "أُكِلْتَ"},
{"past_pass_3fd", "أُكِلَتَا"},
{"past_pass_3fp", "أُكِلْنَ"},
{"past_pass_3fs", "أُكِلَتْ"},
{"past_pass_3md", "أُكِلَا"},
{"past_pass_3mp", "أُكِلُوا"},
{"past_pass_3ms", "أُكِلَ"},
},
},
{
label = "قالَ ـُ (p.138، أجوف واوي)", root = "قول", wazn = "فعَل يفعُل",
pass = true,
forms = {
{"imp_2d", "قُولَا"},
{"imp_2fp", "قُلْنَ"},
{"imp_2fs", "قُولِي"},
{"imp_2mp", "قُولُوا"},
{"imp_2ms", "قُلْ"},
{"ind_1p", "نَقُولُ"},
{"ind_1s", "أَقُولُ"},
{"ind_2d", "تَقُولَانِ"},
{"ind_2fp", "تَقُلْنَ"},
{"ind_2fs", "تَقُولِينَ"},
{"ind_2mp", "تَقُولُونَ"},
{"ind_2ms", "تَقُولُ"},
{"ind_3fd", "تَقُولَانِ"},
{"ind_3fp", "يَقُلْنَ"},
{"ind_3fs", "تَقُولُ"},
{"ind_3md", "يَقُولَانِ"},
{"ind_3mp", "يَقُولُونَ"},
{"ind_3ms", "يَقُولُ"},
{"ind_pass_1p", "نُقَالُ"},
{"ind_pass_1s", "أُقَالُ"},
{"ind_pass_2d", "تُقَالَانِ"},
{"ind_pass_2fp", "تُقَلْنَ"},
{"ind_pass_2fs", "تُقَالِينَ"},
{"ind_pass_2mp", "تُقَالُونَ"},
{"ind_pass_2ms", "تُقَالُ"},
{"ind_pass_3fd", "تُقَالَانِ"},
{"ind_pass_3fp", "يُقَلْنَ"},
{"ind_pass_3fs", "تُقَالُ"},
{"ind_pass_3md", "يُقَالَانِ"},
{"ind_pass_3mp", "يُقَالُونَ"},
{"ind_pass_3ms", "يُقَالُ"},
{"past_1p", "قُلْنَا"},
{"past_1s", "قُلْتُ"},
{"past_2d", "قُلْتُمَا"},
{"past_2fp", "قُلْتُنَّ"},
{"past_2fs", "قُلْتِ"},
{"past_2mp", "قُلْتُمْ"},
{"past_2ms", "قُلْتَ"},
{"past_3fd", "قَالَتَا"},
{"past_3fp", "قُلْنَ"},
{"past_3fs", "قَالَتْ"},
{"past_3md", "قَالَا"},
{"past_3mp", "قَالُوا"},
{"past_3ms", "قَالَ"},
{"past_pass_1p", "قِلْنَا"},
{"past_pass_1s", "قِلْتُ"},
{"past_pass_2d", "قِلْتُمَا"},
{"past_pass_2fp", "قِلْتُنَّ"},
{"past_pass_2fs", "قِلْتِ"},
{"past_pass_2mp", "قِلْتُمْ"},
{"past_pass_2ms", "قِلْتَ"},
{"past_pass_3fd", "قِيلَتَا"},
{"past_pass_3fp", "قِلْنَ"},
{"past_pass_3fs", "قِيلَتْ"},
{"past_pass_3md", "قِيلَا"},
{"past_pass_3mp", "قِيلُوا"},
{"past_pass_3ms", "قِيلَ"},
},
},
{
label = "ضَرَبَ ـِ (p.144، صحيح سالم)", root = "ضرب", wazn = "فعَل يفعِل",
pass = true,
forms = {
{"imp_2d", "اِضْرِبَا"},
{"imp_2fp", "اِضْرِبْنَ"},
{"imp_2fs", "اِضْرِبِي"},
{"imp_2mp", "اِضْرِبُوا"},
{"imp_2ms", "اِضْرِبْ"},
{"ind_1p", "نَضْرِبُ"},
{"ind_1s", "أَضْرِبُ"},
{"ind_2d", "تَضْرِبَانِ"},
{"ind_2fp", "تَضْرِبْنَ"},
{"ind_2fs", "تَضْرِبِينَ"},
{"ind_2mp", "تَضْرِبُونَ"},
{"ind_2ms", "تَضْرِبُ"},
{"ind_3fd", "تَضْرِبَانِ"},
{"ind_3fp", "يَضْرِبْنَ"},
{"ind_3fs", "تَضْرِبُ"},
{"ind_3md", "يَضْرِبَانِ"},
{"ind_3mp", "يَضْرِبُونَ"},
{"ind_3ms", "يَضْرِبُ"},
{"ind_pass_1p", "نُضْرَبُ"},
{"ind_pass_1s", "أُضْرَبُ"},
{"ind_pass_2d", "تُضْرَبَانِ"},
{"ind_pass_2fp", "تُضْرَبْنَ"},
{"ind_pass_2fs", "تُضْرَبِينَ"},
{"ind_pass_2mp", "تُضْرَبُونَ"},
{"ind_pass_2ms", "تُضْرَبُ"},
{"ind_pass_3fd", "تُضْرَبَانِ"},
{"ind_pass_3fp", "يُضْرَبْنَ"},
{"ind_pass_3fs", "تُضْرَبُ"},
{"ind_pass_3md", "يُضْرَبَانِ"},
{"ind_pass_3mp", "يُضْرَبُونَ"},
{"ind_pass_3ms", "يُضْرَبُ"},
{"past_1p", "ضَرَبْنَا"},
{"past_1s", "ضَرَبْتُ"},
{"past_2d", "ضَرَبْتُمَا"},
{"past_2fp", "ضَرَبْتُنَّ"},
{"past_2fs", "ضَرَبْتِ"},
{"past_2mp", "ضَرَبْتُمْ"},
{"past_2ms", "ضَرَبْتَ"},
{"past_3fd", "ضَرَبَتَا"},
{"past_3fp", "ضَرَبْنَ"},
{"past_3fs", "ضَرَبَتْ"},
{"past_3md", "ضَرَبَا"},
{"past_3mp", "ضَرَبُوا"},
{"past_3ms", "ضَرَبَ"},
{"past_pass_1p", "ضُرِبْنَا"},
{"past_pass_1s", "ضُرِبْتُ"},
{"past_pass_2d", "ضُرِبْتُمَا"},
{"past_pass_2fp", "ضُرِبْتُنَّ"},
{"past_pass_2fs", "ضُرِبْتِ"},
{"past_pass_2mp", "ضُرِبْتُمْ"},
{"past_pass_2ms", "ضُرِبْتَ"},
{"past_pass_3fd", "ضُرِبَتَا"},
{"past_pass_3fp", "ضُرِبْنَ"},
{"past_pass_3fs", "ضُرِبَتْ"},
{"past_pass_3md", "ضُرِبَا"},
{"past_pass_3mp", "ضُرِبُوا"},
{"past_pass_3ms", "ضُرِبَ"},
},
},
{
label = "رَأَسَ ـِ (p.153، مهموز العين)", root = "رأس", wazn = "فعَل يفعِل",
pass = true,
forms = {
{"imp_2d", "اِرْئِسَا"},
{"imp_2fp", "اِرْئِسْنَ"},
{"imp_2fs", "اِرْئِسِي"},
{"imp_2mp", "اِرْئِسُوا"},
{"imp_2ms", "اِرْئِسْ"},
{"ind_1p", "نَرْئِسُ"},
{"ind_1s", "أَرْئِسُ"},
{"ind_2d", "تَرْئِسَانِ"},
{"ind_2fp", "تَرْئِسْنَ"},
{"ind_2fs", "تَرْئِسِينَ"},
{"ind_2mp", "تَرْئِسُونَ"},
{"ind_2ms", "تَرْئِسُ"},
{"ind_3fd", "تَرْئِسَانِ"},
{"ind_3fp", "يَرْئِسْنَ"},
{"ind_3fs", "تَرْئِسُ"},
{"ind_3md", "يَرْئِسَانِ"},
{"ind_3mp", "يَرْئِسُونَ"},
{"ind_3ms", "يَرْئِسُ"},
{"ind_pass_1p", "نُرْأَسُ"},
{"ind_pass_1s", "أُرْأَسُ"},
{"ind_pass_2d", "تُرْأَسَانِ"},
{"ind_pass_2fp", "تُرْأَسْنَ"},
{"ind_pass_2fs", "تُرْأَسِينَ"},
{"ind_pass_2mp", "تُرْأَسُونَ"},
{"ind_pass_2ms", "تُرْأَسُ"},
{"ind_pass_3fd", "تُرْأَسَانِ"},
{"ind_pass_3fp", "يُرْأَسْنَ"},
{"ind_pass_3fs", "تُرْأَسُ"},
{"ind_pass_3md", "يُرْأَسَانِ"},
{"ind_pass_3mp", "يُرْأَسُونَ"},
{"ind_pass_3ms", "يُرْأَسُ"},
{"past_1p", "رَأَسْنَا"},
{"past_1s", "رَأَسْتُ"},
{"past_2d", "رَأَسْتُمَا"},
{"past_2fp", "رَأَسْتُنَّ"},
{"past_2fs", "رَأَسْتِ"},
{"past_2mp", "رَأَسْتُمْ"},
{"past_2ms", "رَأَسْتَ"},
{"past_3fd", "رَأَسَتَا"},
{"past_3fp", "رَأَسْنَ"},
{"past_3fs", "رَأَسَتْ"},
{"past_3md", "رَأَسَا"},
{"past_3mp", "رَأَسُوا"},
{"past_3ms", "رَأَسَ"},
{"past_pass_1p", "رُئِسْنَا"},
{"past_pass_1s", "رُئِسْتُ"},
{"past_pass_2d", "رُئِسْتُمَا"},
{"past_pass_2fp", "رُئِسْتُنَّ"},
{"past_pass_2fs", "رُئِسْتِ"},
{"past_pass_2mp", "رُئِسْتُمْ"},
{"past_pass_2ms", "رُئِسْتَ"},
{"past_pass_3fd", "رُئِسَتَا"},
{"past_pass_3fp", "رُئِسْنَ"},
{"past_pass_3fs", "رُئِسَتْ"},
{"past_pass_3md", "رُئِسَا"},
{"past_pass_3mp", "رُئِسُوا"},
{"past_pass_3ms", "رُئِسَ"},
},
},
}
paq06sf7qnihieazw9zxu0k4blya9wj
1159138
1159059
2026-09-11T08:33:46Z
ForzaGreen
28665
corpus 462 paradigms / 15549 cells: خلايا اِظَّنَّ، وإدغام عَيَّ في وحدة ar-verb
1159138
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 1 من 16.
return {
{
label = "فَعَلَ ـُ (p.125, abstract paradigm)", root = "فعل", wazn = "فعَل يفعُل",
pass = true,
forms = {
{"imp_2d", "اُفْعُلَا"},
{"imp_2fp", "اُفْعُلْنَ"},
{"imp_2fs", "اُفْعُلِي"},
{"imp_2mp", "اُفْعُلُوا"},
{"imp_2ms", "اُفْعُلْ"},
{"ind_1p", "نَفْعُلُ"},
{"ind_1s", "أَفْعُلُ"},
{"ind_2d", "تَفْعُلَانِ"},
{"ind_2fp", "تَفْعُلْنَ"},
{"ind_2fs", "تَفْعُلِينَ"},
{"ind_2mp", "تَفْعُلُونَ"},
{"ind_2ms", "تَفْعُلُ"},
{"ind_3fd", "تَفْعُلَانِ"},
{"ind_3fp", "يَفْعُلْنَ"},
{"ind_3fs", "تَفْعُلُ"},
{"ind_3md", "يَفْعُلَانِ"},
{"ind_3mp", "يَفْعُلُونَ"},
{"ind_3ms", "يَفْعُلُ"},
{"ind_pass_1p", "نُفْعَلُ"},
{"ind_pass_1s", "أُفْعَلُ"},
{"ind_pass_2d", "تُفْعَلَانِ"},
{"ind_pass_2fp", "تُفْعَلْنَ"},
{"ind_pass_2fs", "تُفْعَلِينَ"},
{"ind_pass_2mp", "تُفْعَلُونَ"},
{"ind_pass_2ms", "تُفْعَلُ"},
{"ind_pass_3fd", "تُفْعَلَانِ"},
{"ind_pass_3fp", "يُفْعَلْنَ"},
{"ind_pass_3fs", "تُفْعَلُ"},
{"ind_pass_3md", "يُفْعَلَانِ"},
{"ind_pass_3mp", "يُفْعَلُونَ"},
{"ind_pass_3ms", "يُفْعَلُ"},
{"past_1p", "فَعَلْنَا"},
{"past_1s", "فَعَلْتُ"},
{"past_2d", "فَعَلْتُمَا"},
{"past_2fp", "فَعَلْتُنَّ"},
{"past_2fs", "فَعَلْتِ"},
{"past_2mp", "فَعَلْتُمْ"},
{"past_2ms", "فَعَلْتَ"},
{"past_3fd", "فَعَلَتَا"},
{"past_3fp", "فَعَلْنَ"},
{"past_3fs", "فَعَلَتْ"},
{"past_3md", "فَعَلَا"},
{"past_3mp", "فَعَلُوا"},
{"past_3ms", "فَعَلَ"},
{"past_pass_1p", "فُعِلْنَا"},
{"past_pass_1s", "فُعِلْتُ"},
{"past_pass_2d", "فُعِلْتُمَا"},
{"past_pass_2fp", "فُعِلْتُنَّ"},
{"past_pass_2fs", "فُعِلْتِ"},
{"past_pass_2mp", "فُعِلْتُمْ"},
{"past_pass_2ms", "فُعِلْتَ"},
{"past_pass_3fd", "فُعِلَتَا"},
{"past_pass_3fp", "فُعِلْنَ"},
{"past_pass_3fs", "فُعِلَتْ"},
{"past_pass_3md", "فُعِلَا"},
{"past_pass_3mp", "فُعِلُوا"},
{"past_pass_3ms", "فُعِلَ"},
},
},
{
label = "رَؤُفَ (p.198)", root = "رأف", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُرْؤُفَا"},
{"imp_2fp", "اُرْؤُفْنَ"},
{"imp_2fs", "اُرْؤُفِي"},
{"imp_2mp", "اُرْؤُفُوا"},
{"imp_2ms", "اُرْؤُفْ"},
{"ind_1p", "نَرْؤُفُ"},
{"ind_1s", "أَرْؤُفُ"},
{"ind_2d", "تَرْؤُفَانِ"},
{"ind_2fp", "تَرْؤُفْنَ"},
{"ind_2fs", "تَرْؤُفِينَ"},
{"ind_2mp", "تَرْؤُفُونَ"},
{"ind_2ms", "تَرْؤُفُ"},
{"ind_3fd", "تَرْؤُفَانِ"},
{"ind_3fp", "يَرْؤُفْنَ"},
{"ind_3fs", "تَرْؤُفُ"},
{"ind_3md", "يَرْؤُفَانِ"},
{"ind_3mp", "يَرْؤُفُونَ"},
{"ind_3ms", "يَرْؤُفُ"},
{"past_1p", "رَؤُفْنَا"},
{"past_1s", "رَؤُفْتُ"},
{"past_2d", "رَؤُفْتُمَا"},
{"past_2fp", "رَؤُفْتُنَّ"},
{"past_2fs", "رَؤُفْتِ"},
{"past_2mp", "رَؤُفْتُمْ"},
{"past_2ms", "رَؤُفْتَ"},
{"past_3fd", "رَؤُفَتَا"},
{"past_3fp", "رَؤُفْنَ"},
{"past_3fs", "رَؤُفَتْ"},
{"past_3md", "رَؤُفَا"},
{"past_3mp", "رَؤُفُوا"},
{"past_3ms", "رَؤُفَ"},
},
},
{
label = "ضَؤُلَ (p.198)", root = "ضأل", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُضْؤُلَا"},
{"imp_2fp", "اُضْؤُلْنَ"},
{"imp_2fs", "اُضْؤُلِي"},
{"imp_2mp", "اُضْؤُلُوا"},
{"imp_2ms", "اُضْؤُلْ"},
{"ind_1p", "نَضْؤُلُ"},
{"ind_1s", "أَضْؤُلُ"},
{"ind_2d", "تَضْؤُلَانِ"},
{"ind_2fp", "تَضْؤُلْنَ"},
{"ind_2fs", "تَضْؤُلِينَ"},
{"ind_2mp", "تَضْؤُلُونَ"},
{"ind_2ms", "تَضْؤُلُ"},
{"ind_3fd", "تَضْؤُلَانِ"},
{"ind_3fp", "يَضْؤُلْنَ"},
{"ind_3fs", "تَضْؤُلُ"},
{"ind_3md", "يَضْؤُلَانِ"},
{"ind_3mp", "يَضْؤُلُونَ"},
{"ind_3ms", "يَضْؤُلُ"},
{"past_1p", "ضَؤُلْنَا"},
{"past_1s", "ضَؤُلْتُ"},
{"past_2d", "ضَؤُلْتُمَا"},
{"past_2fp", "ضَؤُلْتُنَّ"},
{"past_2fs", "ضَؤُلْتِ"},
{"past_2mp", "ضَؤُلْتُمْ"},
{"past_2ms", "ضَؤُلْتَ"},
{"past_3fd", "ضَؤُلَتَا"},
{"past_3fp", "ضَؤُلْنَ"},
{"past_3fs", "ضَؤُلَتْ"},
{"past_3md", "ضَؤُلَا"},
{"past_3mp", "ضَؤُلُوا"},
{"past_3ms", "ضَؤُلَ"},
},
},
{
label = "آخَذَ (p.260)", root = "أخذ", wazn = "فاعل",
forms = {
{"imp_2d", "آخِذَا"},
{"imp_2fp", "آخِذْنَ"},
{"imp_2fs", "آخِذِي"},
{"imp_2mp", "آخِذُوا"},
{"imp_2ms", "آخِذْ"},
{"ind_1p", "نُؤَاخِذُ"},
{"ind_1s", "أُؤَاخِذُ"},
{"ind_2d", "تُؤَاخِذَانِ"},
{"ind_2fp", "تُؤَاخِذْنَ"},
{"ind_2fs", "تُؤَاخِذِينَ"},
{"ind_2mp", "تُؤَاخِذُونَ"},
{"ind_2ms", "تُؤَاخِذُ"},
{"ind_3fd", "تُؤَاخِذَانِ"},
{"ind_3fp", "يُؤَاخِذْنَ"},
{"ind_3fs", "تُؤَاخِذُ"},
{"ind_3md", "يُؤَاخِذَانِ"},
{"ind_3mp", "يُؤَاخِذُونَ"},
{"ind_3ms", "يُؤَاخِذُ"},
{"past_1p", "آخَذْنَا"},
{"past_1s", "آخَذْتُ"},
{"past_2d", "آخَذْتُمَا"},
{"past_2fp", "آخَذْتُنَّ"},
{"past_2fs", "آخَذْتِ"},
{"past_2mp", "آخَذْتُمْ"},
{"past_2ms", "آخَذْتَ"},
{"past_3fd", "آخَذَتَا"},
{"past_3fp", "آخَذْنَ"},
{"past_3fs", "آخَذَتْ"},
{"past_3md", "آخَذَا"},
{"past_3mp", "آخَذُوا"},
{"past_3ms", "آخَذَ"},
},
},
{
label = "اِدَّعَمَ (p.334)", root = "دعم", wazn = "افتعل",
forms = {
{"imp_2d", "اِدَّعِمَا"},
{"imp_2fp", "اِدَّعِمْنَ"},
{"imp_2fs", "اِدَّعِمِي"},
{"imp_2mp", "اِدَّعِمُوا"},
{"imp_2ms", "اِدَّعِمْ"},
{"ind_1p", "نَدَّعِمُ"},
{"ind_1s", "أَدَّعِمُ"},
{"ind_2d", "تَدَّعِمَانِ"},
{"ind_2fp", "تَدَّعِمْنَ"},
{"ind_2fs", "تَدَّعِمِينَ"},
{"ind_2mp", "تَدَّعِمُونَ"},
{"ind_2ms", "تَدَّعِمُ"},
{"ind_3fd", "تَدَّعِمَانِ"},
{"ind_3fp", "يَدَّعِمْنَ"},
{"ind_3fs", "تَدَّعِمُ"},
{"ind_3md", "يَدَّعِمَانِ"},
{"ind_3mp", "يَدَّعِمُونَ"},
{"ind_3ms", "يَدَّعِمُ"},
{"past_1p", "اِدَّعَمْنَا"},
{"past_1s", "اِدَّعَمْتُ"},
{"past_2d", "اِدَّعَمْتُمَا"},
{"past_2fp", "اِدَّعَمْتُنَّ"},
{"past_2fs", "اِدَّعَمْتِ"},
{"past_2mp", "اِدَّعَمْتُمْ"},
{"past_2ms", "اِدَّعَمْتَ"},
{"past_3fd", "اِدَّعَمَتَا"},
{"past_3fp", "اِدَّعَمْنَ"},
{"past_3fs", "اِدَّعَمَتْ"},
{"past_3md", "اِدَّعَمَا"},
{"past_3mp", "اِدَّعَمُوا"},
{"past_3ms", "اِدَّعَمَ"},
},
},
{
label = "هَنَأَ ـُ (p.135، مهموز اللام)", root = "هنأ", wazn = "فعَل يفعُل",
pass = true,
forms = {
{"imp_2d", "اُهْنُؤَا"},
{"imp_2fp", "اُهْنُؤْنَ"},
{"imp_2fs", "اُهْنُئِي"},
{"imp_2mp", "اُهْنُؤُوا"},
{"imp_2ms", "اُهْنُؤْ"},
{"ind_1p", "نَهْنُؤُ"},
{"ind_1s", "أَهْنُؤُ"},
{"ind_2d", "تَهْنُؤَانِ"},
{"ind_2fp", "تَهْنُؤْنَ"},
{"ind_2fs", "تَهْنُئِينَ"},
{"ind_2mp", "تَهْنُؤُونَ"},
{"ind_2ms", "تَهْنُؤُ"},
{"ind_3fd", "تَهْنُؤَانِ"},
{"ind_3fp", "يَهْنُؤْنَ"},
{"ind_3fs", "تَهْنُؤُ"},
{"ind_3md", "يَهْنُؤَانِ"},
{"ind_3mp", "يَهْنُؤُونَ"},
{"ind_3ms", "يَهْنُؤُ"},
{"ind_pass_1p", "نُهْنَأُ"},
{"ind_pass_1s", "أُهْنَأُ"},
{"ind_pass_2d", "تُهْنَآنِ"},
{"ind_pass_2fp", "تُهْنَأْنَ"},
{"ind_pass_2fs", "تُهْنَئِينَ"},
{"ind_pass_2mp", "تُهْنَؤُونَ"},
{"ind_pass_2ms", "تُهْنَأُ"},
{"ind_pass_3fd", "تُهْنَآنِ"},
{"ind_pass_3fp", "يُهْنَأْنَ"},
{"ind_pass_3fs", "تُهْنَأُ"},
{"ind_pass_3md", "يُهْنَآنِ"},
{"ind_pass_3mp", "يُهْنَؤُونَ"},
{"ind_pass_3ms", "يُهْنَأُ"},
{"past_1p", "هَنَأْنَا"},
{"past_1s", "هَنَأْتُ"},
{"past_2d", "هَنَأْتُمَا"},
{"past_2fp", "هَنَأْتُنَّ"},
{"past_2fs", "هَنَأْتِ"},
{"past_2mp", "هَنَأْتُمْ"},
{"past_2ms", "هَنَأْتَ"},
{"past_3fd", "هَنَأَتَا"},
{"past_3fp", "هَنَأْنَ"},
{"past_3fs", "هَنَأَتْ"},
{"past_3md", "هَنَآ"},
{"past_3mp", "هَنَؤُوا"},
{"past_3ms", "هَنَأَ"},
{"past_pass_1p", "هُنِئْنَا"},
{"past_pass_1s", "هُنِئْتُ"},
{"past_pass_2d", "هُنِئْتُمَا"},
{"past_pass_2fp", "هُنِئْتُنَّ"},
{"past_pass_2fs", "هُنِئْتِ"},
{"past_pass_2mp", "هُنِئْتُمْ"},
{"past_pass_2ms", "هُنِئْتَ"},
{"past_pass_3fd", "هُنِئَتَا"},
{"past_pass_3fp", "هُنِئْنَ"},
{"past_pass_3fs", "هُنِئَتْ"},
{"past_pass_3md", "هُنِئَا"},
{"past_pass_3mp", "هُنِئُوا"},
{"past_pass_3ms", "هُنِئَ"},
},
},
{
label = "دَعا ـُ (p.141، ناقص واوي)", root = "دعو", wazn = "فعَل يفعُل",
pass = true,
forms = {
{"imp_2d", "اُدْعُوَا"},
{"imp_2fp", "اُدْعُونَ"},
{"imp_2fs", "اُدْعِي"},
{"imp_2mp", "اُدْعُوا"},
{"imp_2ms", "اُدْعُ"},
{"ind_1p", "نَدْعُو"},
{"ind_1s", "أَدْعُو"},
{"ind_2d", "تَدْعُوَانِ"},
{"ind_2fp", "تَدْعُونَ"},
{"ind_2fs", "تَدْعِينَ"},
{"ind_2mp", "تَدْعُونَ"},
{"ind_2ms", "تَدْعُو"},
{"ind_3fd", "تَدْعُوَانِ"},
{"ind_3fp", "يَدْعُونَ"},
{"ind_3fs", "تَدْعُو"},
{"ind_3md", "يَدْعُوَانِ"},
{"ind_3mp", "يَدْعُونَ"},
{"ind_3ms", "يَدْعُو"},
{"ind_pass_1p", "نُدْعَى"},
{"ind_pass_1s", "أُدْعَى"},
{"ind_pass_2d", "تُدْعَيَانِ"},
{"ind_pass_2fp", "تُدْعَيْنَ"},
{"ind_pass_2fs", "تُدْعَيْنَ"},
{"ind_pass_2mp", "تُدْعَوْنَ"},
{"ind_pass_2ms", "تُدْعَى"},
{"ind_pass_3fd", "تُدْعَيَانِ"},
{"ind_pass_3fp", "يُدْعَيْنَ"},
{"ind_pass_3fs", "تُدْعَى"},
{"ind_pass_3md", "يُدْعَيَانِ"},
{"ind_pass_3mp", "يُدْعَوْنَ"},
{"ind_pass_3ms", "يُدْعَى"},
{"past_1p", "دَعَوْنَا"},
{"past_1s", "دَعَوْتُ"},
{"past_2d", "دَعَوْتُمَا"},
{"past_2fp", "دَعَوْتُنَّ"},
{"past_2fs", "دَعَوْتِ"},
{"past_2mp", "دَعَوْتُمْ"},
{"past_2ms", "دَعَوْتَ"},
{"past_3fd", "دَعَتَا"},
{"past_3fp", "دَعَوْنَ"},
{"past_3fs", "دَعَتْ"},
{"past_3md", "دَعَوَا"},
{"past_3mp", "دَعَوْا"},
{"past_3ms", "دَعَا"},
{"past_pass_1p", "دُعِينَا"},
{"past_pass_1s", "دُعِيتُ"},
{"past_pass_2d", "دُعِيتُمَا"},
{"past_pass_2fp", "دُعِيتُنَّ"},
{"past_pass_2fs", "دُعِيتِ"},
{"past_pass_2mp", "دُعِيتُمْ"},
{"past_pass_2ms", "دُعِيتَ"},
{"past_pass_3fd", "دُعِيَتَا"},
{"past_pass_3fp", "دُعِينَ"},
{"past_pass_3fs", "دُعِيَتْ"},
{"past_pass_3md", "دُعِيَا"},
{"past_pass_3mp", "دُعُوا"},
{"past_pass_3ms", "دُعِيَ"},
},
},
{
label = "هَيُؤَ ـُ (p.203، أجوف على فعُل)", root = "هيأ", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُهْيُؤَا"},
{"imp_2fp", "اُهْيُؤْنَ"},
{"imp_2fs", "اُهْيُئِي"},
{"imp_2mp", "اُهْيُؤُوا"},
{"imp_2ms", "اُهْيُؤْ"},
{"ind_1p", "نَهْيُؤُ"},
{"ind_1s", "أَهْيُؤُ"},
{"ind_2d", "تَهْيُؤَانِ"},
{"ind_2fp", "تَهْيُؤْنَ"},
{"ind_2fs", "تَهْيُئِينَ"},
{"ind_2mp", "تَهْيُؤُونَ"},
{"ind_2ms", "تَهْيُؤُ"},
{"ind_3fd", "تَهْيُؤَانِ"},
{"ind_3fp", "يَهْيُؤْنَ"},
{"ind_3fs", "تَهْيُؤُ"},
{"ind_3md", "يَهْيُؤَانِ"},
{"ind_3mp", "يَهْيُؤُونَ"},
{"ind_3ms", "يَهْيُؤُ"},
{"past_1p", "هَيُؤْنَا"},
{"past_1s", "هَيُؤْتُ"},
{"past_2d", "هَيُؤْتُمَا"},
{"past_2fp", "هَيُؤْتُنَّ"},
{"past_2fs", "هَيُؤْتِ"},
{"past_2mp", "هَيُؤْتُمْ"},
{"past_2ms", "هَيُؤْتَ"},
{"past_3fd", "هَيُؤَتَا"},
{"past_3fp", "هَيُؤْنَ"},
{"past_3fs", "هَيُؤَتْ"},
{"past_3md", "هَيُؤَا"},
{"past_3mp", "هَيُؤُوا"},
{"past_3ms", "هَيُؤَ"},
},
},
{
label = "وَفَى ـِ (p.164، لفيف مفروق)", root = "وفي", wazn = "فعَل يفعِل",
pass = true,
forms = {
{"imp_2d", "فِيَا"},
{"imp_2fp", "فِينَ"},
{"imp_2fs", "فِي"},
{"imp_2mp", "فُوا"},
{"imp_2ms", "فِ"},
{"ind_1p", "نَفِي"},
{"ind_1s", "أَفِي"},
{"ind_2d", "تَفِيَانِ"},
{"ind_2fp", "تَفِينَ"},
{"ind_2fs", "تَفِينَ"},
{"ind_2mp", "تَفُونَ"},
{"ind_2ms", "تَفِي"},
{"ind_3fd", "تَفِيَانِ"},
{"ind_3fp", "يَفِينَ"},
{"ind_3fs", "تَفِي"},
{"ind_3md", "يَفِيَانِ"},
{"ind_3mp", "يَفُونَ"},
{"ind_3ms", "يَفِي"},
{"ind_pass_1p", "نُوفَى"},
{"ind_pass_1s", "أُوفَى"},
{"ind_pass_2d", "تُوفَيَانِ"},
{"ind_pass_2fp", "تُوفَيْنَ"},
{"ind_pass_2fs", "تُوفَيْنَ"},
{"ind_pass_2mp", "تُوفَوْنَ"},
{"ind_pass_2ms", "تُوفَى"},
{"ind_pass_3fd", "تُوفَيَانِ"},
{"ind_pass_3fp", "يُوفَيْنَ"},
{"ind_pass_3fs", "تُوفَى"},
{"ind_pass_3md", "يُوفَيَانِ"},
{"ind_pass_3mp", "يُوفَوْنَ"},
{"ind_pass_3ms", "يُوفَى"},
{"past_1p", "وَفَيْنَا"},
{"past_1s", "وَفَيْتُ"},
{"past_2d", "وَفَيْتُمَا"},
{"past_2fp", "وَفَيْتُنَّ"},
{"past_2fs", "وَفَيْتِ"},
{"past_2mp", "وَفَيْتُمْ"},
{"past_2ms", "وَفَيْتَ"},
{"past_3fd", "وَفَتَا"},
{"past_3fp", "وَفَيْنَ"},
{"past_3fs", "وَفَتْ"},
{"past_3md", "وَفَيَا"},
{"past_3mp", "وَفَوْا"},
{"past_3ms", "وَفَى"},
{"past_pass_1p", "وُفِينَا"},
{"past_pass_1s", "وُفِيتُ"},
{"past_pass_2d", "وُفِيتُمَا"},
{"past_pass_2fp", "وُفِيتُنَّ"},
{"past_pass_2fs", "وُفِيتِ"},
{"past_pass_2mp", "وُفِيتُمْ"},
{"past_pass_2ms", "وُفِيتَ"},
{"past_pass_3fd", "وُفِيَتَا"},
{"past_pass_3fp", "وُفِينَ"},
{"past_pass_3fs", "وُفِيَتْ"},
{"past_pass_3md", "وُفِيَا"},
{"past_pass_3mp", "وُفُوا"},
{"past_pass_3ms", "وُفِيَ"},
},
},
{
label = "وَلِيَ ـِ (p.238، لفيف مفروق)", root = "ولي", wazn = "فعِل يفعِل",
pass = true,
forms = {
{"imp_2d", "لِيَا"},
{"imp_2fp", "لِينَ"},
{"imp_2fs", "لِي"},
{"imp_2mp", "لُوا"},
{"imp_2ms", "لِ"},
{"ind_1p", "نَلِي"},
{"ind_1s", "أَلِي"},
{"ind_2d", "تَلِيَانِ"},
{"ind_2fp", "تَلِينَ"},
{"ind_2fs", "تَلِينَ"},
{"ind_2mp", "تَلُونَ"},
{"ind_2ms", "تَلِي"},
{"ind_3fd", "تَلِيَانِ"},
{"ind_3fp", "يَلِينَ"},
{"ind_3fs", "تَلِي"},
{"ind_3md", "يَلِيَانِ"},
{"ind_3mp", "يَلُونَ"},
{"ind_3ms", "يَلِي"},
{"ind_pass_1p", "نُولَى"},
{"ind_pass_1s", "أُولَى"},
{"ind_pass_2d", "تُولَيَانِ"},
{"ind_pass_2fp", "تُولَيْنَ"},
{"ind_pass_2fs", "تُولَيْنَ"},
{"ind_pass_2mp", "تُولَوْنَ"},
{"ind_pass_2ms", "تُولَى"},
{"ind_pass_3fd", "تُولَيَانِ"},
{"ind_pass_3fp", "يُولَيْنَ"},
{"ind_pass_3fs", "تُولَى"},
{"ind_pass_3md", "يُولَيَانِ"},
{"ind_pass_3mp", "يُولَوْنَ"},
{"ind_pass_3ms", "يُولَى"},
{"past_1p", "وَلِينَا"},
{"past_1s", "وَلِيتُ"},
{"past_2d", "وَلِيتُمَا"},
{"past_2fp", "وَلِيتُنَّ"},
{"past_2fs", "وَلِيتِ"},
{"past_2mp", "وَلِيتُمْ"},
{"past_2ms", "وَلِيتَ"},
{"past_3fd", "وَلِيَتَا"},
{"past_3fp", "وَلِينَ"},
{"past_3fs", "وَلِيَتْ"},
{"past_3md", "وَلِيَا"},
{"past_3mp", "وَلُوا"},
{"past_3ms", "وَلِيَ"},
{"past_pass_1p", "وُلِينَا"},
{"past_pass_1s", "وُلِيتُ"},
{"past_pass_2d", "وُلِيتُمَا"},
{"past_pass_2fp", "وُلِيتُنَّ"},
{"past_pass_2fs", "وُلِيتِ"},
{"past_pass_2mp", "وُلِيتُمْ"},
{"past_pass_2ms", "وُلِيتَ"},
{"past_pass_3fd", "وُلِيَتَا"},
{"past_pass_3fp", "وُلِينَ"},
{"past_pass_3fs", "وُلِيَتْ"},
{"past_pass_3md", "وُلِيَا"},
{"past_pass_3mp", "وُلُوا"},
{"past_pass_3ms", "وُلِيَ"},
},
},
{
label = "تَفاعَلَ (p.302، الوزن السادس)", root = "فعل", wazn = "تفاعل",
pass = true,
forms = {
{"imp_2d", "تَفَاعَلَا"},
{"imp_2fp", "تَفَاعَلْنَ"},
{"imp_2fs", "تَفَاعَلِي"},
{"imp_2mp", "تَفَاعَلُوا"},
{"imp_2ms", "تَفَاعَلْ"},
{"ind_1p", "نَتَفَاعَلُ"},
{"ind_1s", "أَتَفَاعَلُ"},
{"ind_2d", "تَتَفَاعَلَانِ"},
{"ind_2fp", "تَتَفَاعَلْنَ"},
{"ind_2fs", "تَتَفَاعَلِينَ"},
{"ind_2mp", "تَتَفَاعَلُونَ"},
{"ind_2ms", "تَتَفَاعَلُ"},
{"ind_3fd", "تَتَفَاعَلَانِ"},
{"ind_3fp", "يَتَفَاعَلْنَ"},
{"ind_3fs", "تَتَفَاعَلُ"},
{"ind_3md", "يَتَفَاعَلَانِ"},
{"ind_3mp", "يَتَفَاعَلُونَ"},
{"ind_3ms", "يَتَفَاعَلُ"},
{"ind_pass_1p", "نُتَفَاعَلُ"},
{"ind_pass_1s", "أُتَفَاعَلُ"},
{"ind_pass_2d", "تُتَفَاعَلَانِ"},
{"ind_pass_2fp", "تُتَفَاعَلْنَ"},
{"ind_pass_2fs", "تُتَفَاعَلِينَ"},
{"ind_pass_2mp", "تُتَفَاعَلُونَ"},
{"ind_pass_2ms", "تُتَفَاعَلُ"},
{"ind_pass_3fd", "تُتَفَاعَلَانِ"},
{"ind_pass_3fp", "يُتَفَاعَلْنَ"},
{"ind_pass_3fs", "تُتَفَاعَلُ"},
{"ind_pass_3md", "يُتَفَاعَلَانِ"},
{"ind_pass_3mp", "يُتَفَاعَلُونَ"},
{"ind_pass_3ms", "يُتَفَاعَلُ"},
{"past_1p", "تَفَاعَلْنَا"},
{"past_1s", "تَفَاعَلْتُ"},
{"past_2d", "تَفَاعَلْتُمَا"},
{"past_2fp", "تَفَاعَلْتُنَّ"},
{"past_2fs", "تَفَاعَلْتِ"},
{"past_2mp", "تَفَاعَلْتُمْ"},
{"past_2ms", "تَفَاعَلْتَ"},
{"past_3fd", "تَفَاعَلَتَا"},
{"past_3fp", "تَفَاعَلْنَ"},
{"past_3fs", "تَفَاعَلَتْ"},
{"past_3md", "تَفَاعَلَا"},
{"past_3mp", "تَفَاعَلُوا"},
{"past_3ms", "تَفَاعَلَ"},
{"past_pass_1p", "تُفُوعِلْنَا"},
{"past_pass_1s", "تُفُوعِلْتُ"},
{"past_pass_2d", "تُفُوعِلْتُمَا"},
{"past_pass_2fp", "تُفُوعِلْتُنَّ"},
{"past_pass_2fs", "تُفُوعِلْتِ"},
{"past_pass_2mp", "تُفُوعِلْتُمْ"},
{"past_pass_2ms", "تُفُوعِلْتَ"},
{"past_pass_3fd", "تُفُوعِلَتَا"},
{"past_pass_3fp", "تُفُوعِلْنَ"},
{"past_pass_3fs", "تُفُوعِلَتْ"},
{"past_pass_3md", "تُفُوعِلَا"},
{"past_pass_3mp", "تُفُوعِلُوا"},
{"past_pass_3ms", "تُفُوعِلَ"},
},
},
{
label = "فَرَّ ـِ (p.147، مضاعف)", root = "فرر", wazn = "فعَل يفعِل",
pass = true,
forms = {
{"imp_2d", "فِرَّا"},
{"imp_2fp", "اِفْرِرْنَ"},
{"imp_2fs", "فِرِّي"},
{"imp_2mp", "فِرُّوا"},
{"imp_2ms", "فِرَّ"},
{"ind_1p", "نَفِرُّ"},
{"ind_1s", "أَفِرُّ"},
{"ind_2d", "تَفِرَّانِ"},
{"ind_2fp", "تَفْرِرْنَ"},
{"ind_2fs", "تَفِرِّينَ"},
{"ind_2mp", "تَفِرُّونَ"},
{"ind_2ms", "تَفِرُّ"},
{"ind_3fd", "تَفِرَّانِ"},
{"ind_3fp", "يَفْرِرْنَ"},
{"ind_3fs", "تَفِرُّ"},
{"ind_3md", "يَفِرَّانِ"},
{"ind_3mp", "يَفِرُّونَ"},
{"ind_3ms", "يَفِرُّ"},
{"ind_pass_1p", "نُفَرُّ"},
{"ind_pass_1s", "أُفَرُّ"},
{"ind_pass_2d", "تُفَرَّانِ"},
{"ind_pass_2fp", "تُفْرَرْنَ"},
{"ind_pass_2fs", "تُفَرِّينَ"},
{"ind_pass_2mp", "تُفَرُّونَ"},
{"ind_pass_2ms", "تُفَرُّ"},
{"ind_pass_3fd", "تُفَرَّانِ"},
{"ind_pass_3fp", "يُفْرَرْنَ"},
{"ind_pass_3fs", "تُفَرُّ"},
{"ind_pass_3md", "يُفَرَّانِ"},
{"ind_pass_3mp", "يُفَرُّونَ"},
{"ind_pass_3ms", "يُفَرُّ"},
{"past_1p", "فَرَرْنَا"},
{"past_1s", "فَرَرْتُ"},
{"past_2d", "فَرَرْتُمَا"},
{"past_2fp", "فَرَرْتُنَّ"},
{"past_2fs", "فَرَرْتِ"},
{"past_2mp", "فَرَرْتُمْ"},
{"past_2ms", "فَرَرْتَ"},
{"past_3fd", "فَرَّتَا"},
{"past_3fp", "فَرَرْنَ"},
{"past_3fs", "فَرَّتْ"},
{"past_3md", "فَرَّا"},
{"past_3mp", "فَرُّوا"},
{"past_3ms", "فَرَّ"},
{"past_pass_1p", "فُرِرْنَا"},
{"past_pass_1s", "فُرِرْتُ"},
{"past_pass_2d", "فُرِرْتُمَا"},
{"past_pass_2fp", "فُرِرْتُنَّ"},
{"past_pass_2fs", "فُرِرْتِ"},
{"past_pass_2mp", "فُرِرْتُمْ"},
{"past_pass_2ms", "فُرِرْتَ"},
{"past_pass_3fd", "فُرَّتَا"},
{"past_pass_3fp", "فُرِرْنَ"},
{"past_pass_3fs", "فُرَّتْ"},
{"past_pass_3md", "فُرَّا"},
{"past_pass_3mp", "فُرُّوا"},
{"past_pass_3ms", "فُرَّ"},
},
},
{
label = "خافَ ـَ (p.222، أجوف واوي)", root = "خوف", wazn = "فعِل يفعَل",
pass = true,
forms = {
{"imp_2d", "خَافَا"},
{"imp_2fp", "خَفْنَ"},
{"imp_2fs", "خَافِي"},
{"imp_2mp", "خَافُوا"},
{"imp_2ms", "خَفْ"},
{"ind_1p", "نَخَافُ"},
{"ind_1s", "أَخَافُ"},
{"ind_2d", "تَخَافَانِ"},
{"ind_2fp", "تَخَفْنَ"},
{"ind_2fs", "تَخَافِينَ"},
{"ind_2mp", "تَخَافُونَ"},
{"ind_2ms", "تَخَافُ"},
{"ind_3fd", "تَخَافَانِ"},
{"ind_3fp", "يَخَفْنَ"},
{"ind_3fs", "تَخَافُ"},
{"ind_3md", "يَخَافَانِ"},
{"ind_3mp", "يَخَافُونَ"},
{"ind_3ms", "يَخَافُ"},
{"ind_pass_1p", "نُخَافُ"},
{"ind_pass_1s", "أُخَافُ"},
{"ind_pass_2d", "تُخَافَانِ"},
{"ind_pass_2fp", "تُخَفْنَ"},
{"ind_pass_2fs", "تُخَافِينَ"},
{"ind_pass_2mp", "تُخَافُونَ"},
{"ind_pass_2ms", "تُخَافُ"},
{"ind_pass_3fd", "تُخَافَانِ"},
{"ind_pass_3fp", "يُخَفْنَ"},
{"ind_pass_3fs", "تُخَافُ"},
{"ind_pass_3md", "يُخَافَانِ"},
{"ind_pass_3mp", "يُخَافُونَ"},
{"ind_pass_3ms", "يُخَافُ"},
{"past_1p", "خِفْنَا"},
{"past_1s", "خِفْتُ"},
{"past_2d", "خِفْتُمَا"},
{"past_2fp", "خِفْتُنَّ"},
{"past_2fs", "خِفْتِ"},
{"past_2mp", "خِفْتُمْ"},
{"past_2ms", "خِفْتَ"},
{"past_3fd", "خَافَتَا"},
{"past_3fp", "خِفْنَ"},
{"past_3fs", "خَافَتْ"},
{"past_3md", "خَافَا"},
{"past_3mp", "خَافُوا"},
{"past_3ms", "خَافَ"},
{"past_pass_1p", "خُفْنَا"},
{"past_pass_1s", "خُفْتُ"},
{"past_pass_2d", "خُفْتُمَا"},
{"past_pass_2fp", "خُفْتُنَّ"},
{"past_pass_2fs", "خُفْتِ"},
{"past_pass_2mp", "خُفْتُمْ"},
{"past_pass_2ms", "خُفْتَ"},
{"past_pass_3fd", "خِيفَتَا"},
{"past_pass_3fp", "خُفْنَ"},
{"past_pass_3fs", "خِيفَتْ"},
{"past_pass_3md", "خِيفَا"},
{"past_pass_3mp", "خِيفُوا"},
{"past_pass_3ms", "خِيفَ"},
},
},
{
label = "فَعْلَلَ (p.385، رباعي مجرد)", root = "فعلل", wazn = "فعلل",
pass = true,
forms = {
{"imp_2d", "فَعْلِلَا"},
{"imp_2fp", "فَعْلِلْنَ"},
{"imp_2fs", "فَعْلِلِي"},
{"imp_2mp", "فَعْلِلُوا"},
{"imp_2ms", "فَعْلِلْ"},
{"ind_1p", "نُفَعْلِلُ"},
{"ind_1s", "أُفَعْلِلُ"},
{"ind_2d", "تُفَعْلِلَانِ"},
{"ind_2fp", "تُفَعْلِلْنَ"},
{"ind_2fs", "تُفَعْلِلِينَ"},
{"ind_2mp", "تُفَعْلِلُونَ"},
{"ind_2ms", "تُفَعْلِلُ"},
{"ind_3fd", "تُفَعْلِلَانِ"},
{"ind_3fp", "يُفَعْلِلْنَ"},
{"ind_3fs", "تُفَعْلِلُ"},
{"ind_3md", "يُفَعْلِلَانِ"},
{"ind_3mp", "يُفَعْلِلُونَ"},
{"ind_3ms", "يُفَعْلِلُ"},
{"ind_pass_1p", "نُفَعْلَلُ"},
{"ind_pass_1s", "أُفَعْلَلُ"},
{"ind_pass_2d", "تُفَعْلَلَانِ"},
{"ind_pass_2fp", "تُفَعْلَلْنَ"},
{"ind_pass_2fs", "تُفَعْلَلِينَ"},
{"ind_pass_2mp", "تُفَعْلَلُونَ"},
{"ind_pass_2ms", "تُفَعْلَلُ"},
{"ind_pass_3fd", "تُفَعْلَلَانِ"},
{"ind_pass_3fp", "يُفَعْلَلْنَ"},
{"ind_pass_3fs", "تُفَعْلَلُ"},
{"ind_pass_3md", "يُفَعْلَلَانِ"},
{"ind_pass_3mp", "يُفَعْلَلُونَ"},
{"ind_pass_3ms", "يُفَعْلَلُ"},
{"past_1p", "فَعْلَلْنَا"},
{"past_1s", "فَعْلَلْتُ"},
{"past_2d", "فَعْلَلْتُمَا"},
{"past_2fp", "فَعْلَلْتُنَّ"},
{"past_2fs", "فَعْلَلْتِ"},
{"past_2mp", "فَعْلَلْتُمْ"},
{"past_2ms", "فَعْلَلْتَ"},
{"past_3fd", "فَعْلَلَتَا"},
{"past_3fp", "فَعْلَلْنَ"},
{"past_3fs", "فَعْلَلَتْ"},
{"past_3md", "فَعْلَلَا"},
{"past_3mp", "فَعْلَلُوا"},
{"past_3ms", "فَعْلَلَ"},
{"past_pass_1p", "فُعْلِلْنَا"},
{"past_pass_1s", "فُعْلِلْتُ"},
{"past_pass_2d", "فُعْلِلْتُمَا"},
{"past_pass_2fp", "فُعْلِلْتُنَّ"},
{"past_pass_2fs", "فُعْلِلْتِ"},
{"past_pass_2mp", "فُعْلِلْتُمْ"},
{"past_pass_2ms", "فُعْلِلْتَ"},
{"past_pass_3fd", "فُعْلِلَتَا"},
{"past_pass_3fp", "فُعْلِلْنَ"},
{"past_pass_3fs", "فُعْلِلَتْ"},
{"past_pass_3md", "فُعْلِلَا"},
{"past_pass_3mp", "فُعْلِلُوا"},
{"past_pass_3ms", "فُعْلِلَ"},
},
},
{
label = "اِسَّمَّعَ (p.287، تفعّل مدغم)", root = "سمع", wazn = "تفعّل",
reduced = true,
forms = {
{"imp_2d", "اِسَّمَّعَا"},
{"imp_2fp", "اِسَّمَّعْنَ"},
{"imp_2fs", "اِسَّمَّعِي"},
{"imp_2mp", "اِسَّمَّعُوا"},
{"imp_2ms", "اِسَّمَّعْ"},
{"ind_1p", "نَسَّمَّعُ"},
{"ind_1s", "أَسَّمَّعُ"},
{"ind_2d", "تَسَّمَّعَانِ"},
{"ind_2fp", "تَسَّمَّعْنَ"},
{"ind_2fs", "تَسَّمَّعِينَ"},
{"ind_2mp", "تَسَّمَّعُونَ"},
{"ind_2ms", "تَسَّمَّعُ"},
{"ind_3fd", "تَسَّمَّعَانِ"},
{"ind_3fp", "يَسَّمَّعْنَ"},
{"ind_3fs", "تَسَّمَّعُ"},
{"ind_3md", "يَسَّمَّعَانِ"},
{"ind_3mp", "يَسَّمَّعُونَ"},
{"ind_3ms", "يَسَّمَّعُ"},
{"past_1p", "اِسَّمَّعْنَا"},
{"past_1s", "اِسَّمَّعْتُ"},
{"past_2d", "اِسَّمَّعْتُمَا"},
{"past_2fp", "اِسَّمَّعْتُنَّ"},
{"past_2fs", "اِسَّمَّعْتِ"},
{"past_2mp", "اِسَّمَّعْتُمْ"},
{"past_2ms", "اِسَّمَّعْتَ"},
{"past_3fd", "اِسَّمَّعَتَا"},
{"past_3fp", "اِسَّمَّعْنَ"},
{"past_3fs", "اِسَّمَّعَتْ"},
{"past_3md", "اِسَّمَّعَا"},
{"past_3mp", "اِسَّمَّعُوا"},
{"past_3ms", "اِسَّمَّعَ"},
},
},
{
label = "فَعَّلَ (p.241، الوزن الثاني)", root = "فعل", wazn = "فعّل",
pass = true,
forms = {
{"imp_2d", "فَعِّلَا"},
{"imp_2fp", "فَعِّلْنَ"},
{"imp_2fs", "فَعِّلِي"},
{"imp_2mp", "فَعِّلُوا"},
{"imp_2ms", "فَعِّلْ"},
{"ind_1p", "نُفَعِّلُ"},
{"ind_1s", "أُفَعِّلُ"},
{"ind_2d", "تُفَعِّلَانِ"},
{"ind_2fp", "تُفَعِّلْنَ"},
{"ind_2fs", "تُفَعِّلِينَ"},
{"ind_2mp", "تُفَعِّلُونَ"},
{"ind_2ms", "تُفَعِّلُ"},
{"ind_3fd", "تُفَعِّلَانِ"},
{"ind_3fp", "يُفَعِّلْنَ"},
{"ind_3fs", "تُفَعِّلُ"},
{"ind_3md", "يُفَعِّلَانِ"},
{"ind_3mp", "يُفَعِّلُونَ"},
{"ind_3ms", "يُفَعِّلُ"},
{"ind_pass_1p", "نُفَعَّلُ"},
{"ind_pass_1s", "أُفَعَّلُ"},
{"ind_pass_2d", "تُفَعَّلَانِ"},
{"ind_pass_2fp", "تُفَعَّلْنَ"},
{"ind_pass_2fs", "تُفَعَّلِينَ"},
{"ind_pass_2mp", "تُفَعَّلُونَ"},
{"ind_pass_2ms", "تُفَعَّلُ"},
{"ind_pass_3fd", "تُفَعَّلَانِ"},
{"ind_pass_3fp", "يُفَعَّلْنَ"},
{"ind_pass_3fs", "تُفَعَّلُ"},
{"ind_pass_3md", "يُفَعَّلَانِ"},
{"ind_pass_3mp", "يُفَعَّلُونَ"},
{"ind_pass_3ms", "يُفَعَّلُ"},
{"past_1p", "فَعَّلْنَا"},
{"past_1s", "فَعَّلْتُ"},
{"past_2d", "فَعَّلْتُمَا"},
{"past_2fp", "فَعَّلْتُنَّ"},
{"past_2fs", "فَعَّلْتِ"},
{"past_2mp", "فَعَّلْتُمْ"},
{"past_2ms", "فَعَّلْتَ"},
{"past_3fd", "فَعَّلَتَا"},
{"past_3fp", "فَعَّلْنَ"},
{"past_3fs", "فَعَّلَتْ"},
{"past_3md", "فَعَّلَا"},
{"past_3mp", "فَعَّلُوا"},
{"past_3ms", "فَعَّلَ"},
{"past_pass_1p", "فُعِّلْنَا"},
{"past_pass_1s", "فُعِّلْتُ"},
{"past_pass_2d", "فُعِّلْتُمَا"},
{"past_pass_2fp", "فُعِّلْتُنَّ"},
{"past_pass_2fs", "فُعِّلْتِ"},
{"past_pass_2mp", "فُعِّلْتُمْ"},
{"past_pass_2ms", "فُعِّلْتَ"},
{"past_pass_3fd", "فُعِّلَتَا"},
{"past_pass_3fp", "فُعِّلْنَ"},
{"past_pass_3fs", "فُعِّلَتْ"},
{"past_pass_3md", "فُعِّلَا"},
{"past_pass_3mp", "فُعِّلُوا"},
{"past_pass_3ms", "فُعِّلَ"},
},
},
{
label = "حَيِيَ ـَ (p.229، لفيف مقرون)", root = "حيي", wazn = "فعِل يفعَل",
pass = true,
forms = {
{"imp_2d", "اِحْيَيَا"},
{"imp_2fp", "اِحْيَيْنَ"},
{"imp_2fs", "اِحْيَيْ"},
{"imp_2mp", "اِحْيَوْا"},
{"imp_2ms", "اِحْيَ"},
{"ind_1p", "نَحْيَا"},
{"ind_1s", "أَحْيَا"},
{"ind_2d", "تَحْيَيَانِ"},
{"ind_2fp", "تَحْيَيْنَ"},
{"ind_2fs", "تَحْيَيْنَ"},
{"ind_2mp", "تَحْيَوْنَ"},
{"ind_2ms", "تَحْيَا"},
{"ind_3fd", "تَحْيَيَانِ"},
{"ind_3fp", "يَحْيَيْنَ"},
{"ind_3fs", "تَحْيَا"},
{"ind_3md", "يَحْيَيَانِ"},
{"ind_3mp", "يَحْيَوْنَ"},
{"ind_3ms", "يَحْيَا"},
{"ind_pass_1p", "نُحْيَا"},
{"ind_pass_1s", "أُحْيَا"},
{"ind_pass_2d", "تُحْيَيَانِ"},
{"ind_pass_2fp", "تُحْيَيْنَ"},
{"ind_pass_2fs", "تُحْيَيْنَ"},
{"ind_pass_2mp", "تُحْيَوْنَ"},
{"ind_pass_2ms", "تُحْيَا"},
{"ind_pass_3fd", "تُحْيَيَانِ"},
{"ind_pass_3fp", "يُحْيَيْنَ"},
{"ind_pass_3fs", "تُحْيَا"},
{"ind_pass_3md", "يُحْيَيَانِ"},
{"ind_pass_3mp", "يُحْيَوْنَ"},
{"ind_pass_3ms", "يُحْيَا"},
{"past_1p", "حَيِينَا"},
{"past_1s", "حَيِيتُ"},
{"past_2d", "حَيِيتُمَا"},
{"past_2fp", "حَيِيتُنَّ"},
{"past_2fs", "حَيِيتِ"},
{"past_2mp", "حَيِيتُمْ"},
{"past_2ms", "حَيِيتَ"},
{"past_3fd", "حَيِيَتَا"},
{"past_3fp", "حَيِينَ"},
{"past_3fs", "حَيِيَتْ"},
{"past_3md", "حَيِيَا"},
{"past_3mp", "حَيُوا"},
{"past_3ms", "حَيِيَ"},
{"past_pass_1p", "حُيِينَا"},
{"past_pass_1s", "حُيِيتُ"},
{"past_pass_2d", "حُيِيتُمَا"},
{"past_pass_2fp", "حُيِيتُنَّ"},
{"past_pass_2fs", "حُيِيتِ"},
{"past_pass_2mp", "حُيِيتُمْ"},
{"past_pass_2ms", "حُيِيتَ"},
{"past_pass_3fd", "حُيِيَتَا"},
{"past_pass_3fp", "حُيِينَ"},
{"past_pass_3fs", "حُيِيَتْ"},
{"past_pass_3md", "حُيِيَا"},
{"past_pass_3mp", "حُيُوا"},
{"past_pass_3ms", "حُيِيَ"},
},
},
{
label = "اِحْوَنْصَلَ (p.412، افعنلل)", root = "حوصل", wazn = "افعنلل",
forms = {
{"imp_2d", "اِحْوَنْصِلَا"},
{"imp_2fp", "اِحْوَنْصِلْنَ"},
{"imp_2fs", "اِحْوَنْصِلِي"},
{"imp_2mp", "اِحْوَنْصِلُوا"},
{"imp_2ms", "اِحْوَنْصِلْ"},
{"ind_1p", "نَحْوَنْصِلُ"},
{"ind_1s", "أَحْوَنْصِلُ"},
{"ind_2d", "تَحْوَنْصِلَانِ"},
{"ind_2fp", "تَحْوَنْصِلْنَ"},
{"ind_2fs", "تَحْوَنْصِلِينَ"},
{"ind_2mp", "تَحْوَنْصِلُونَ"},
{"ind_2ms", "تَحْوَنْصِلُ"},
{"ind_3fd", "تَحْوَنْصِلَانِ"},
{"ind_3fp", "يَحْوَنْصِلْنَ"},
{"ind_3fs", "تَحْوَنْصِلُ"},
{"ind_3md", "يَحْوَنْصِلَانِ"},
{"ind_3mp", "يَحْوَنْصِلُونَ"},
{"ind_3ms", "يَحْوَنْصِلُ"},
{"past_1p", "اِحْوَنْصَلْنَا"},
{"past_1s", "اِحْوَنْصَلْتُ"},
{"past_2d", "اِحْوَنْصَلْتُمَا"},
{"past_2fp", "اِحْوَنْصَلْتُنَّ"},
{"past_2fs", "اِحْوَنْصَلْتِ"},
{"past_2mp", "اِحْوَنْصَلْتُمْ"},
{"past_2ms", "اِحْوَنْصَلْتَ"},
{"past_3fd", "اِحْوَنْصَلَتَا"},
{"past_3fp", "اِحْوَنْصَلْنَ"},
{"past_3fs", "اِحْوَنْصَلَتْ"},
{"past_3md", "اِحْوَنْصَلَا"},
{"past_3mp", "اِحْوَنْصَلُوا"},
{"past_3ms", "اِحْوَنْصَلَ"},
},
},
{
label = "اِرْعَوَى (p.357، افعلّ ناقص)", root = "رعو", wazn = "افعلّ",
forms = {
{"imp_2d", "اِرْعَوِيَا"},
{"imp_2fp", "اِرْعَوِينَ"},
{"imp_2fs", "اِرْعَوِي"},
{"imp_2mp", "اِرْعَوُوا"},
{"imp_2ms", "اِرْعَوِ"},
{"ind_1p", "نَرْعَوِي"},
{"ind_1s", "أَرْعَوِي"},
{"ind_2d", "تَرْعَوِيَانِ"},
{"ind_2fp", "تَرْعَوِينَ"},
{"ind_2fs", "تَرْعَوِينَ"},
{"ind_2mp", "تَرْعَوُونَ"},
{"ind_2ms", "تَرْعَوِي"},
{"ind_3fd", "تَرْعَوِيَانِ"},
{"ind_3fp", "يَرْعَوِينَ"},
{"ind_3fs", "تَرْعَوِي"},
{"ind_3md", "يَرْعَوِيَانِ"},
{"ind_3mp", "يَرْعَوُونَ"},
{"ind_3ms", "يَرْعَوِي"},
{"past_1p", "اِرْعَوَيْنَا"},
{"past_1s", "اِرْعَوَيْتُ"},
{"past_2d", "اِرْعَوَيْتُمَا"},
{"past_2fp", "اِرْعَوَيْتُنَّ"},
{"past_2fs", "اِرْعَوَيْتِ"},
{"past_2mp", "اِرْعَوَيْتُمْ"},
{"past_2ms", "اِرْعَوَيْتَ"},
{"past_3fd", "اِرْعَوَتَا"},
{"past_3fp", "اِرْعَوَيْنَ"},
{"past_3fs", "اِرْعَوَتْ"},
{"past_3md", "اِرْعَوَيَا"},
{"past_3mp", "اِرْعَوَوْا"},
{"past_3ms", "اِرْعَوَى"},
},
},
{
label = "تَفَوْعَلَ (p.398، تفعلل)", root = "فوعل", wazn = "تفعلل",
pass = true,
forms = {
{"imp_2d", "تَفَوْعَلَا"},
{"imp_2fp", "تَفَوْعَلْنَ"},
{"imp_2fs", "تَفَوْعَلِي"},
{"imp_2mp", "تَفَوْعَلُوا"},
{"imp_2ms", "تَفَوْعَلْ"},
{"ind_1p", "نَتَفَوْعَلُ"},
{"ind_1s", "أَتَفَوْعَلُ"},
{"ind_2d", "تَتَفَوْعَلَانِ"},
{"ind_2fp", "تَتَفَوْعَلْنَ"},
{"ind_2fs", "تَتَفَوْعَلِينَ"},
{"ind_2mp", "تَتَفَوْعَلُونَ"},
{"ind_2ms", "تَتَفَوْعَلُ"},
{"ind_3fd", "تَتَفَوْعَلَانِ"},
{"ind_3fp", "يَتَفَوْعَلْنَ"},
{"ind_3fs", "تَتَفَوْعَلُ"},
{"ind_3md", "يَتَفَوْعَلَانِ"},
{"ind_3mp", "يَتَفَوْعَلُونَ"},
{"ind_3ms", "يَتَفَوْعَلُ"},
{"ind_pass_1p", "نُتَفَوْعَلُ"},
{"ind_pass_1s", "أُتَفَوْعَلُ"},
{"ind_pass_2d", "تُتَفَوْعَلَانِ"},
{"ind_pass_2fp", "تُتَفَوْعَلْنَ"},
{"ind_pass_2fs", "تُتَفَوْعَلِينَ"},
{"ind_pass_2mp", "تُتَفَوْعَلُونَ"},
{"ind_pass_2ms", "تُتَفَوْعَلُ"},
{"ind_pass_3fd", "تُتَفَوْعَلَانِ"},
{"ind_pass_3fp", "يُتَفَوْعَلْنَ"},
{"ind_pass_3fs", "تُتَفَوْعَلُ"},
{"ind_pass_3md", "يُتَفَوْعَلَانِ"},
{"ind_pass_3mp", "يُتَفَوْعَلُونَ"},
{"ind_pass_3ms", "يُتَفَوْعَلُ"},
{"past_1p", "تَفَوْعَلْنَا"},
{"past_1s", "تَفَوْعَلْتُ"},
{"past_2d", "تَفَوْعَلْتُمَا"},
{"past_2fp", "تَفَوْعَلْتُنَّ"},
{"past_2fs", "تَفَوْعَلْتِ"},
{"past_2mp", "تَفَوْعَلْتُمْ"},
{"past_2ms", "تَفَوْعَلْتَ"},
{"past_3fd", "تَفَوْعَلَتَا"},
{"past_3fp", "تَفَوْعَلْنَ"},
{"past_3fs", "تَفَوْعَلَتْ"},
{"past_3md", "تَفَوْعَلَا"},
{"past_3mp", "تَفَوْعَلُوا"},
{"past_3ms", "تَفَوْعَلَ"},
{"past_pass_1p", "تُفُوعِلْنَا"},
{"past_pass_1s", "تُفُوعِلْتُ"},
{"past_pass_2d", "تُفُوعِلْتُمَا"},
{"past_pass_2fp", "تُفُوعِلْتُنَّ"},
{"past_pass_2fs", "تُفُوعِلْتِ"},
{"past_pass_2mp", "تُفُوعِلْتُمْ"},
{"past_pass_2ms", "تُفُوعِلْتَ"},
{"past_pass_3fd", "تُفُوعِلَتَا"},
{"past_pass_3fp", "تُفُوعِلْنَ"},
{"past_pass_3fs", "تُفُوعِلَتْ"},
{"past_pass_3md", "تُفُوعِلَا"},
{"past_pass_3mp", "تُفُوعِلُوا"},
{"past_pass_3ms", "تُفُوعِلَ"},
},
},
{
label = "اِظَّنَّ (p.336، افتعل مدغم مضاعف)", root = "ظنن", wazn = "افتعل",
forms = {
{"imp_2d", "اِظَّنَّا"},
{"imp_2fp", "اِظَّنِنَّ"},
{"imp_2fs", "اِظَّنِّي"},
{"imp_2mp", "اِظَّنُّوا"},
{"imp_2ms", "اِظَّنَّ"},
{"ind_1p", "نَظَّنُّ"},
{"ind_1s", "أَظَّنُّ"},
{"ind_2d", "تَظَّنَّانِ"},
{"ind_2fp", "تَظَّنِنَّ"},
{"ind_2fs", "تَظَّنِّينَ"},
{"ind_2mp", "تَظَّنُّونَ"},
{"ind_2ms", "تَظَّنُّ"},
{"ind_3fd", "تَظَّنَّانِ"},
{"ind_3fp", "يَظَّنِنَّ"},
{"ind_3fs", "تَظَّنُّ"},
{"ind_3md", "يَظَّنَّانِ"},
{"ind_3mp", "يَظَّنُّونَ"},
{"ind_3ms", "يَظَّنُّ"},
{"past_1p", "اِظَّنَنَّا"},
{"past_1s", "اِظَّنَنْتُ"},
{"past_2d", "اِظَّنَنْتُمَا"},
{"past_2fp", "اِظَّنَنْتُنَّ"},
{"past_2fs", "اِظَّنَنْتِ"},
{"past_2mp", "اِظَّنَنْتُمْ"},
{"past_2ms", "اِظَّنَنْتَ"},
{"past_3fd", "اِظَّنَّتَا"},
{"past_3fp", "اِظَّنَنَّ"},
{"past_3fs", "اِظَّنَّتْ"},
{"past_3md", "اِظَّنَّا"},
{"past_3mp", "اِظَّنُّوا"},
{"past_3ms", "اِظَّنَّ"},
},
},
{
label = "اِصّاعَدَ (p.304، تفاعل مدغم)", root = "صعد", wazn = "تفاعل",
reduced = true,
forms = {
{"imp_2d", "اِصَّاعَدَا"},
{"imp_2fp", "اِصَّاعَدْنَ"},
{"imp_2fs", "اِصَّاعَدِي"},
{"imp_2mp", "اِصَّاعَدُوا"},
{"imp_2ms", "اِصَّاعَدْ"},
{"ind_1p", "نَصَّاعَدُ"},
{"ind_1s", "أَصَّاعَدُ"},
{"ind_2d", "تَصَّاعَدَانِ"},
{"ind_2fp", "تَصَّاعَدْنَ"},
{"ind_2fs", "تَصَّاعَدِينَ"},
{"ind_2mp", "تَصَّاعَدُونَ"},
{"ind_2ms", "تَصَّاعَدُ"},
{"ind_3fd", "تَصَّاعَدَانِ"},
{"ind_3fp", "يَصَّاعَدْنَ"},
{"ind_3fs", "تَصَّاعَدُ"},
{"ind_3md", "يَصَّاعَدَانِ"},
{"ind_3mp", "يَصَّاعَدُونَ"},
{"ind_3ms", "يَصَّاعَدُ"},
{"past_1p", "اِصَّاعَدْنَا"},
{"past_1s", "اِصَّاعَدْتُ"},
{"past_2d", "اِصَّاعَدْتُمَا"},
{"past_2fp", "اِصَّاعَدْتُنَّ"},
{"past_2fs", "اِصَّاعَدْتِ"},
{"past_2mp", "اِصَّاعَدْتُمْ"},
{"past_2ms", "اِصَّاعَدْتَ"},
{"past_3fd", "اِصَّاعَدَتَا"},
{"past_3fp", "اِصَّاعَدْنَ"},
{"past_3fs", "اِصَّاعَدَتْ"},
{"past_3md", "اِصَّاعَدَا"},
{"past_3mp", "اِصَّاعَدُوا"},
{"past_3ms", "اِصَّاعَدَ"},
},
},
{
label = "فاعَلَ (p.256، الوزن الثالث)", root = "فعل", wazn = "فاعل",
pass = true,
forms = {
{"imp_2d", "فَاعِلَا"},
{"imp_2fp", "فَاعِلْنَ"},
{"imp_2fs", "فَاعِلِي"},
{"imp_2mp", "فَاعِلُوا"},
{"imp_2ms", "فَاعِلْ"},
{"ind_1p", "نُفَاعِلُ"},
{"ind_1s", "أُفَاعِلُ"},
{"ind_2d", "تُفَاعِلَانِ"},
{"ind_2fp", "تُفَاعِلْنَ"},
{"ind_2fs", "تُفَاعِلِينَ"},
{"ind_2mp", "تُفَاعِلُونَ"},
{"ind_2ms", "تُفَاعِلُ"},
{"ind_3fd", "تُفَاعِلَانِ"},
{"ind_3fp", "يُفَاعِلْنَ"},
{"ind_3fs", "تُفَاعِلُ"},
{"ind_3md", "يُفَاعِلَانِ"},
{"ind_3mp", "يُفَاعِلُونَ"},
{"ind_3ms", "يُفَاعِلُ"},
{"ind_pass_1p", "نُفَاعَلُ"},
{"ind_pass_1s", "أُفَاعَلُ"},
{"ind_pass_2d", "تُفَاعَلَانِ"},
{"ind_pass_2fp", "تُفَاعَلْنَ"},
{"ind_pass_2fs", "تُفَاعَلِينَ"},
{"ind_pass_2mp", "تُفَاعَلُونَ"},
{"ind_pass_2ms", "تُفَاعَلُ"},
{"ind_pass_3fd", "تُفَاعَلَانِ"},
{"ind_pass_3fp", "يُفَاعَلْنَ"},
{"ind_pass_3fs", "تُفَاعَلُ"},
{"ind_pass_3md", "يُفَاعَلَانِ"},
{"ind_pass_3mp", "يُفَاعَلُونَ"},
{"ind_pass_3ms", "يُفَاعَلُ"},
{"past_1p", "فَاعَلْنَا"},
{"past_1s", "فَاعَلْتُ"},
{"past_2d", "فَاعَلْتُمَا"},
{"past_2fp", "فَاعَلْتُنَّ"},
{"past_2fs", "فَاعَلْتِ"},
{"past_2mp", "فَاعَلْتُمْ"},
{"past_2ms", "فَاعَلْتَ"},
{"past_3fd", "فَاعَلَتَا"},
{"past_3fp", "فَاعَلْنَ"},
{"past_3fs", "فَاعَلَتْ"},
{"past_3md", "فَاعَلَا"},
{"past_3mp", "فَاعَلُوا"},
{"past_3ms", "فَاعَلَ"},
{"past_pass_1p", "فُوعِلْنَا"},
{"past_pass_1s", "فُوعِلْتُ"},
{"past_pass_2d", "فُوعِلْتُمَا"},
{"past_pass_2fp", "فُوعِلْتُنَّ"},
{"past_pass_2fs", "فُوعِلْتِ"},
{"past_pass_2mp", "فُوعِلْتُمْ"},
{"past_pass_2ms", "فُوعِلْتَ"},
{"past_pass_3fd", "فُوعِلَتَا"},
{"past_pass_3fp", "فُوعِلْنَ"},
{"past_pass_3fs", "فُوعِلَتْ"},
{"past_pass_3md", "فُوعِلَا"},
{"past_pass_3mp", "فُوعِلُوا"},
{"past_pass_3ms", "فُوعِلَ"},
},
},
{
label = "بَقِيَ ـَ (p.225، ناقص يائي)", root = "بقي", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِبْقَيَا"},
{"imp_2fp", "اِبْقَيْنَ"},
{"imp_2fs", "اِبْقَيْ"},
{"imp_2mp", "اِبْقَوْا"},
{"imp_2ms", "اِبْقَ"},
{"ind_1p", "نَبْقَى"},
{"ind_1s", "أَبْقَى"},
{"ind_2d", "تَبْقَيَانِ"},
{"ind_2fp", "تَبْقَيْنَ"},
{"ind_2fs", "تَبْقَيْنَ"},
{"ind_2mp", "تَبْقَوْنَ"},
{"ind_2ms", "تَبْقَى"},
{"ind_3fd", "تَبْقَيَانِ"},
{"ind_3fp", "يَبْقَيْنَ"},
{"ind_3fs", "تَبْقَى"},
{"ind_3md", "يَبْقَيَانِ"},
{"ind_3mp", "يَبْقَوْنَ"},
{"ind_3ms", "يَبْقَى"},
{"past_1p", "بَقِينَا"},
{"past_1s", "بَقِيتُ"},
{"past_2d", "بَقِيتُمَا"},
{"past_2fp", "بَقِيتُنَّ"},
{"past_2fs", "بَقِيتِ"},
{"past_2mp", "بَقِيتُمْ"},
{"past_2ms", "بَقِيتَ"},
{"past_3fd", "بَقِيَتَا"},
{"past_3fp", "بَقِينَ"},
{"past_3fs", "بَقِيَتْ"},
{"past_3md", "بَقِيَا"},
{"past_3mp", "بَقُوا"},
{"past_3ms", "بَقِيَ"},
},
},
{
label = "اِنْوَرَبَ (p.325، انفعل معتل الفاء)", root = "ورب", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْوَرِبَا"},
{"imp_2fp", "اِنْوَرِبْنَ"},
{"imp_2fs", "اِنْوَرِبِي"},
{"imp_2mp", "اِنْوَرِبُوا"},
{"imp_2ms", "اِنْوَرِبْ"},
{"ind_1p", "نَنْوَرِبُ"},
{"ind_1s", "أَنْوَرِبُ"},
{"ind_2d", "تَنْوَرِبَانِ"},
{"ind_2fp", "تَنْوَرِبْنَ"},
{"ind_2fs", "تَنْوَرِبِينَ"},
{"ind_2mp", "تَنْوَرِبُونَ"},
{"ind_2ms", "تَنْوَرِبُ"},
{"ind_3fd", "تَنْوَرِبَانِ"},
{"ind_3fp", "يَنْوَرِبْنَ"},
{"ind_3fs", "تَنْوَرِبُ"},
{"ind_3md", "يَنْوَرِبَانِ"},
{"ind_3mp", "يَنْوَرِبُونَ"},
{"ind_3ms", "يَنْوَرِبُ"},
{"past_1p", "اِنْوَرَبْنَا"},
{"past_1s", "اِنْوَرَبْتُ"},
{"past_2d", "اِنْوَرَبْتُمَا"},
{"past_2fp", "اِنْوَرَبْتُنَّ"},
{"past_2fs", "اِنْوَرَبْتِ"},
{"past_2mp", "اِنْوَرَبْتُمْ"},
{"past_2ms", "اِنْوَرَبْتَ"},
{"past_3fd", "اِنْوَرَبَتَا"},
{"past_3fp", "اِنْوَرَبْنَ"},
{"past_3fs", "اِنْوَرَبَتْ"},
{"past_3md", "اِنْوَرَبَا"},
{"past_3mp", "اِنْوَرَبُوا"},
{"past_3ms", "اِنْوَرَبَ"},
},
},
{
label = "مَدَّ ـُ (p.129، مضاعف)", root = "مدد", wazn = "فعَل يفعُل",
pass = true,
forms = {
{"imp_2d", "مُدَّا"},
{"imp_2fp", "اُمْدُدْنَ"},
{"imp_2fs", "مُدِّي"},
{"imp_2mp", "مُدُّوا"},
{"imp_2ms", "مُدَّ"},
{"ind_1p", "نَمُدُّ"},
{"ind_1s", "أَمُدُّ"},
{"ind_2d", "تَمُدَّانِ"},
{"ind_2fp", "تَمْدُدْنَ"},
{"ind_2fs", "تَمُدِّينَ"},
{"ind_2mp", "تَمُدُّونَ"},
{"ind_2ms", "تَمُدُّ"},
{"ind_3fd", "تَمُدَّانِ"},
{"ind_3fp", "يَمْدُدْنَ"},
{"ind_3fs", "تَمُدُّ"},
{"ind_3md", "يَمُدَّانِ"},
{"ind_3mp", "يَمُدُّونَ"},
{"ind_3ms", "يَمُدُّ"},
{"ind_pass_1p", "نُمَدُّ"},
{"ind_pass_1s", "أُمَدُّ"},
{"ind_pass_2d", "تُمَدَّانِ"},
{"ind_pass_2fp", "تُمْدَدْنَ"},
{"ind_pass_2fs", "تُمَدِّينَ"},
{"ind_pass_2mp", "تُمَدُّونَ"},
{"ind_pass_2ms", "تُمَدُّ"},
{"ind_pass_3fd", "تُمَدَّانِ"},
{"ind_pass_3fp", "يُمْدَدْنَ"},
{"ind_pass_3fs", "تُمَدُّ"},
{"ind_pass_3md", "يُمَدَّانِ"},
{"ind_pass_3mp", "يُمَدُّونَ"},
{"ind_pass_3ms", "يُمَدُّ"},
{"past_1p", "مَدَدْنَا"},
{"past_1s", "مَدَدْتُ"},
{"past_2d", "مَدَدْتُمَا"},
{"past_2fp", "مَدَدْتُنَّ"},
{"past_2fs", "مَدَدْتِ"},
{"past_2mp", "مَدَدْتُمْ"},
{"past_2ms", "مَدَدْتَ"},
{"past_3fd", "مَدَّتَا"},
{"past_3fp", "مَدَدْنَ"},
{"past_3fs", "مَدَّتْ"},
{"past_3md", "مَدَّا"},
{"past_3mp", "مَدُّوا"},
{"past_3ms", "مَدَّ"},
{"past_pass_1p", "مُدِدْنَا"},
{"past_pass_1s", "مُدِدْتُ"},
{"past_pass_2d", "مُدِدْتُمَا"},
{"past_pass_2fp", "مُدِدْتُنَّ"},
{"past_pass_2fs", "مُدِدْتِ"},
{"past_pass_2mp", "مُدِدْتُمْ"},
{"past_pass_2ms", "مُدِدْتَ"},
{"past_pass_3fd", "مُدَّتَا"},
{"past_pass_3fp", "مُدِدْنَ"},
{"past_pass_3fs", "مُدَّتْ"},
{"past_pass_3md", "مُدَّا"},
{"past_pass_3mp", "مُدُّوا"},
{"past_pass_3ms", "مُدَّ"},
},
},
{
label = "أَكَلَ ـُ (p.133، مهموز الفاء)", root = "أكل", wazn = "فعَل يفعُل",
pass = true,
forms = {
{"imp_2d", "كُلَا"},
{"imp_2fp", "كُلْنَ"},
{"imp_2fs", "كُلِي"},
{"imp_2mp", "كُلُوا"},
{"imp_2ms", "كُلْ"},
{"ind_1p", "نَأْكُلُ"},
{"ind_1s", "آكُلُ"},
{"ind_2d", "تَأْكُلَانِ"},
{"ind_2fp", "تَأْكُلْنَ"},
{"ind_2fs", "تَأْكُلِينَ"},
{"ind_2mp", "تَأْكُلُونَ"},
{"ind_2ms", "تَأْكُلُ"},
{"ind_3fd", "تَأْكُلَانِ"},
{"ind_3fp", "يَأْكُلْنَ"},
{"ind_3fs", "تَأْكُلُ"},
{"ind_3md", "يَأْكُلَانِ"},
{"ind_3mp", "يَأْكُلُونَ"},
{"ind_3ms", "يَأْكُلُ"},
{"ind_pass_1p", "نُؤْكَلُ"},
{"ind_pass_1s", "أُوكَلُ"},
{"ind_pass_2d", "تُؤْكَلَانِ"},
{"ind_pass_2fp", "تُؤْكَلْنَ"},
{"ind_pass_2fs", "تُؤْكَلِينَ"},
{"ind_pass_2mp", "تُؤْكَلُونَ"},
{"ind_pass_2ms", "تُؤْكَلُ"},
{"ind_pass_3fd", "تُؤْكَلَانِ"},
{"ind_pass_3fp", "يُؤْكَلْنَ"},
{"ind_pass_3fs", "تُؤْكَلُ"},
{"ind_pass_3md", "يُؤْكَلَانِ"},
{"ind_pass_3mp", "يُؤْكَلُونَ"},
{"ind_pass_3ms", "يُؤْكَلُ"},
{"past_1p", "أَكَلْنَا"},
{"past_1s", "أَكَلْتُ"},
{"past_2d", "أَكَلْتُمَا"},
{"past_2fp", "أَكَلْتُنَّ"},
{"past_2fs", "أَكَلْتِ"},
{"past_2mp", "أَكَلْتُمْ"},
{"past_2ms", "أَكَلْتَ"},
{"past_3fd", "أَكَلَتَا"},
{"past_3fp", "أَكَلْنَ"},
{"past_3fs", "أَكَلَتْ"},
{"past_3md", "أَكَلَا"},
{"past_3mp", "أَكَلُوا"},
{"past_3ms", "أَكَلَ"},
{"past_pass_1p", "أُكِلْنَا"},
{"past_pass_1s", "أُكِلْتُ"},
{"past_pass_2d", "أُكِلْتُمَا"},
{"past_pass_2fp", "أُكِلْتُنَّ"},
{"past_pass_2fs", "أُكِلْتِ"},
{"past_pass_2mp", "أُكِلْتُمْ"},
{"past_pass_2ms", "أُكِلْتَ"},
{"past_pass_3fd", "أُكِلَتَا"},
{"past_pass_3fp", "أُكِلْنَ"},
{"past_pass_3fs", "أُكِلَتْ"},
{"past_pass_3md", "أُكِلَا"},
{"past_pass_3mp", "أُكِلُوا"},
{"past_pass_3ms", "أُكِلَ"},
},
},
{
label = "قالَ ـُ (p.138، أجوف واوي)", root = "قول", wazn = "فعَل يفعُل",
pass = true,
forms = {
{"imp_2d", "قُولَا"},
{"imp_2fp", "قُلْنَ"},
{"imp_2fs", "قُولِي"},
{"imp_2mp", "قُولُوا"},
{"imp_2ms", "قُلْ"},
{"ind_1p", "نَقُولُ"},
{"ind_1s", "أَقُولُ"},
{"ind_2d", "تَقُولَانِ"},
{"ind_2fp", "تَقُلْنَ"},
{"ind_2fs", "تَقُولِينَ"},
{"ind_2mp", "تَقُولُونَ"},
{"ind_2ms", "تَقُولُ"},
{"ind_3fd", "تَقُولَانِ"},
{"ind_3fp", "يَقُلْنَ"},
{"ind_3fs", "تَقُولُ"},
{"ind_3md", "يَقُولَانِ"},
{"ind_3mp", "يَقُولُونَ"},
{"ind_3ms", "يَقُولُ"},
{"ind_pass_1p", "نُقَالُ"},
{"ind_pass_1s", "أُقَالُ"},
{"ind_pass_2d", "تُقَالَانِ"},
{"ind_pass_2fp", "تُقَلْنَ"},
{"ind_pass_2fs", "تُقَالِينَ"},
{"ind_pass_2mp", "تُقَالُونَ"},
{"ind_pass_2ms", "تُقَالُ"},
{"ind_pass_3fd", "تُقَالَانِ"},
{"ind_pass_3fp", "يُقَلْنَ"},
{"ind_pass_3fs", "تُقَالُ"},
{"ind_pass_3md", "يُقَالَانِ"},
{"ind_pass_3mp", "يُقَالُونَ"},
{"ind_pass_3ms", "يُقَالُ"},
{"past_1p", "قُلْنَا"},
{"past_1s", "قُلْتُ"},
{"past_2d", "قُلْتُمَا"},
{"past_2fp", "قُلْتُنَّ"},
{"past_2fs", "قُلْتِ"},
{"past_2mp", "قُلْتُمْ"},
{"past_2ms", "قُلْتَ"},
{"past_3fd", "قَالَتَا"},
{"past_3fp", "قُلْنَ"},
{"past_3fs", "قَالَتْ"},
{"past_3md", "قَالَا"},
{"past_3mp", "قَالُوا"},
{"past_3ms", "قَالَ"},
{"past_pass_1p", "قِلْنَا"},
{"past_pass_1s", "قِلْتُ"},
{"past_pass_2d", "قِلْتُمَا"},
{"past_pass_2fp", "قِلْتُنَّ"},
{"past_pass_2fs", "قِلْتِ"},
{"past_pass_2mp", "قِلْتُمْ"},
{"past_pass_2ms", "قِلْتَ"},
{"past_pass_3fd", "قِيلَتَا"},
{"past_pass_3fp", "قِلْنَ"},
{"past_pass_3fs", "قِيلَتْ"},
{"past_pass_3md", "قِيلَا"},
{"past_pass_3mp", "قِيلُوا"},
{"past_pass_3ms", "قِيلَ"},
},
},
{
label = "ضَرَبَ ـِ (p.144، صحيح سالم)", root = "ضرب", wazn = "فعَل يفعِل",
pass = true,
forms = {
{"imp_2d", "اِضْرِبَا"},
{"imp_2fp", "اِضْرِبْنَ"},
{"imp_2fs", "اِضْرِبِي"},
{"imp_2mp", "اِضْرِبُوا"},
{"imp_2ms", "اِضْرِبْ"},
{"ind_1p", "نَضْرِبُ"},
{"ind_1s", "أَضْرِبُ"},
{"ind_2d", "تَضْرِبَانِ"},
{"ind_2fp", "تَضْرِبْنَ"},
{"ind_2fs", "تَضْرِبِينَ"},
{"ind_2mp", "تَضْرِبُونَ"},
{"ind_2ms", "تَضْرِبُ"},
{"ind_3fd", "تَضْرِبَانِ"},
{"ind_3fp", "يَضْرِبْنَ"},
{"ind_3fs", "تَضْرِبُ"},
{"ind_3md", "يَضْرِبَانِ"},
{"ind_3mp", "يَضْرِبُونَ"},
{"ind_3ms", "يَضْرِبُ"},
{"ind_pass_1p", "نُضْرَبُ"},
{"ind_pass_1s", "أُضْرَبُ"},
{"ind_pass_2d", "تُضْرَبَانِ"},
{"ind_pass_2fp", "تُضْرَبْنَ"},
{"ind_pass_2fs", "تُضْرَبِينَ"},
{"ind_pass_2mp", "تُضْرَبُونَ"},
{"ind_pass_2ms", "تُضْرَبُ"},
{"ind_pass_3fd", "تُضْرَبَانِ"},
{"ind_pass_3fp", "يُضْرَبْنَ"},
{"ind_pass_3fs", "تُضْرَبُ"},
{"ind_pass_3md", "يُضْرَبَانِ"},
{"ind_pass_3mp", "يُضْرَبُونَ"},
{"ind_pass_3ms", "يُضْرَبُ"},
{"past_1p", "ضَرَبْنَا"},
{"past_1s", "ضَرَبْتُ"},
{"past_2d", "ضَرَبْتُمَا"},
{"past_2fp", "ضَرَبْتُنَّ"},
{"past_2fs", "ضَرَبْتِ"},
{"past_2mp", "ضَرَبْتُمْ"},
{"past_2ms", "ضَرَبْتَ"},
{"past_3fd", "ضَرَبَتَا"},
{"past_3fp", "ضَرَبْنَ"},
{"past_3fs", "ضَرَبَتْ"},
{"past_3md", "ضَرَبَا"},
{"past_3mp", "ضَرَبُوا"},
{"past_3ms", "ضَرَبَ"},
{"past_pass_1p", "ضُرِبْنَا"},
{"past_pass_1s", "ضُرِبْتُ"},
{"past_pass_2d", "ضُرِبْتُمَا"},
{"past_pass_2fp", "ضُرِبْتُنَّ"},
{"past_pass_2fs", "ضُرِبْتِ"},
{"past_pass_2mp", "ضُرِبْتُمْ"},
{"past_pass_2ms", "ضُرِبْتَ"},
{"past_pass_3fd", "ضُرِبَتَا"},
{"past_pass_3fp", "ضُرِبْنَ"},
{"past_pass_3fs", "ضُرِبَتْ"},
{"past_pass_3md", "ضُرِبَا"},
{"past_pass_3mp", "ضُرِبُوا"},
{"past_pass_3ms", "ضُرِبَ"},
},
},
{
label = "رَأَسَ ـِ (p.153، مهموز العين)", root = "رأس", wazn = "فعَل يفعِل",
pass = true,
forms = {
{"imp_2d", "اِرْئِسَا"},
{"imp_2fp", "اِرْئِسْنَ"},
{"imp_2fs", "اِرْئِسِي"},
{"imp_2mp", "اِرْئِسُوا"},
{"imp_2ms", "اِرْئِسْ"},
{"ind_1p", "نَرْئِسُ"},
{"ind_1s", "أَرْئِسُ"},
{"ind_2d", "تَرْئِسَانِ"},
{"ind_2fp", "تَرْئِسْنَ"},
{"ind_2fs", "تَرْئِسِينَ"},
{"ind_2mp", "تَرْئِسُونَ"},
{"ind_2ms", "تَرْئِسُ"},
{"ind_3fd", "تَرْئِسَانِ"},
{"ind_3fp", "يَرْئِسْنَ"},
{"ind_3fs", "تَرْئِسُ"},
{"ind_3md", "يَرْئِسَانِ"},
{"ind_3mp", "يَرْئِسُونَ"},
{"ind_3ms", "يَرْئِسُ"},
{"ind_pass_1p", "نُرْأَسُ"},
{"ind_pass_1s", "أُرْأَسُ"},
{"ind_pass_2d", "تُرْأَسَانِ"},
{"ind_pass_2fp", "تُرْأَسْنَ"},
{"ind_pass_2fs", "تُرْأَسِينَ"},
{"ind_pass_2mp", "تُرْأَسُونَ"},
{"ind_pass_2ms", "تُرْأَسُ"},
{"ind_pass_3fd", "تُرْأَسَانِ"},
{"ind_pass_3fp", "يُرْأَسْنَ"},
{"ind_pass_3fs", "تُرْأَسُ"},
{"ind_pass_3md", "يُرْأَسَانِ"},
{"ind_pass_3mp", "يُرْأَسُونَ"},
{"ind_pass_3ms", "يُرْأَسُ"},
{"past_1p", "رَأَسْنَا"},
{"past_1s", "رَأَسْتُ"},
{"past_2d", "رَأَسْتُمَا"},
{"past_2fp", "رَأَسْتُنَّ"},
{"past_2fs", "رَأَسْتِ"},
{"past_2mp", "رَأَسْتُمْ"},
{"past_2ms", "رَأَسْتَ"},
{"past_3fd", "رَأَسَتَا"},
{"past_3fp", "رَأَسْنَ"},
{"past_3fs", "رَأَسَتْ"},
{"past_3md", "رَأَسَا"},
{"past_3mp", "رَأَسُوا"},
{"past_3ms", "رَأَسَ"},
{"past_pass_1p", "رُئِسْنَا"},
{"past_pass_1s", "رُئِسْتُ"},
{"past_pass_2d", "رُئِسْتُمَا"},
{"past_pass_2fp", "رُئِسْتُنَّ"},
{"past_pass_2fs", "رُئِسْتِ"},
{"past_pass_2mp", "رُئِسْتُمْ"},
{"past_pass_2ms", "رُئِسْتَ"},
{"past_pass_3fd", "رُئِسَتَا"},
{"past_pass_3fp", "رُئِسْنَ"},
{"past_pass_3fs", "رُئِسَتْ"},
{"past_pass_3md", "رُئِسَا"},
{"past_pass_3mp", "رُئِسُوا"},
{"past_pass_3ms", "رُئِسَ"},
},
},
}
2hf5ypbyvhum1q027zv9wggb89mwmzx
وحدة:ar-verb/testcases/1
828
241789
1159002
1158870
2026-09-10T12:39:09Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159002
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 1 من 15. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/1")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_1()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
8sw9hkrmjctrp1amsnpdvmhocyzs94p
1159060
1159002
2026-09-10T19:33:37Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159060
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 1 من 16. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/1")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_1()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
3ev75gygr5yqc1x80d8vcrwxk0poaj2
وحدة:ar-verb/testcases/بيانات/2
828
241790
1159004
1158872
2026-09-10T12:39:12Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159004
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 2 من 15.
return {
{
label = "وَصَلَ ـِ (p.155، معتل الفاء مثال)", root = "وصل", wazn = "فعَل يفعِل",
pass = true,
forms = {
{"imp_2d", "صِلَا"},
{"imp_2fp", "صِلْنَ"},
{"imp_2fs", "صِلِي"},
{"imp_2mp", "صِلُوا"},
{"imp_2ms", "صِلْ"},
{"ind_1p", "نَصِلُ"},
{"ind_1s", "أَصِلُ"},
{"ind_2d", "تَصِلَانِ"},
{"ind_2fp", "تَصِلْنَ"},
{"ind_2fs", "تَصِلِينَ"},
{"ind_2mp", "تَصِلُونَ"},
{"ind_2ms", "تَصِلُ"},
{"ind_3fd", "تَصِلَانِ"},
{"ind_3fp", "يَصِلْنَ"},
{"ind_3fs", "تَصِلُ"},
{"ind_3md", "يَصِلَانِ"},
{"ind_3mp", "يَصِلُونَ"},
{"ind_3ms", "يَصِلُ"},
{"ind_pass_1p", "نُوصَلُ"},
{"ind_pass_1s", "أُوصَلُ"},
{"ind_pass_2d", "تُوصَلَانِ"},
{"ind_pass_2fp", "تُوصَلْنَ"},
{"ind_pass_2fs", "تُوصَلِينَ"},
{"ind_pass_2mp", "تُوصَلُونَ"},
{"ind_pass_2ms", "تُوصَلُ"},
{"ind_pass_3fd", "تُوصَلَانِ"},
{"ind_pass_3fp", "يُوصَلْنَ"},
{"ind_pass_3fs", "تُوصَلُ"},
{"ind_pass_3md", "يُوصَلَانِ"},
{"ind_pass_3mp", "يُوصَلُونَ"},
{"ind_pass_3ms", "يُوصَلُ"},
{"past_1p", "وَصَلْنَا"},
{"past_1s", "وَصَلْتُ"},
{"past_2d", "وَصَلْتُمَا"},
{"past_2fp", "وَصَلْتُنَّ"},
{"past_2fs", "وَصَلْتِ"},
{"past_2mp", "وَصَلْتُمْ"},
{"past_2ms", "وَصَلْتَ"},
{"past_3fd", "وَصَلَتَا"},
{"past_3fp", "وَصَلْنَ"},
{"past_3fs", "وَصَلَتْ"},
{"past_3md", "وَصَلَا"},
{"past_3mp", "وَصَلُوا"},
{"past_3ms", "وَصَلَ"},
{"past_pass_1p", "وُصِلْنَا"},
{"past_pass_1s", "وُصِلْتُ"},
{"past_pass_2d", "وُصِلْتُمَا"},
{"past_pass_2fp", "وُصِلْتُنَّ"},
{"past_pass_2fs", "وُصِلْتِ"},
{"past_pass_2mp", "وُصِلْتُمْ"},
{"past_pass_2ms", "وُصِلْتَ"},
{"past_pass_3fd", "وُصِلَتَا"},
{"past_pass_3fp", "وُصِلْنَ"},
{"past_pass_3fs", "وُصِلَتْ"},
{"past_pass_3md", "وُصِلَا"},
{"past_pass_3mp", "وُصِلُوا"},
{"past_pass_3ms", "وُصِلَ"},
},
},
{
label = "رَمَى ـِ (p.161، ناقص يائي)", root = "رمي", wazn = "فعَل يفعِل",
pass = true,
forms = {
{"imp_2d", "اِرْمِيَا"},
{"imp_2fp", "اِرْمِينَ"},
{"imp_2fs", "اِرْمِي"},
{"imp_2mp", "اِرْمُوا"},
{"imp_2ms", "اِرْمِ"},
{"ind_1p", "نَرْمِي"},
{"ind_1s", "أَرْمِي"},
{"ind_2d", "تَرْمِيَانِ"},
{"ind_2fp", "تَرْمِينَ"},
{"ind_2fs", "تَرْمِينَ"},
{"ind_2mp", "تَرْمُونَ"},
{"ind_2ms", "تَرْمِي"},
{"ind_3fd", "تَرْمِيَانِ"},
{"ind_3fp", "يَرْمِينَ"},
{"ind_3fs", "تَرْمِي"},
{"ind_3md", "يَرْمِيَانِ"},
{"ind_3mp", "يَرْمُونَ"},
{"ind_3ms", "يَرْمِي"},
{"ind_pass_1p", "نُرْمَى"},
{"ind_pass_1s", "أُرْمَى"},
{"ind_pass_2d", "تُرْمَيَانِ"},
{"ind_pass_2fp", "تُرْمَيْنَ"},
{"ind_pass_2fs", "تُرْمَيْنَ"},
{"ind_pass_2mp", "تُرْمَوْنَ"},
{"ind_pass_2ms", "تُرْمَى"},
{"ind_pass_3fd", "تُرْمَيَانِ"},
{"ind_pass_3fp", "يُرْمَيْنَ"},
{"ind_pass_3fs", "تُرْمَى"},
{"ind_pass_3md", "يُرْمَيَانِ"},
{"ind_pass_3mp", "يُرْمَوْنَ"},
{"ind_pass_3ms", "يُرْمَى"},
{"past_1p", "رَمَيْنَا"},
{"past_1s", "رَمَيْتُ"},
{"past_2d", "رَمَيْتُمَا"},
{"past_2fp", "رَمَيْتُنَّ"},
{"past_2fs", "رَمَيْتِ"},
{"past_2mp", "رَمَيْتُمْ"},
{"past_2ms", "رَمَيْتَ"},
{"past_3fd", "رَمَتَا"},
{"past_3fp", "رَمَيْنَ"},
{"past_3fs", "رَمَتْ"},
{"past_3md", "رَمَيَا"},
{"past_3mp", "رَمَوْا"},
{"past_3ms", "رَمَى"},
{"past_pass_1p", "رُمِينَا"},
{"past_pass_1s", "رُمِيتُ"},
{"past_pass_2d", "رُمِيتُمَا"},
{"past_pass_2fp", "رُمِيتُنَّ"},
{"past_pass_2fs", "رُمِيتِ"},
{"past_pass_2mp", "رُمِيتُمْ"},
{"past_pass_2ms", "رُمِيتَ"},
{"past_pass_3fd", "رُمِيَتَا"},
{"past_pass_3fp", "رُمِينَ"},
{"past_pass_3fs", "رُمِيَتْ"},
{"past_pass_3md", "رُمِيَا"},
{"past_pass_3mp", "رُمُوا"},
{"past_pass_3ms", "رُمِيَ"},
},
},
{
label = "فَعَلَ ـَ (p.169، abstract paradigm)", root = "فعل", wazn = "فعَل يفعَل",
pass = true,
forms = {
{"imp_2d", "اِفْعَلَا"},
{"imp_2fp", "اِفْعَلْنَ"},
{"imp_2fs", "اِفْعَلِي"},
{"imp_2mp", "اِفْعَلُوا"},
{"imp_2ms", "اِفْعَلْ"},
{"ind_1p", "نَفْعَلُ"},
{"ind_1s", "أَفْعَلُ"},
{"ind_2d", "تَفْعَلَانِ"},
{"ind_2fp", "تَفْعَلْنَ"},
{"ind_2fs", "تَفْعَلِينَ"},
{"ind_2mp", "تَفْعَلُونَ"},
{"ind_2ms", "تَفْعَلُ"},
{"ind_3fd", "تَفْعَلَانِ"},
{"ind_3fp", "يَفْعَلْنَ"},
{"ind_3fs", "تَفْعَلُ"},
{"ind_3md", "يَفْعَلَانِ"},
{"ind_3mp", "يَفْعَلُونَ"},
{"ind_3ms", "يَفْعَلُ"},
{"ind_pass_1p", "نُفْعَلُ"},
{"ind_pass_1s", "أُفْعَلُ"},
{"ind_pass_2d", "تُفْعَلَانِ"},
{"ind_pass_2fp", "تُفْعَلْنَ"},
{"ind_pass_2fs", "تُفْعَلِينَ"},
{"ind_pass_2mp", "تُفْعَلُونَ"},
{"ind_pass_2ms", "تُفْعَلُ"},
{"ind_pass_3fd", "تُفْعَلَانِ"},
{"ind_pass_3fp", "يُفْعَلْنَ"},
{"ind_pass_3fs", "تُفْعَلُ"},
{"ind_pass_3md", "يُفْعَلَانِ"},
{"ind_pass_3mp", "يُفْعَلُونَ"},
{"ind_pass_3ms", "يُفْعَلُ"},
{"past_1p", "فَعَلْنَا"},
{"past_1s", "فَعَلْتُ"},
{"past_2d", "فَعَلْتُمَا"},
{"past_2fp", "فَعَلْتُنَّ"},
{"past_2fs", "فَعَلْتِ"},
{"past_2mp", "فَعَلْتُمْ"},
{"past_2ms", "فَعَلْتَ"},
{"past_3fd", "فَعَلَتَا"},
{"past_3fp", "فَعَلْنَ"},
{"past_3fs", "فَعَلَتْ"},
{"past_3md", "فَعَلَا"},
{"past_3mp", "فَعَلُوا"},
{"past_3ms", "فَعَلَ"},
{"past_pass_1p", "فُعِلْنَا"},
{"past_pass_1s", "فُعِلْتُ"},
{"past_pass_2d", "فُعِلْتُمَا"},
{"past_pass_2fp", "فُعِلْتُنَّ"},
{"past_pass_2fs", "فُعِلْتِ"},
{"past_pass_2mp", "فُعِلْتُمْ"},
{"past_pass_2ms", "فُعِلْتَ"},
{"past_pass_3fd", "فُعِلَتَا"},
{"past_pass_3fp", "فُعِلْنَ"},
{"past_pass_3fs", "فُعِلَتْ"},
{"past_pass_3md", "فُعِلَا"},
{"past_pass_3mp", "فُعِلُوا"},
{"past_pass_3ms", "فُعِلَ"},
},
},
{
label = "عَضَّ ـَ (p.173، مضاعف)", root = "عضض", wazn = "فعَل يفعَل",
pass = true,
forms = {
{"imp_2d", "عَضَّا"},
{"imp_2fp", "اِعْضَضْنَ"},
{"imp_2fs", "عَضِّي"},
{"imp_2mp", "عَضُّوا"},
{"imp_2ms", "عَضَّ"},
{"ind_1p", "نَعَضُّ"},
{"ind_1s", "أَعَضُّ"},
{"ind_2d", "تَعَضَّانِ"},
{"ind_2fp", "تَعْضَضْنَ"},
{"ind_2fs", "تَعَضِّينَ"},
{"ind_2mp", "تَعَضُّونَ"},
{"ind_2ms", "تَعَضُّ"},
{"ind_3fd", "تَعَضَّانِ"},
{"ind_3fp", "يَعْضَضْنَ"},
{"ind_3fs", "تَعَضُّ"},
{"ind_3md", "يَعَضَّانِ"},
{"ind_3mp", "يَعَضُّونَ"},
{"ind_3ms", "يَعَضُّ"},
{"ind_pass_1p", "نُعَضُّ"},
{"ind_pass_1s", "أُعَضُّ"},
{"ind_pass_2d", "تُعَضَّانِ"},
{"ind_pass_2fp", "تُعْضَضْنَ"},
{"ind_pass_2fs", "تُعَضِّينَ"},
{"ind_pass_2mp", "تُعَضُّونَ"},
{"ind_pass_2ms", "تُعَضُّ"},
{"ind_pass_3fd", "تُعَضَّانِ"},
{"ind_pass_3fp", "يُعْضَضْنَ"},
{"ind_pass_3fs", "تُعَضُّ"},
{"ind_pass_3md", "يُعَضَّانِ"},
{"ind_pass_3mp", "يُعَضُّونَ"},
{"ind_pass_3ms", "يُعَضُّ"},
{"past_1p", "عَضَضْنَا"},
{"past_1s", "عَضَضْتُ"},
{"past_2d", "عَضَضْتُمَا"},
{"past_2fp", "عَضَضْتُنَّ"},
{"past_2fs", "عَضَضْتِ"},
{"past_2mp", "عَضَضْتُمْ"},
{"past_2ms", "عَضَضْتَ"},
{"past_3fd", "عَضَّتَا"},
{"past_3fp", "عَضَضْنَ"},
{"past_3fs", "عَضَّتْ"},
{"past_3md", "عَضَّا"},
{"past_3mp", "عَضُّوا"},
{"past_3ms", "عَضَّ"},
{"past_pass_1p", "عُضِضْنَا"},
{"past_pass_1s", "عُضِضْتُ"},
{"past_pass_2d", "عُضِضْتُمَا"},
{"past_pass_2fp", "عُضِضْتُنَّ"},
{"past_pass_2fs", "عُضِضْتِ"},
{"past_pass_2mp", "عُضِضْتُمْ"},
{"past_pass_2ms", "عُضِضْتَ"},
{"past_pass_3fd", "عُضَّتَا"},
{"past_pass_3fp", "عُضِضْنَ"},
{"past_pass_3fs", "عُضَّتْ"},
{"past_pass_3md", "عُضَّا"},
{"past_pass_3mp", "عُضُّوا"},
{"past_pass_3ms", "عُضَّ"},
},
},
{
label = "أَلَهَ ـَ (p.175، مهموز الفاء)", root = "أله", wazn = "فعَل يفعَل",
pass = true,
forms = {
{"imp_2d", "اِئْلَهَا"},
{"imp_2fp", "اِئْلَهْنَ"},
{"imp_2fs", "اِئْلَهِي"},
{"imp_2mp", "اِئْلَهُوا"},
{"imp_2ms", "اِئْلَهْ"},
{"ind_1p", "نَأْلَهُ"},
{"ind_1s", "آلَهُ"},
{"ind_2d", "تَأْلَهَانِ"},
{"ind_2fp", "تَأْلَهْنَ"},
{"ind_2fs", "تَأْلَهِينَ"},
{"ind_2mp", "تَأْلَهُونَ"},
{"ind_2ms", "تَأْلَهُ"},
{"ind_3fd", "تَأْلَهَانِ"},
{"ind_3fp", "يَأْلَهْنَ"},
{"ind_3fs", "تَأْلَهُ"},
{"ind_3md", "يَأْلَهَانِ"},
{"ind_3mp", "يَأْلَهُونَ"},
{"ind_3ms", "يَأْلَهُ"},
{"ind_pass_1p", "نُؤْلَهُ"},
{"ind_pass_1s", "أُولَهُ"},
{"ind_pass_2d", "تُؤْلَهَانِ"},
{"ind_pass_2fp", "تُؤْلَهْنَ"},
{"ind_pass_2fs", "تُؤْلَهِينَ"},
{"ind_pass_2mp", "تُؤْلَهُونَ"},
{"ind_pass_2ms", "تُؤْلَهُ"},
{"ind_pass_3fd", "تُؤْلَهَانِ"},
{"ind_pass_3fp", "يُؤْلَهْنَ"},
{"ind_pass_3fs", "تُؤْلَهُ"},
{"ind_pass_3md", "يُؤْلَهَانِ"},
{"ind_pass_3mp", "يُؤْلَهُونَ"},
{"ind_pass_3ms", "يُؤْلَهُ"},
{"past_1p", "أَلَهْنَا"},
{"past_1s", "أَلَهْتُ"},
{"past_2d", "أَلَهْتُمَا"},
{"past_2fp", "أَلَهْتُنَّ"},
{"past_2fs", "أَلَهْتِ"},
{"past_2mp", "أَلَهْتُمْ"},
{"past_2ms", "أَلَهْتَ"},
{"past_3fd", "أَلَهَتَا"},
{"past_3fp", "أَلَهْنَ"},
{"past_3fs", "أَلَهَتْ"},
{"past_3md", "أَلَهَا"},
{"past_3mp", "أَلَهُوا"},
{"past_3ms", "أَلَهَ"},
{"past_pass_1p", "أُلِهْنَا"},
{"past_pass_1s", "أُلِهْتُ"},
{"past_pass_2d", "أُلِهْتُمَا"},
{"past_pass_2fp", "أُلِهْتُنَّ"},
{"past_pass_2fs", "أُلِهْتِ"},
{"past_pass_2mp", "أُلِهْتُمْ"},
{"past_pass_2ms", "أُلِهْتَ"},
{"past_pass_3fd", "أُلِهَتَا"},
{"past_pass_3fp", "أُلِهْنَ"},
{"past_pass_3fs", "أُلِهَتْ"},
{"past_pass_3md", "أُلِهَا"},
{"past_pass_3mp", "أُلِهُوا"},
{"past_pass_3ms", "أُلِهَ"},
},
},
{
label = "باعَ ـِ (p.158، أجوف يائي)", root = "بيع", wazn = "فعَل يفعِل",
pass = true,
forms = {
{"imp_2d", "بِيعَا"},
{"imp_2fp", "بِعْنَ"},
{"imp_2fs", "بِيعِي"},
{"imp_2mp", "بِيعُوا"},
{"imp_2ms", "بِعْ"},
{"ind_1p", "نَبِيعُ"},
{"ind_1s", "أَبِيعُ"},
{"ind_2d", "تَبِيعَانِ"},
{"ind_2fp", "تَبِعْنَ"},
{"ind_2fs", "تَبِيعِينَ"},
{"ind_2mp", "تَبِيعُونَ"},
{"ind_2ms", "تَبِيعُ"},
{"ind_3fd", "تَبِيعَانِ"},
{"ind_3fp", "يَبِعْنَ"},
{"ind_3fs", "تَبِيعُ"},
{"ind_3md", "يَبِيعَانِ"},
{"ind_3mp", "يَبِيعُونَ"},
{"ind_3ms", "يَبِيعُ"},
{"ind_pass_1p", "نُبَاعُ"},
{"ind_pass_1s", "أُبَاعُ"},
{"ind_pass_2d", "تُبَاعَانِ"},
{"ind_pass_2fp", "تُبَعْنَ"},
{"ind_pass_2fs", "تُبَاعِينَ"},
{"ind_pass_2mp", "تُبَاعُونَ"},
{"ind_pass_2ms", "تُبَاعُ"},
{"ind_pass_3fd", "تُبَاعَانِ"},
{"ind_pass_3fp", "يُبَعْنَ"},
{"ind_pass_3fs", "تُبَاعُ"},
{"ind_pass_3md", "يُبَاعَانِ"},
{"ind_pass_3mp", "يُبَاعُونَ"},
{"ind_pass_3ms", "يُبَاعُ"},
{"past_1p", "بِعْنَا"},
{"past_1s", "بِعْتُ"},
{"past_2d", "بِعْتُمَا"},
{"past_2fp", "بِعْتُنَّ"},
{"past_2fs", "بِعْتِ"},
{"past_2mp", "بِعْتُمْ"},
{"past_2ms", "بِعْتَ"},
{"past_3fd", "بَاعَتَا"},
{"past_3fp", "بِعْنَ"},
{"past_3fs", "بَاعَتْ"},
{"past_3md", "بَاعَا"},
{"past_3mp", "بَاعُوا"},
{"past_3ms", "بَاعَ"},
{"past_pass_1p", "بُعْنَا"},
{"past_pass_1s", "بُعْتُ"},
{"past_pass_2d", "بُعْتُمَا"},
{"past_pass_2fp", "بُعْتُنَّ"},
{"past_pass_2fs", "بُعْتِ"},
{"past_pass_2mp", "بُعْتُمْ"},
{"past_pass_2ms", "بُعْتَ"},
{"past_pass_3fd", "بِيعَتَا"},
{"past_pass_3fp", "بُعْنَ"},
{"past_pass_3fs", "بِيعَتْ"},
{"past_pass_3md", "بِيعَا"},
{"past_pass_3mp", "بِيعُوا"},
{"past_pass_3ms", "بِيعَ"},
},
},
{
label = "طَوَى ـِ (p.166، لفيف مقرون)", root = "طوي", wazn = "فعَل يفعِل",
pass = true,
forms = {
{"imp_2d", "اِطْوِيَا"},
{"imp_2fp", "اِطْوِينَ"},
{"imp_2fs", "اِطْوِي"},
{"imp_2mp", "اِطْوُوا"},
{"imp_2ms", "اِطْوِ"},
{"ind_1p", "نَطْوِي"},
{"ind_1s", "أَطْوِي"},
{"ind_2d", "تَطْوِيَانِ"},
{"ind_2fp", "تَطْوِينَ"},
{"ind_2fs", "تَطْوِينَ"},
{"ind_2mp", "تَطْوُونَ"},
{"ind_2ms", "تَطْوِي"},
{"ind_3fd", "تَطْوِيَانِ"},
{"ind_3fp", "يَطْوِينَ"},
{"ind_3fs", "تَطْوِي"},
{"ind_3md", "يَطْوِيَانِ"},
{"ind_3mp", "يَطْوُونَ"},
{"ind_3ms", "يَطْوِي"},
{"ind_pass_1p", "نُطْوَى"},
{"ind_pass_1s", "أُطْوَى"},
{"ind_pass_2d", "تُطْوَيَانِ"},
{"ind_pass_2fp", "تُطْوَيْنَ"},
{"ind_pass_2fs", "تُطْوَيْنَ"},
{"ind_pass_2mp", "تُطْوَوْنَ"},
{"ind_pass_2ms", "تُطْوَى"},
{"ind_pass_3fd", "تُطْوَيَانِ"},
{"ind_pass_3fp", "يُطْوَيْنَ"},
{"ind_pass_3fs", "تُطْوَى"},
{"ind_pass_3md", "يُطْوَيَانِ"},
{"ind_pass_3mp", "يُطْوَوْنَ"},
{"ind_pass_3ms", "يُطْوَى"},
{"past_1p", "طَوَيْنَا"},
{"past_1s", "طَوَيْتُ"},
{"past_2d", "طَوَيْتُمَا"},
{"past_2fp", "طَوَيْتُنَّ"},
{"past_2fs", "طَوَيْتِ"},
{"past_2mp", "طَوَيْتُمْ"},
{"past_2ms", "طَوَيْتَ"},
{"past_3fd", "طَوَتَا"},
{"past_3fp", "طَوَيْنَ"},
{"past_3fs", "طَوَتْ"},
{"past_3md", "طَوَيَا"},
{"past_3mp", "طَوَوْا"},
{"past_3ms", "طَوَى"},
{"past_pass_1p", "طُوِينَا"},
{"past_pass_1s", "طُوِيتُ"},
{"past_pass_2d", "طُوِيتُمَا"},
{"past_pass_2fp", "طُوِيتُنَّ"},
{"past_pass_2fs", "طُوِيتِ"},
{"past_pass_2mp", "طُوِيتُمْ"},
{"past_pass_2ms", "طُوِيتَ"},
{"past_pass_3fd", "طُوِيَتَا"},
{"past_pass_3fp", "طُوِينَ"},
{"past_pass_3fs", "طُوِيَتْ"},
{"past_pass_3md", "طُوِيَا"},
{"past_pass_3mp", "طُوُوا"},
{"past_pass_3ms", "طُوِيَ"},
},
},
{
label = "سَأَلَ ـَ (p.176، مهموز العين)", root = "سأل", wazn = "فعَل يفعَل",
pass = true,
forms = {
{"imp_2d", "اِسْأَلَا"},
{"imp_2fp", "اِسْأَلْنَ"},
{"imp_2fs", "اِسْأَلِي"},
{"imp_2mp", "اِسْأَلُوا"},
{"imp_2ms", "اِسْأَلْ"},
{"ind_1p", "نَسْأَلُ"},
{"ind_1s", "أَسْأَلُ"},
{"ind_2d", "تَسْأَلَانِ"},
{"ind_2fp", "تَسْأَلْنَ"},
{"ind_2fs", "تَسْأَلِينَ"},
{"ind_2mp", "تَسْأَلُونَ"},
{"ind_2ms", "تَسْأَلُ"},
{"ind_3fd", "تَسْأَلَانِ"},
{"ind_3fp", "يَسْأَلْنَ"},
{"ind_3fs", "تَسْأَلُ"},
{"ind_3md", "يَسْأَلَانِ"},
{"ind_3mp", "يَسْأَلُونَ"},
{"ind_3ms", "يَسْأَلُ"},
{"ind_pass_1p", "نُسْأَلُ"},
{"ind_pass_1s", "أُسْأَلُ"},
{"ind_pass_2d", "تُسْأَلَانِ"},
{"ind_pass_2fp", "تُسْأَلْنَ"},
{"ind_pass_2fs", "تُسْأَلِينَ"},
{"ind_pass_2mp", "تُسْأَلُونَ"},
{"ind_pass_2ms", "تُسْأَلُ"},
{"ind_pass_3fd", "تُسْأَلَانِ"},
{"ind_pass_3fp", "يُسْأَلْنَ"},
{"ind_pass_3fs", "تُسْأَلُ"},
{"ind_pass_3md", "يُسْأَلَانِ"},
{"ind_pass_3mp", "يُسْأَلُونَ"},
{"ind_pass_3ms", "يُسْأَلُ"},
{"past_1p", "سَأَلْنَا"},
{"past_1s", "سَأَلْتُ"},
{"past_2d", "سَأَلْتُمَا"},
{"past_2fp", "سَأَلْتُنَّ"},
{"past_2fs", "سَأَلْتِ"},
{"past_2mp", "سَأَلْتُمْ"},
{"past_2ms", "سَأَلْتَ"},
{"past_3fd", "سَأَلَتَا"},
{"past_3fp", "سَأَلْنَ"},
{"past_3fs", "سَأَلَتْ"},
{"past_3md", "سَأَلَا"},
{"past_3mp", "سَأَلُوا"},
{"past_3ms", "سَأَلَ"},
{"past_pass_1p", "سُئِلْنَا"},
{"past_pass_1s", "سُئِلْتُ"},
{"past_pass_2d", "سُئِلْتُمَا"},
{"past_pass_2fp", "سُئِلْتُنَّ"},
{"past_pass_2fs", "سُئِلْتِ"},
{"past_pass_2mp", "سُئِلْتُمْ"},
{"past_pass_2ms", "سُئِلْتَ"},
{"past_pass_3fd", "سُئِلَتَا"},
{"past_pass_3fp", "سُئِلْنَ"},
{"past_pass_3fs", "سُئِلَتْ"},
{"past_pass_3md", "سُئِلَا"},
{"past_pass_3mp", "سُئِلُوا"},
{"past_pass_3ms", "سُئِلَ"},
},
},
{
label = "باتَ ـَ (p.183، أجوف يائي)", root = "بيت", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "بَاتَا"},
{"imp_2fp", "بَتْنَ"},
{"imp_2fs", "بَاتِي"},
{"imp_2mp", "بَاتُوا"},
{"imp_2ms", "بَتْ"},
{"ind_1p", "نَبَاتُ"},
{"ind_1s", "أَبَاتُ"},
{"ind_2d", "تَبَاتَانِ"},
{"ind_2fp", "تَبَتْنَ"},
{"ind_2fs", "تَبَاتِينَ"},
{"ind_2mp", "تَبَاتُونَ"},
{"ind_2ms", "تَبَاتُ"},
{"ind_3fd", "تَبَاتَانِ"},
{"ind_3fp", "يَبَتْنَ"},
{"ind_3fs", "تَبَاتُ"},
{"ind_3md", "يَبَاتَانِ"},
{"ind_3mp", "يَبَاتُونَ"},
{"ind_3ms", "يَبَاتُ"},
{"past_1p", "بِتْنَا"},
{"past_1s", "بِتُّ"},
{"past_2d", "بِتُّمَا"},
{"past_2fp", "بِتُّنَّ"},
{"past_2fs", "بِتِّ"},
{"past_2mp", "بِتُّمْ"},
{"past_2ms", "بِتَّ"},
{"past_3fd", "بَاتَتَا"},
{"past_3fp", "بِتْنَ"},
{"past_3fs", "بَاتَتْ"},
{"past_3md", "بَاتَا"},
{"past_3mp", "بَاتُوا"},
{"past_3ms", "بَاتَ"},
},
},
{
label = "سَعَى ـَ (p.186، ناقص يائي)", root = "سعي", wazn = "فعَل يفعَل",
pass = true,
forms = {
{"imp_2d", "اِسْعَيَا"},
{"imp_2fp", "اِسْعَيْنَ"},
{"imp_2fs", "اِسْعَيْ"},
{"imp_2mp", "اِسْعَوْا"},
{"imp_2ms", "اِسْعَ"},
{"ind_1p", "نَسْعَى"},
{"ind_1s", "أَسْعَى"},
{"ind_2d", "تَسْعَيَانِ"},
{"ind_2fp", "تَسْعَيْنَ"},
{"ind_2fs", "تَسْعَيْنَ"},
{"ind_2mp", "تَسْعَوْنَ"},
{"ind_2ms", "تَسْعَى"},
{"ind_3fd", "تَسْعَيَانِ"},
{"ind_3fp", "يَسْعَيْنَ"},
{"ind_3fs", "تَسْعَى"},
{"ind_3md", "يَسْعَيَانِ"},
{"ind_3mp", "يَسْعَوْنَ"},
{"ind_3ms", "يَسْعَى"},
{"ind_pass_1p", "نُسْعَى"},
{"ind_pass_1s", "أُسْعَى"},
{"ind_pass_2d", "تُسْعَيَانِ"},
{"ind_pass_2fp", "تُسْعَيْنَ"},
{"ind_pass_2fs", "تُسْعَيْنَ"},
{"ind_pass_2mp", "تُسْعَوْنَ"},
{"ind_pass_2ms", "تُسْعَى"},
{"ind_pass_3fd", "تُسْعَيَانِ"},
{"ind_pass_3fp", "يُسْعَيْنَ"},
{"ind_pass_3fs", "تُسْعَى"},
{"ind_pass_3md", "يُسْعَيَانِ"},
{"ind_pass_3mp", "يُسْعَوْنَ"},
{"ind_pass_3ms", "يُسْعَى"},
{"past_1p", "سَعَيْنَا"},
{"past_1s", "سَعَيْتُ"},
{"past_2d", "سَعَيْتُمَا"},
{"past_2fp", "سَعَيْتُنَّ"},
{"past_2fs", "سَعَيْتِ"},
{"past_2mp", "سَعَيْتُمْ"},
{"past_2ms", "سَعَيْتَ"},
{"past_3fd", "سَعَتَا"},
{"past_3fp", "سَعَيْنَ"},
{"past_3fs", "سَعَتْ"},
{"past_3md", "سَعَيَا"},
{"past_3mp", "سَعَوْا"},
{"past_3ms", "سَعَى"},
{"past_pass_1p", "سُعِينَا"},
{"past_pass_1s", "سُعِيتُ"},
{"past_pass_2d", "سُعِيتُمَا"},
{"past_pass_2fp", "سُعِيتُنَّ"},
{"past_pass_2fs", "سُعِيتِ"},
{"past_pass_2mp", "سُعِيتُمْ"},
{"past_pass_2ms", "سُعِيتَ"},
{"past_pass_3fd", "سُعِيَتَا"},
{"past_pass_3fp", "سُعِينَ"},
{"past_pass_3fs", "سُعِيَتْ"},
{"past_pass_3md", "سُعِيَا"},
{"past_pass_3mp", "سُعُوا"},
{"past_pass_3ms", "سُعِيَ"},
},
},
{
label = "كَرُمَ ـُ (p.189، صحيح سالم)", root = "كرم", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُكْرُمَا"},
{"imp_2fp", "اُكْرُمْنَ"},
{"imp_2fs", "اُكْرُمِي"},
{"imp_2mp", "اُكْرُمُوا"},
{"imp_2ms", "اُكْرُمْ"},
{"ind_1p", "نَكْرُمُ"},
{"ind_1s", "أَكْرُمُ"},
{"ind_2d", "تَكْرُمَانِ"},
{"ind_2fp", "تَكْرُمْنَ"},
{"ind_2fs", "تَكْرُمِينَ"},
{"ind_2mp", "تَكْرُمُونَ"},
{"ind_2ms", "تَكْرُمُ"},
{"ind_3fd", "تَكْرُمَانِ"},
{"ind_3fp", "يَكْرُمْنَ"},
{"ind_3fs", "تَكْرُمُ"},
{"ind_3md", "يَكْرُمَانِ"},
{"ind_3mp", "يَكْرُمُونَ"},
{"ind_3ms", "يَكْرُمُ"},
{"past_1p", "كَرُمْنَا"},
{"past_1s", "كَرُمْتُ"},
{"past_2d", "كَرُمْتُمَا"},
{"past_2fp", "كَرُمْتُنَّ"},
{"past_2fs", "كَرُمْتِ"},
{"past_2mp", "كَرُمْتُمْ"},
{"past_2ms", "كَرُمْتَ"},
{"past_3fd", "كَرُمَتَا"},
{"past_3fp", "كَرُمْنَ"},
{"past_3fs", "كَرُمَتْ"},
{"past_3md", "كَرُمَا"},
{"past_3mp", "كَرُمُوا"},
{"past_3ms", "كَرُمَ"},
},
},
{
label = "هَمَّ ـُ (p.192، مضاعف)", root = "همم", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "هُمَّا"},
{"imp_2fp", "اُهْمُمْنَ"},
{"imp_2fs", "هُمِّي"},
{"imp_2mp", "هُمُّوا"},
{"imp_2ms", "هُمَّ"},
{"ind_1p", "نَهُمُّ"},
{"ind_1s", "أَهُمُّ"},
{"ind_2d", "تَهُمَّانِ"},
{"ind_2fp", "تَهْمُمْنَ"},
{"ind_2fs", "تَهُمِّينَ"},
{"ind_2mp", "تَهُمُّونَ"},
{"ind_2ms", "تَهُمُّ"},
{"ind_3fd", "تَهُمَّانِ"},
{"ind_3fp", "يَهْمُمْنَ"},
{"ind_3fs", "تَهُمُّ"},
{"ind_3md", "يَهُمَّانِ"},
{"ind_3mp", "يَهُمُّونَ"},
{"ind_3ms", "يَهُمُّ"},
{"past_1p", "هَمُمْنَا"},
{"past_1s", "هَمُمْتُ"},
{"past_2d", "هَمُمْتُمَا"},
{"past_2fp", "هَمُمْتُنَّ"},
{"past_2fs", "هَمُمْتِ"},
{"past_2mp", "هَمُمْتُمْ"},
{"past_2ms", "هَمُمْتَ"},
{"past_3fd", "هَمَّتَا"},
{"past_3fp", "هَمُمْنَ"},
{"past_3fs", "هَمَّتْ"},
{"past_3md", "هَمَّا"},
{"past_3mp", "هَمُّوا"},
{"past_3ms", "هَمَّ"},
},
},
{
label = "أَصُلَ ـُ (p.195، مهموز الفاء)", root = "أصل", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُؤْصُلَا"},
{"imp_2fp", "اُؤْصُلْنَ"},
{"imp_2fs", "اُؤْصُلِي"},
{"imp_2mp", "اُؤْصُلُوا"},
{"imp_2ms", "اُؤْصُلْ"},
{"ind_1p", "نَأْصُلُ"},
{"ind_1s", "آصُلُ"},
{"ind_2d", "تَأْصُلَانِ"},
{"ind_2fp", "تَأْصُلْنَ"},
{"ind_2fs", "تَأْصُلِينَ"},
{"ind_2mp", "تَأْصُلُونَ"},
{"ind_2ms", "تَأْصُلُ"},
{"ind_3fd", "تَأْصُلَانِ"},
{"ind_3fp", "يَأْصُلْنَ"},
{"ind_3fs", "تَأْصُلُ"},
{"ind_3md", "يَأْصُلَانِ"},
{"ind_3mp", "يَأْصُلُونَ"},
{"ind_3ms", "يَأْصُلُ"},
{"past_1p", "أَصُلْنَا"},
{"past_1s", "أَصُلْتُ"},
{"past_2d", "أَصُلْتُمَا"},
{"past_2fp", "أَصُلْتُنَّ"},
{"past_2fs", "أَصُلْتِ"},
{"past_2mp", "أَصُلْتُمْ"},
{"past_2ms", "أَصُلْتَ"},
{"past_3fd", "أَصُلَتَا"},
{"past_3fp", "أَصُلْنَ"},
{"past_3fs", "أَصُلَتْ"},
{"past_3md", "أَصُلَا"},
{"past_3mp", "أَصُلُوا"},
{"past_3ms", "أَصُلَ"},
},
},
{
label = "جَرُؤَ ـُ (p.199، مهموز اللام)", root = "جرأ", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُجْرُؤَا"},
{"imp_2fp", "اُجْرُؤْنَ"},
{"imp_2fs", "اُجْرُئِي"},
{"imp_2mp", "اُجْرُؤُوا"},
{"imp_2ms", "اُجْرُؤْ"},
{"ind_1p", "نَجْرُؤُ"},
{"ind_1s", "أَجْرُؤُ"},
{"ind_2d", "تَجْرُؤَانِ"},
{"ind_2fp", "تَجْرُؤْنَ"},
{"ind_2fs", "تَجْرُئِينَ"},
{"ind_2mp", "تَجْرُؤُونَ"},
{"ind_2ms", "تَجْرُؤُ"},
{"ind_3fd", "تَجْرُؤَانِ"},
{"ind_3fp", "يَجْرُؤْنَ"},
{"ind_3fs", "تَجْرُؤُ"},
{"ind_3md", "يَجْرُؤَانِ"},
{"ind_3mp", "يَجْرُؤُونَ"},
{"ind_3ms", "يَجْرُؤُ"},
{"past_1p", "جَرُؤْنَا"},
{"past_1s", "جَرُؤْتُ"},
{"past_2d", "جَرُؤْتُمَا"},
{"past_2fp", "جَرُؤْتُنَّ"},
{"past_2fs", "جَرُؤْتِ"},
{"past_2mp", "جَرُؤْتُمْ"},
{"past_2ms", "جَرُؤْتَ"},
{"past_3fd", "جَرُؤَتَا"},
{"past_3fp", "جَرُؤْنَ"},
{"past_3fs", "جَرُؤَتْ"},
{"past_3md", "جَرُؤَا"},
{"past_3mp", "جَرُؤُوا"},
{"past_3ms", "جَرُؤَ"},
},
},
{
label = "يَسُرَ ـُ (p.201، معتل الفاء مثال)", root = "يسر", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُوسُرَا"},
{"imp_2fp", "اُوسُرْنَ"},
{"imp_2fs", "اُوسُرِي"},
{"imp_2mp", "اُوسُرُوا"},
{"imp_2ms", "اُوسُرْ"},
{"ind_1p", "نَيْسُرُ"},
{"ind_1s", "أَيْسُرُ"},
{"ind_2d", "تَيْسُرَانِ"},
{"ind_2fp", "تَيْسُرْنَ"},
{"ind_2fs", "تَيْسُرِينَ"},
{"ind_2mp", "تَيْسُرُونَ"},
{"ind_2ms", "تَيْسُرُ"},
{"ind_3fd", "تَيْسُرَانِ"},
{"ind_3fp", "يَيْسُرْنَ"},
{"ind_3fs", "تَيْسُرُ"},
{"ind_3md", "يَيْسُرَانِ"},
{"ind_3mp", "يَيْسُرُونَ"},
{"ind_3ms", "يَيْسُرُ"},
{"past_1p", "يَسُرْنَا"},
{"past_1s", "يَسُرْتُ"},
{"past_2d", "يَسُرْتُمَا"},
{"past_2fp", "يَسُرْتُنَّ"},
{"past_2fs", "يَسُرْتِ"},
{"past_2mp", "يَسُرْتُمْ"},
{"past_2ms", "يَسُرْتَ"},
{"past_3fd", "يَسُرَتَا"},
{"past_3fp", "يَسُرْنَ"},
{"past_3fs", "يَسُرَتْ"},
{"past_3md", "يَسُرَا"},
{"past_3mp", "يَسُرُوا"},
{"past_3ms", "يَسُرَ"},
},
},
{
label = "سَهُوَ ـُ (p.204، ناقص واوي)", root = "سهو", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُسْهُوَا"},
{"imp_2fp", "اُسْهُونَ"},
{"imp_2fs", "اُسْهُوِي"},
{"imp_2mp", "اُسْهُوا"},
{"imp_2ms", "اُسْهُ"},
{"ind_1p", "نَسْهُو"},
{"ind_1s", "أَسْهُو"},
{"ind_2d", "تَسْهُوَانِ"},
{"ind_2fp", "تَسْهُونَ"},
{"ind_2fs", "تَسْهُوِينَ"},
{"ind_2mp", "تَسْهُونَ"},
{"ind_2ms", "تَسْهُو"},
{"ind_3fd", "تَسْهُوَانِ"},
{"ind_3fp", "يَسْهُونَ"},
{"ind_3fs", "تَسْهُو"},
{"ind_3md", "يَسْهُوَانِ"},
{"ind_3mp", "يَسْهُونَ"},
{"ind_3ms", "يَسْهُو"},
{"past_1p", "سَهُونَا"},
{"past_1s", "سَهُوتُ"},
{"past_2d", "سَهُوتُمَا"},
{"past_2fp", "سَهُوتُنَّ"},
{"past_2fs", "سَهُوتِ"},
{"past_2mp", "سَهُوتُمْ"},
{"past_2ms", "سَهُوتَ"},
{"past_3fd", "سَهُوَتَا"},
{"past_3fp", "سَهُونَ"},
{"past_3fs", "سَهُوَتْ"},
{"past_3md", "سَهُوَا"},
{"past_3mp", "سَهُوا"},
{"past_3ms", "سَهُوَ"},
},
},
{
label = "عَلِمَ ـَ (p.206، صحيح سالم)", root = "علم", wazn = "فعِل يفعَل",
pass = true,
forms = {
{"imp_2d", "اِعْلَمَا"},
{"imp_2fp", "اِعْلَمْنَ"},
{"imp_2fs", "اِعْلَمِي"},
{"imp_2mp", "اِعْلَمُوا"},
{"imp_2ms", "اِعْلَمْ"},
{"ind_1p", "نَعْلَمُ"},
{"ind_1s", "أَعْلَمُ"},
{"ind_2d", "تَعْلَمَانِ"},
{"ind_2fp", "تَعْلَمْنَ"},
{"ind_2fs", "تَعْلَمِينَ"},
{"ind_2mp", "تَعْلَمُونَ"},
{"ind_2ms", "تَعْلَمُ"},
{"ind_3fd", "تَعْلَمَانِ"},
{"ind_3fp", "يَعْلَمْنَ"},
{"ind_3fs", "تَعْلَمُ"},
{"ind_3md", "يَعْلَمَانِ"},
{"ind_3mp", "يَعْلَمُونَ"},
{"ind_3ms", "يَعْلَمُ"},
{"ind_pass_1p", "نُعْلَمُ"},
{"ind_pass_1s", "أُعْلَمُ"},
{"ind_pass_2d", "تُعْلَمَانِ"},
{"ind_pass_2fp", "تُعْلَمْنَ"},
{"ind_pass_2fs", "تُعْلَمِينَ"},
{"ind_pass_2mp", "تُعْلَمُونَ"},
{"ind_pass_2ms", "تُعْلَمُ"},
{"ind_pass_3fd", "تُعْلَمَانِ"},
{"ind_pass_3fp", "يُعْلَمْنَ"},
{"ind_pass_3fs", "تُعْلَمُ"},
{"ind_pass_3md", "يُعْلَمَانِ"},
{"ind_pass_3mp", "يُعْلَمُونَ"},
{"ind_pass_3ms", "يُعْلَمُ"},
{"past_1p", "عَلِمْنَا"},
{"past_1s", "عَلِمْتُ"},
{"past_2d", "عَلِمْتُمَا"},
{"past_2fp", "عَلِمْتُنَّ"},
{"past_2fs", "عَلِمْتِ"},
{"past_2mp", "عَلِمْتُمْ"},
{"past_2ms", "عَلِمْتَ"},
{"past_3fd", "عَلِمَتَا"},
{"past_3fp", "عَلِمْنَ"},
{"past_3fs", "عَلِمَتْ"},
{"past_3md", "عَلِمَا"},
{"past_3mp", "عَلِمُوا"},
{"past_3ms", "عَلِمَ"},
{"past_pass_1p", "عُلِمْنَا"},
{"past_pass_1s", "عُلِمْتُ"},
{"past_pass_2d", "عُلِمْتُمَا"},
{"past_pass_2fp", "عُلِمْتُنَّ"},
{"past_pass_2fs", "عُلِمْتِ"},
{"past_pass_2mp", "عُلِمْتُمْ"},
{"past_pass_2ms", "عُلِمْتَ"},
{"past_pass_3fd", "عُلِمَتَا"},
{"past_pass_3fp", "عُلِمْنَ"},
{"past_pass_3fs", "عُلِمَتْ"},
{"past_pass_3md", "عُلِمَا"},
{"past_pass_3mp", "عُلِمُوا"},
{"past_pass_3ms", "عُلِمَ"},
},
},
{
label = "ظَلَّ ـَ (p.210، مضاعف)", root = "ظلل", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "ظَلَّا"},
{"imp_2fp", "اِظْلَلْنَ"},
{"imp_2fs", "ظَلِّي"},
{"imp_2mp", "ظَلُّوا"},
{"imp_2ms", "ظَلَّ"},
{"ind_1p", "نَظَلُّ"},
{"ind_1s", "أَظَلُّ"},
{"ind_2d", "تَظَلَّانِ"},
{"ind_2fp", "تَظْلَلْنَ"},
{"ind_2fs", "تَظَلِّينَ"},
{"ind_2mp", "تَظَلُّونَ"},
{"ind_2ms", "تَظَلُّ"},
{"ind_3fd", "تَظَلَّانِ"},
{"ind_3fp", "يَظْلَلْنَ"},
{"ind_3fs", "تَظَلُّ"},
{"ind_3md", "يَظَلَّانِ"},
{"ind_3mp", "يَظَلُّونَ"},
{"ind_3ms", "يَظَلُّ"},
{"past_1p", "ظَلِلْنَا"},
{"past_1s", "ظَلِلْتُ"},
{"past_2d", "ظَلِلْتُمَا"},
{"past_2fp", "ظَلِلْتُنَّ"},
{"past_2fs", "ظَلِلْتِ"},
{"past_2mp", "ظَلِلْتُمْ"},
{"past_2ms", "ظَلِلْتَ"},
{"past_3fd", "ظَلَّتَا"},
{"past_3fp", "ظَلِلْنَ"},
{"past_3fs", "ظَلَّتْ"},
{"past_3md", "ظَلَّا"},
{"past_3mp", "ظَلُّوا"},
{"past_3ms", "ظَلَّ"},
},
},
{
label = "أَلِفَ ـَ (p.213، مهموز الفاء)", root = "ألف", wazn = "فعِل يفعَل",
pass = true,
forms = {
{"imp_2d", "اِئْلَفَا"},
{"imp_2fp", "اِئْلَفْنَ"},
{"imp_2fs", "اِئْلَفِي"},
{"imp_2mp", "اِئْلَفُوا"},
{"imp_2ms", "اِئْلَفْ"},
{"ind_1p", "نَأْلَفُ"},
{"ind_1s", "آلَفُ"},
{"ind_2d", "تَأْلَفَانِ"},
{"ind_2fp", "تَأْلَفْنَ"},
{"ind_2fs", "تَأْلَفِينَ"},
{"ind_2mp", "تَأْلَفُونَ"},
{"ind_2ms", "تَأْلَفُ"},
{"ind_3fd", "تَأْلَفَانِ"},
{"ind_3fp", "يَأْلَفْنَ"},
{"ind_3fs", "تَأْلَفُ"},
{"ind_3md", "يَأْلَفَانِ"},
{"ind_3mp", "يَأْلَفُونَ"},
{"ind_3ms", "يَأْلَفُ"},
{"ind_pass_1p", "نُؤْلَفُ"},
{"ind_pass_1s", "أُولَفُ"},
{"ind_pass_2d", "تُؤْلَفَانِ"},
{"ind_pass_2fp", "تُؤْلَفْنَ"},
{"ind_pass_2fs", "تُؤْلَفِينَ"},
{"ind_pass_2mp", "تُؤْلَفُونَ"},
{"ind_pass_2ms", "تُؤْلَفُ"},
{"ind_pass_3fd", "تُؤْلَفَانِ"},
{"ind_pass_3fp", "يُؤْلَفْنَ"},
{"ind_pass_3fs", "تُؤْلَفُ"},
{"ind_pass_3md", "يُؤْلَفَانِ"},
{"ind_pass_3mp", "يُؤْلَفُونَ"},
{"ind_pass_3ms", "يُؤْلَفُ"},
{"past_1p", "أَلِفْنَا"},
{"past_1s", "أَلِفْتُ"},
{"past_2d", "أَلِفْتُمَا"},
{"past_2fp", "أَلِفْتُنَّ"},
{"past_2fs", "أَلِفْتِ"},
{"past_2mp", "أَلِفْتُمْ"},
{"past_2ms", "أَلِفْتَ"},
{"past_3fd", "أَلِفَتَا"},
{"past_3fp", "أَلِفْنَ"},
{"past_3fs", "أَلِفَتْ"},
{"past_3md", "أَلِفَا"},
{"past_3mp", "أَلِفُوا"},
{"past_3ms", "أَلِفَ"},
{"past_pass_1p", "أُلِفْنَا"},
{"past_pass_1s", "أُلِفْتُ"},
{"past_pass_2d", "أُلِفْتُمَا"},
{"past_pass_2fp", "أُلِفْتُنَّ"},
{"past_pass_2fs", "أُلِفْتِ"},
{"past_pass_2mp", "أُلِفْتُمْ"},
{"past_pass_2ms", "أُلِفْتَ"},
{"past_pass_3fd", "أُلِفَتَا"},
{"past_pass_3fp", "أُلِفْنَ"},
{"past_pass_3fs", "أُلِفَتْ"},
{"past_pass_3md", "أُلِفَا"},
{"past_pass_3mp", "أُلِفُوا"},
{"past_pass_3ms", "أُلِفَ"},
},
},
{
label = "بَئِسَ ـَ (p.216، مهموز العين)", root = "بأس", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِبْأَسَا"},
{"imp_2fp", "اِبْأَسْنَ"},
{"imp_2fs", "اِبْأَسِي"},
{"imp_2mp", "اِبْأَسُوا"},
{"imp_2ms", "اِبْأَسْ"},
{"ind_1p", "نَبْأَسُ"},
{"ind_1s", "أَبْأَسُ"},
{"ind_2d", "تَبْأَسَانِ"},
{"ind_2fp", "تَبْأَسْنَ"},
{"ind_2fs", "تَبْأَسِينَ"},
{"ind_2mp", "تَبْأَسُونَ"},
{"ind_2ms", "تَبْأَسُ"},
{"ind_3fd", "تَبْأَسَانِ"},
{"ind_3fp", "يَبْأَسْنَ"},
{"ind_3fs", "تَبْأَسُ"},
{"ind_3md", "يَبْأَسَانِ"},
{"ind_3mp", "يَبْأَسُونَ"},
{"ind_3ms", "يَبْأَسُ"},
{"past_1p", "بَئِسْنَا"},
{"past_1s", "بَئِسْتُ"},
{"past_2d", "بَئِسْتُمَا"},
{"past_2fp", "بَئِسْتُنَّ"},
{"past_2fs", "بَئِسْتِ"},
{"past_2mp", "بَئِسْتُمْ"},
{"past_2ms", "بَئِسْتَ"},
{"past_3fd", "بَئِسَتَا"},
{"past_3fp", "بَئِسْنَ"},
{"past_3fs", "بَئِسَتْ"},
{"past_3md", "بَئِسَا"},
{"past_3mp", "بَئِسُوا"},
{"past_3ms", "بَئِسَ"},
},
},
{
label = "خَطِئَ ـَ (p.219، مهموز اللام)", root = "خطأ", wazn = "فعِل يفعَل",
pass = true,
forms = {
{"imp_2d", "اِخْطَآ"},
{"imp_2fp", "اِخْطَأْنَ"},
{"imp_2fs", "اِخْطَئِي"},
{"imp_2mp", "اِخْطَؤُوا"},
{"imp_2ms", "اِخْطَأْ"},
{"ind_1p", "نَخْطَأُ"},
{"ind_1s", "أَخْطَأُ"},
{"ind_2d", "تَخْطَآنِ"},
{"ind_2fp", "تَخْطَأْنَ"},
{"ind_2fs", "تَخْطَئِينَ"},
{"ind_2mp", "تَخْطَؤُونَ"},
{"ind_2ms", "تَخْطَأُ"},
{"ind_3fd", "تَخْطَآنِ"},
{"ind_3fp", "يَخْطَأْنَ"},
{"ind_3fs", "تَخْطَأُ"},
{"ind_3md", "يَخْطَآنِ"},
{"ind_3mp", "يَخْطَؤُونَ"},
{"ind_3ms", "يَخْطَأُ"},
{"ind_pass_1p", "نُخْطَأُ"},
{"ind_pass_1s", "أُخْطَأُ"},
{"ind_pass_2d", "تُخْطَآنِ"},
{"ind_pass_2fp", "تُخْطَأْنَ"},
{"ind_pass_2fs", "تُخْطَئِينَ"},
{"ind_pass_2mp", "تُخْطَؤُونَ"},
{"ind_pass_2ms", "تُخْطَأُ"},
{"ind_pass_3fd", "تُخْطَآنِ"},
{"ind_pass_3fp", "يُخْطَأْنَ"},
{"ind_pass_3fs", "تُخْطَأُ"},
{"ind_pass_3md", "يُخْطَآنِ"},
{"ind_pass_3mp", "يُخْطَؤُونَ"},
{"ind_pass_3ms", "يُخْطَأُ"},
{"past_1p", "خَطِئْنَا"},
{"past_1s", "خَطِئْتُ"},
{"past_2d", "خَطِئْتُمَا"},
{"past_2fp", "خَطِئْتُنَّ"},
{"past_2fs", "خَطِئْتِ"},
{"past_2mp", "خَطِئْتُمْ"},
{"past_2ms", "خَطِئْتَ"},
{"past_3fd", "خَطِئَتَا"},
{"past_3fp", "خَطِئْنَ"},
{"past_3fs", "خَطِئَتْ"},
{"past_3md", "خَطِئَا"},
{"past_3mp", "خَطِئُوا"},
{"past_3ms", "خَطِئَ"},
{"past_pass_1p", "خُطِئْنَا"},
{"past_pass_1s", "خُطِئْتُ"},
{"past_pass_2d", "خُطِئْتُمَا"},
{"past_pass_2fp", "خُطِئْتُنَّ"},
{"past_pass_2fs", "خُطِئْتِ"},
{"past_pass_2mp", "خُطِئْتُمْ"},
{"past_pass_2ms", "خُطِئْتَ"},
{"past_pass_3fd", "خُطِئَتَا"},
{"past_pass_3fp", "خُطِئْنَ"},
{"past_pass_3fs", "خُطِئَتْ"},
{"past_pass_3md", "خُطِئَا"},
{"past_pass_3mp", "خُطِئُوا"},
{"past_pass_3ms", "خُطِئَ"},
},
},
{
label = "يَقِظَ ـَ (p.222، معتل الفاء مثال)", root = "يقظ", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِيقَظَا"},
{"imp_2fp", "اِيقَظْنَ"},
{"imp_2fs", "اِيقَظِي"},
{"imp_2mp", "اِيقَظُوا"},
{"imp_2ms", "اِيقَظْ"},
{"ind_1p", "نَيْقَظُ"},
{"ind_1s", "أَيْقَظُ"},
{"ind_2d", "تَيْقَظَانِ"},
{"ind_2fp", "تَيْقَظْنَ"},
{"ind_2fs", "تَيْقَظِينَ"},
{"ind_2mp", "تَيْقَظُونَ"},
{"ind_2ms", "تَيْقَظُ"},
{"ind_3fd", "تَيْقَظَانِ"},
{"ind_3fp", "يَيْقَظْنَ"},
{"ind_3fs", "تَيْقَظُ"},
{"ind_3md", "يَيْقَظَانِ"},
{"ind_3mp", "يَيْقَظُونَ"},
{"ind_3ms", "يَيْقَظُ"},
{"past_1p", "يَقِظْنَا"},
{"past_1s", "يَقِظْتُ"},
{"past_2d", "يَقِظْتُمَا"},
{"past_2fp", "يَقِظْتُنَّ"},
{"past_2fs", "يَقِظْتِ"},
{"past_2mp", "يَقِظْتُمْ"},
{"past_2ms", "يَقِظْتَ"},
{"past_3fd", "يَقِظَتَا"},
{"past_3fp", "يَقِظْنَ"},
{"past_3fs", "يَقِظَتْ"},
{"past_3md", "يَقِظَا"},
{"past_3mp", "يَقِظُوا"},
{"past_3ms", "يَقِظَ"},
},
},
{
label = "وَنِيَ ـَ (p.230، لفيف مفروق)", root = "وني", wazn = "فعِل يفعَل",
pass = true,
forms = {
{"imp_2d", "اِوْنَيَا"},
{"imp_2fp", "اِوْنَيْنَ"},
{"imp_2mp", "اِوْنَوْا"},
{"imp_2ms", "اِوْنَ"},
{"ind_1p", "نَوْنَى"},
{"ind_1s", "أَوْنَى"},
{"ind_2d", "تَوْنَيَانِ"},
{"ind_2fp", "تَوْنَيْنَ"},
{"ind_2fs", "تَوْنَيْنَ"},
{"ind_2mp", "تَوْنَوْنَ"},
{"ind_2ms", "تَوْنَى"},
{"ind_3fd", "تَوْنَيَانِ"},
{"ind_3fp", "يَوْنَيْنَ"},
{"ind_3fs", "تَوْنَى"},
{"ind_3md", "يَوْنَيَانِ"},
{"ind_3mp", "يَوْنَوْنَ"},
{"ind_3ms", "يَوْنَى"},
{"ind_pass_1p", "نُونَى"},
{"ind_pass_1s", "أُونَى"},
{"ind_pass_2d", "تُونَيَانِ"},
{"ind_pass_2fp", "تُونَيْنَ"},
{"ind_pass_2fs", "تُونَيْنَ"},
{"ind_pass_2mp", "تُونَوْنَ"},
{"ind_pass_2ms", "تُونَى"},
{"ind_pass_3fd", "تُونَيَانِ"},
{"ind_pass_3fp", "يُونَيْنَ"},
{"ind_pass_3fs", "تُونَى"},
{"ind_pass_3md", "يُونَيَانِ"},
{"ind_pass_3mp", "يُونَوْنَ"},
{"ind_pass_3ms", "يُونَى"},
{"past_1p", "وَنِينَا"},
{"past_1s", "وَنِيتُ"},
{"past_2d", "وَنِيتُمَا"},
{"past_2fp", "وَنِيتُنَّ"},
{"past_2fs", "وَنِيتِ"},
{"past_2mp", "وَنِيتُمْ"},
{"past_2ms", "وَنِيتَ"},
{"past_3fd", "وَنِيَتَا"},
{"past_3fp", "وَنِينَ"},
{"past_3fs", "وَنِيَتْ"},
{"past_3md", "وَنِيَا"},
{"past_3mp", "وَنُوا"},
{"past_3ms", "وَنِيَ"},
{"past_pass_1p", "وُنِينَا"},
{"past_pass_1s", "وُنِيتُ"},
{"past_pass_2d", "وُنِيتُمَا"},
{"past_pass_2fp", "وُنِيتُنَّ"},
{"past_pass_2fs", "وُنِيتِ"},
{"past_pass_2mp", "وُنِيتُمْ"},
{"past_pass_2ms", "وُنِيتَ"},
{"past_pass_3fd", "وُنِيَتَا"},
{"past_pass_3fp", "وُنِينَ"},
{"past_pass_3fs", "وُنِيَتْ"},
{"past_pass_3md", "وُنِيَا"},
{"past_pass_3mp", "وُنُوا"},
{"past_pass_3ms", "وُنِيَ"},
},
},
{
label = "وَثِقَ ـِ (p.236، معتل الفاء مثال)", root = "وثق", wazn = "فعِل يفعِل",
pass = true,
forms = {
{"imp_2d", "ثِقَا"},
{"imp_2fp", "ثِقْنَ"},
{"imp_2fs", "ثِقِي"},
{"imp_2mp", "ثِقُوا"},
{"imp_2ms", "ثِقْ"},
{"ind_1p", "نَثِقُ"},
{"ind_1s", "أَثِقُ"},
{"ind_2d", "تَثِقَانِ"},
{"ind_2fp", "تَثِقْنَ"},
{"ind_2fs", "تَثِقِينَ"},
{"ind_2mp", "تَثِقُونَ"},
{"ind_2ms", "تَثِقُ"},
{"ind_3fd", "تَثِقَانِ"},
{"ind_3fp", "يَثِقْنَ"},
{"ind_3fs", "تَثِقُ"},
{"ind_3md", "يَثِقَانِ"},
{"ind_3mp", "يَثِقُونَ"},
{"ind_3ms", "يَثِقُ"},
{"ind_pass_1p", "نُوثَقُ"},
{"ind_pass_1s", "أُوثَقُ"},
{"ind_pass_2d", "تُوثَقَانِ"},
{"ind_pass_2fp", "تُوثَقْنَ"},
{"ind_pass_2fs", "تُوثَقِينَ"},
{"ind_pass_2mp", "تُوثَقُونَ"},
{"ind_pass_2ms", "تُوثَقُ"},
{"ind_pass_3fd", "تُوثَقَانِ"},
{"ind_pass_3fp", "يُوثَقْنَ"},
{"ind_pass_3fs", "تُوثَقُ"},
{"ind_pass_3md", "يُوثَقَانِ"},
{"ind_pass_3mp", "يُوثَقُونَ"},
{"ind_pass_3ms", "يُوثَقُ"},
{"past_1p", "وَثِقْنَا"},
{"past_1s", "وَثِقْتُ"},
{"past_2d", "وَثِقْتُمَا"},
{"past_2fp", "وَثِقْتُنَّ"},
{"past_2fs", "وَثِقْتِ"},
{"past_2mp", "وَثِقْتُمْ"},
{"past_2ms", "وَثِقْتَ"},
{"past_3fd", "وَثِقَتَا"},
{"past_3fp", "وَثِقْنَ"},
{"past_3fs", "وَثِقَتْ"},
{"past_3md", "وَثِقَا"},
{"past_3mp", "وَثِقُوا"},
{"past_3ms", "وَثِقَ"},
{"past_pass_1p", "وُثِقْنَا"},
{"past_pass_1s", "وُثِقْتُ"},
{"past_pass_2d", "وُثِقْتُمَا"},
{"past_pass_2fp", "وُثِقْتُنَّ"},
{"past_pass_2fs", "وُثِقْتِ"},
{"past_pass_2mp", "وُثِقْتُمْ"},
{"past_pass_2ms", "وُثِقْتَ"},
{"past_pass_3fd", "وُثِقَتَا"},
{"past_pass_3fp", "وُثِقْنَ"},
{"past_pass_3fs", "وُثِقَتْ"},
{"past_pass_3md", "وُثِقَا"},
{"past_pass_3mp", "وُثِقُوا"},
{"past_pass_3ms", "وُثِقَ"},
},
},
{
label = "أَفْعَلَ (p.273، الوزن الرابع)", root = "فعل", wazn = "أفعل",
pass = true,
forms = {
{"imp_2d", "أَفْعِلَا"},
{"imp_2fp", "أَفْعِلْنَ"},
{"imp_2fs", "أَفْعِلِي"},
{"imp_2mp", "أَفْعِلُوا"},
{"imp_2ms", "أَفْعِلْ"},
{"ind_1p", "نُفْعِلُ"},
{"ind_1s", "أُفْعِلُ"},
{"ind_2d", "تُفْعِلَانِ"},
{"ind_2fp", "تُفْعِلْنَ"},
{"ind_2fs", "تُفْعِلِينَ"},
{"ind_2mp", "تُفْعِلُونَ"},
{"ind_2ms", "تُفْعِلُ"},
{"ind_3fd", "تُفْعِلَانِ"},
{"ind_3fp", "يُفْعِلْنَ"},
{"ind_3fs", "تُفْعِلُ"},
{"ind_3md", "يُفْعِلَانِ"},
{"ind_3mp", "يُفْعِلُونَ"},
{"ind_3ms", "يُفْعِلُ"},
{"ind_pass_1p", "نُفْعَلُ"},
{"ind_pass_1s", "أُفْعَلُ"},
{"ind_pass_2d", "تُفْعَلَانِ"},
{"ind_pass_2fp", "تُفْعَلْنَ"},
{"ind_pass_2fs", "تُفْعَلِينَ"},
{"ind_pass_2mp", "تُفْعَلُونَ"},
{"ind_pass_2ms", "تُفْعَلُ"},
{"ind_pass_3fd", "تُفْعَلَانِ"},
{"ind_pass_3fp", "يُفْعَلْنَ"},
{"ind_pass_3fs", "تُفْعَلُ"},
{"ind_pass_3md", "يُفْعَلَانِ"},
{"ind_pass_3mp", "يُفْعَلُونَ"},
{"ind_pass_3ms", "يُفْعَلُ"},
{"past_1p", "أَفْعَلْنَا"},
{"past_1s", "أَفْعَلْتُ"},
{"past_2d", "أَفْعَلْتُمَا"},
{"past_2fp", "أَفْعَلْتُنَّ"},
{"past_2fs", "أَفْعَلْتِ"},
{"past_2mp", "أَفْعَلْتُمْ"},
{"past_2ms", "أَفْعَلْتَ"},
{"past_3fd", "أَفْعَلَتَا"},
{"past_3fp", "أَفْعَلْنَ"},
{"past_3fs", "أَفْعَلَتْ"},
{"past_3md", "أَفْعَلَا"},
{"past_3mp", "أَفْعَلُوا"},
{"past_3ms", "أَفْعَلَ"},
{"past_pass_1p", "أُفْعِلْنَا"},
{"past_pass_1s", "أُفْعِلْتُ"},
{"past_pass_2d", "أُفْعِلْتُمَا"},
{"past_pass_2fp", "أُفْعِلْتُنَّ"},
{"past_pass_2fs", "أُفْعِلْتِ"},
{"past_pass_2mp", "أُفْعِلْتُمْ"},
{"past_pass_2ms", "أُفْعِلْتَ"},
{"past_pass_3fd", "أُفْعِلَتَا"},
{"past_pass_3fp", "أُفْعِلْنَ"},
{"past_pass_3fs", "أُفْعِلَتْ"},
{"past_pass_3md", "أُفْعِلَا"},
{"past_pass_3mp", "أُفْعِلُوا"},
{"past_pass_3ms", "أُفْعِلَ"},
},
},
{
label = "وَجَلَ ـُ (p.136، معتل الفاء مثال)", root = "وجل", wazn = "فعَل يفعُل",
pass = true,
forms = {
{"imp_2d", "اُوجُلَا"},
{"imp_2fp", "اُوجُلْنَ"},
{"imp_2fs", "اُوجُلِي"},
{"imp_2mp", "اُوجُلُوا"},
{"imp_2ms", "اُوجُلْ"},
{"ind_1p", "نَوْجُلُ"},
{"ind_1s", "أَوْجُلُ"},
{"ind_2d", "تَوْجُلَانِ"},
{"ind_2fp", "تَوْجُلْنَ"},
{"ind_2fs", "تَوْجُلِينَ"},
{"ind_2mp", "تَوْجُلُونَ"},
{"ind_2ms", "تَوْجُلُ"},
{"ind_3fd", "تَوْجُلَانِ"},
{"ind_3fp", "يَوْجُلْنَ"},
{"ind_3fs", "تَوْجُلُ"},
{"ind_3md", "يَوْجُلَانِ"},
{"ind_3mp", "يَوْجُلُونَ"},
{"ind_3ms", "يَوْجُلُ"},
{"ind_pass_1p", "نُوجَلُ"},
{"ind_pass_1s", "أُوجَلُ"},
{"ind_pass_2d", "تُوجَلَانِ"},
{"ind_pass_2fp", "تُوجَلْنَ"},
{"ind_pass_2fs", "تُوجَلِينَ"},
{"ind_pass_2mp", "تُوجَلُونَ"},
{"ind_pass_2ms", "تُوجَلُ"},
{"ind_pass_3fd", "تُوجَلَانِ"},
{"ind_pass_3fp", "يُوجَلْنَ"},
{"ind_pass_3fs", "تُوجَلُ"},
{"ind_pass_3md", "يُوجَلَانِ"},
{"ind_pass_3mp", "يُوجَلُونَ"},
{"ind_pass_3ms", "يُوجَلُ"},
{"past_1p", "وَجَلْنَا"},
{"past_1s", "وَجَلْتُ"},
{"past_2d", "وَجَلْتُمَا"},
{"past_2fp", "وَجَلْتُنَّ"},
{"past_2fs", "وَجَلْتِ"},
{"past_2mp", "وَجَلْتُمْ"},
{"past_2ms", "وَجَلْتَ"},
{"past_3fd", "وَجَلَتَا"},
{"past_3fp", "وَجَلْنَ"},
{"past_3fs", "وَجَلَتْ"},
{"past_3md", "وَجَلَا"},
{"past_3mp", "وَجَلُوا"},
{"past_3ms", "وَجَلَ"},
{"past_pass_1p", "وُجِلْنَا"},
{"past_pass_1s", "وُجِلْتُ"},
{"past_pass_2d", "وُجِلْتُمَا"},
{"past_pass_2fp", "وُجِلْتُنَّ"},
{"past_pass_2fs", "وُجِلْتِ"},
{"past_pass_2mp", "وُجِلْتُمْ"},
{"past_pass_2ms", "وُجِلْتَ"},
{"past_pass_3fd", "وُجِلَتَا"},
{"past_pass_3fp", "وُجِلْنَ"},
{"past_pass_3fs", "وُجِلَتْ"},
{"past_pass_3md", "وُجِلَا"},
{"past_pass_3mp", "وُجِلُوا"},
{"past_pass_3ms", "وُجِلَ"},
},
},
{
label = "أَثَرَ ـِ (p.151، صحيح مهموز الفاء)", root = "أثر", wazn = "فعَل يفعِل",
pass = true,
forms = {
{"imp_2d", "اِئْثِرَا"},
{"imp_2fp", "اِئْثِرْنَ"},
{"imp_2fs", "اِئْثِرِي"},
{"imp_2mp", "اِئْثِرُوا"},
{"imp_2ms", "اِئْثِرْ"},
{"ind_1p", "نَأْثِرُ"},
{"ind_1s", "آثِرُ"},
{"ind_2d", "تَأْثِرَانِ"},
{"ind_2fp", "تَأْثِرْنَ"},
{"ind_2fs", "تَأْثِرِينَ"},
{"ind_2mp", "تَأْثِرُونَ"},
{"ind_2ms", "تَأْثِرُ"},
{"ind_3fd", "تَأْثِرَانِ"},
{"ind_3fp", "يَأْثِرْنَ"},
{"ind_3fs", "تَأْثِرُ"},
{"ind_3md", "يَأْثِرَانِ"},
{"ind_3mp", "يَأْثِرُونَ"},
{"ind_3ms", "يَأْثِرُ"},
{"ind_pass_1p", "نُؤْثَرُ"},
{"ind_pass_1s", "أُوثَرُ"},
{"ind_pass_2d", "تُؤْثَرَانِ"},
{"ind_pass_2fp", "تُؤْثَرْنَ"},
{"ind_pass_2fs", "تُؤْثَرِينَ"},
{"ind_pass_2mp", "تُؤْثَرُونَ"},
{"ind_pass_2ms", "تُؤْثَرُ"},
{"ind_pass_3fd", "تُؤْثَرَانِ"},
{"ind_pass_3fp", "يُؤْثَرْنَ"},
{"ind_pass_3fs", "تُؤْثَرُ"},
{"ind_pass_3md", "يُؤْثَرَانِ"},
{"ind_pass_3mp", "يُؤْثَرُونَ"},
{"ind_pass_3ms", "يُؤْثَرُ"},
{"past_1p", "أَثَرْنَا"},
{"past_1s", "أَثَرْتُ"},
{"past_2d", "أَثَرْتُمَا"},
{"past_2fp", "أَثَرْتُنَّ"},
{"past_2fs", "أَثَرْتِ"},
{"past_2mp", "أَثَرْتُمْ"},
{"past_2ms", "أَثَرْتَ"},
{"past_3fd", "أَثَرَتَا"},
{"past_3fp", "أَثَرْنَ"},
{"past_3fs", "أَثَرَتْ"},
{"past_3md", "أَثَرَا"},
{"past_3mp", "أَثَرُوا"},
{"past_3ms", "أَثَرَ"},
{"past_pass_1p", "أُثِرْنَا"},
{"past_pass_1s", "أُثِرْتُ"},
{"past_pass_2d", "أُثِرْتُمَا"},
{"past_pass_2fp", "أُثِرْتُنَّ"},
{"past_pass_2fs", "أُثِرْتِ"},
{"past_pass_2mp", "أُثِرْتُمْ"},
{"past_pass_2ms", "أُثِرْتَ"},
{"past_pass_3fd", "أُثِرَتَا"},
{"past_pass_3fp", "أُثِرْنَ"},
{"past_pass_3fs", "أُثِرَتْ"},
{"past_pass_3md", "أُثِرَا"},
{"past_pass_3mp", "أُثِرُوا"},
{"past_pass_3ms", "أُثِرَ"},
},
},
{
label = "بَدَأَ ـَ (p.178، صحيح مهموز اللام)", root = "بدأ", wazn = "فعَل يفعَل",
pass = true,
forms = {
{"imp_2d", "اِبْدَآ"},
{"imp_2fp", "اِبْدَأْنَ"},
{"imp_2fs", "اِبْدَئِي"},
{"imp_2mp", "اِبْدَؤُوا"},
{"imp_2ms", "اِبْدَأْ"},
{"ind_1p", "نَبْدَأُ"},
{"ind_1s", "أَبْدَأُ"},
{"ind_2d", "تَبْدَآنِ"},
{"ind_2fp", "تَبْدَأْنَ"},
{"ind_2fs", "تَبْدَئِينَ"},
{"ind_2mp", "تَبْدَؤُونَ"},
{"ind_2ms", "تَبْدَأُ"},
{"ind_3fd", "تَبْدَآنِ"},
{"ind_3fp", "يَبْدَأْنَ"},
{"ind_3fs", "تَبْدَأُ"},
{"ind_3md", "يَبْدَآنِ"},
{"ind_3mp", "يَبْدَؤُونَ"},
{"ind_3ms", "يَبْدَأُ"},
{"ind_pass_1p", "نُبْدَأُ"},
{"ind_pass_1s", "أُبْدَأُ"},
{"ind_pass_2d", "تُبْدَآنِ"},
{"ind_pass_2fp", "تُبْدَأْنَ"},
{"ind_pass_2fs", "تُبْدَئِينَ"},
{"ind_pass_2mp", "تُبْدَؤُونَ"},
{"ind_pass_2ms", "تُبْدَأُ"},
{"ind_pass_3fd", "تُبْدَآنِ"},
{"ind_pass_3fp", "يُبْدَأْنَ"},
{"ind_pass_3fs", "تُبْدَأُ"},
{"ind_pass_3md", "يُبْدَآنِ"},
{"ind_pass_3mp", "يُبْدَؤُونَ"},
{"ind_pass_3ms", "يُبْدَأُ"},
{"past_1p", "بَدَأْنَا"},
{"past_1s", "بَدَأْتُ"},
{"past_2d", "بَدَأْتُمَا"},
{"past_2fp", "بَدَأْتُنَّ"},
{"past_2fs", "بَدَأْتِ"},
{"past_2mp", "بَدَأْتُمْ"},
{"past_2ms", "بَدَأْتَ"},
{"past_3fd", "بَدَأَتَا"},
{"past_3fp", "بَدَأْنَ"},
{"past_3fs", "بَدَأَتْ"},
{"past_3md", "بَدَآ"},
{"past_3mp", "بَدَؤُوا"},
{"past_3ms", "بَدَأَ"},
{"past_pass_1p", "بُدِئْنَا"},
{"past_pass_1s", "بُدِئْتُ"},
{"past_pass_2d", "بُدِئْتُمَا"},
{"past_pass_2fp", "بُدِئْتُنَّ"},
{"past_pass_2fs", "بُدِئْتِ"},
{"past_pass_2mp", "بُدِئْتُمْ"},
{"past_pass_2ms", "بُدِئْتَ"},
{"past_pass_3fd", "بُدِئَتَا"},
{"past_pass_3fp", "بُدِئْنَ"},
{"past_pass_3fs", "بُدِئَتْ"},
{"past_pass_3md", "بُدِئَا"},
{"past_pass_3mp", "بُدِئُوا"},
{"past_pass_3ms", "بُدِئَ"},
},
},
{
label = "حَسِبَ ـِ (p.234، صحيح سالم)", root = "حسب", wazn = "فعِل يفعِل",
pass = true,
forms = {
{"imp_2d", "اِحْسِبَا"},
{"imp_2fp", "اِحْسِبْنَ"},
{"imp_2fs", "اِحْسِبِي"},
{"imp_2mp", "اِحْسِبُوا"},
{"imp_2ms", "اِحْسِبْ"},
{"ind_1p", "نَحْسِبُ"},
{"ind_1s", "أَحْسِبُ"},
{"ind_2d", "تَحْسِبَانِ"},
{"ind_2fp", "تَحْسِبْنَ"},
{"ind_2fs", "تَحْسِبِينَ"},
{"ind_2mp", "تَحْسِبُونَ"},
{"ind_2ms", "تَحْسِبُ"},
{"ind_3fd", "تَحْسِبَانِ"},
{"ind_3fp", "يَحْسِبْنَ"},
{"ind_3fs", "تَحْسِبُ"},
{"ind_3md", "يَحْسِبَانِ"},
{"ind_3mp", "يَحْسِبُونَ"},
{"ind_3ms", "يَحْسِبُ"},
{"ind_pass_1p", "نُحْسَبُ"},
{"ind_pass_1s", "أُحْسَبُ"},
{"ind_pass_2d", "تُحْسَبَانِ"},
{"ind_pass_2fp", "تُحْسَبْنَ"},
{"ind_pass_2fs", "تُحْسَبِينَ"},
{"ind_pass_2mp", "تُحْسَبُونَ"},
{"ind_pass_2ms", "تُحْسَبُ"},
{"ind_pass_3fd", "تُحْسَبَانِ"},
{"ind_pass_3fp", "يُحْسَبْنَ"},
{"ind_pass_3fs", "تُحْسَبُ"},
{"ind_pass_3md", "يُحْسَبَانِ"},
{"ind_pass_3mp", "يُحْسَبُونَ"},
{"ind_pass_3ms", "يُحْسَبُ"},
{"past_1p", "حَسِبْنَا"},
{"past_1s", "حَسِبْتُ"},
{"past_2d", "حَسِبْتُمَا"},
{"past_2fp", "حَسِبْتُنَّ"},
{"past_2fs", "حَسِبْتِ"},
{"past_2mp", "حَسِبْتُمْ"},
{"past_2ms", "حَسِبْتَ"},
{"past_3fd", "حَسِبَتَا"},
{"past_3fp", "حَسِبْنَ"},
{"past_3fs", "حَسِبَتْ"},
{"past_3md", "حَسِبَا"},
{"past_3mp", "حَسِبُوا"},
{"past_3ms", "حَسِبَ"},
{"past_pass_1p", "حُسِبْنَا"},
{"past_pass_1s", "حُسِبْتُ"},
{"past_pass_2d", "حُسِبْتُمَا"},
{"past_pass_2fp", "حُسِبْتُنَّ"},
{"past_pass_2fs", "حُسِبْتِ"},
{"past_pass_2mp", "حُسِبْتُمْ"},
{"past_pass_2ms", "حُسِبْتَ"},
{"past_pass_3fd", "حُسِبَتَا"},
{"past_pass_3fp", "حُسِبْنَ"},
{"past_pass_3fs", "حُسِبَتْ"},
{"past_pass_3md", "حُسِبَا"},
{"past_pass_3mp", "حُسِبُوا"},
{"past_pass_3ms", "حُسِبَ"},
},
},
{
label = "اِدَّارَأَ (p.312، تفاعل مدغم مهموز اللام)", root = "درأ", wazn = "تفاعل",
reduced = true,
forms = {
{"imp_2d", "اِدَّارَآ"},
{"imp_2fp", "اِدَّارَأْنَ"},
{"imp_2fs", "اِدَّارَئِي"},
{"imp_2mp", "اِدَّارَؤُوا"},
{"imp_2ms", "اِدَّارَأْ"},
{"ind_1p", "نَدَّارَأُ"},
{"ind_1s", "أَدَّارَأُ"},
{"ind_2d", "تَدَّارَآنِ"},
{"ind_2fp", "تَدَّارَأْنَ"},
{"ind_2fs", "تَدَّارَئِينَ"},
{"ind_2mp", "تَدَّارَؤُونَ"},
{"ind_2ms", "تَدَّارَأُ"},
{"ind_3fd", "تَدَّارَآنِ"},
{"ind_3fp", "يَدَّارَأْنَ"},
{"ind_3fs", "تَدَّارَأُ"},
{"ind_3md", "يَدَّارَآنِ"},
{"ind_3mp", "يَدَّارَؤُونَ"},
{"ind_3ms", "يَدَّارَأُ"},
{"past_1p", "اِدَّارَأْنَا"},
{"past_1s", "اِدَّارَأْتُ"},
{"past_2d", "اِدَّارَأْتُمَا"},
{"past_2fp", "اِدَّارَأْتُنَّ"},
{"past_2fs", "اِدَّارَأْتِ"},
{"past_2mp", "اِدَّارَأْتُمْ"},
{"past_2ms", "اِدَّارَأْتَ"},
{"past_3fd", "اِدَّارَأَتَا"},
{"past_3fp", "اِدَّارَأْنَ"},
{"past_3fs", "اِدَّارَأَتْ"},
{"past_3md", "اِدَّارَآ"},
{"past_3mp", "اِدَّارَؤُوا"},
{"past_3ms", "اِدَّارَأَ"},
},
},
}
dz31fwfj30ybdvseba8ay5y24nrgg7q
1159062
1159004
2026-09-10T19:33:42Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159062
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 2 من 16.
return {
{
label = "وَصَلَ ـِ (p.155، معتل الفاء مثال)", root = "وصل", wazn = "فعَل يفعِل",
pass = true,
forms = {
{"imp_2d", "صِلَا"},
{"imp_2fp", "صِلْنَ"},
{"imp_2fs", "صِلِي"},
{"imp_2mp", "صِلُوا"},
{"imp_2ms", "صِلْ"},
{"ind_1p", "نَصِلُ"},
{"ind_1s", "أَصِلُ"},
{"ind_2d", "تَصِلَانِ"},
{"ind_2fp", "تَصِلْنَ"},
{"ind_2fs", "تَصِلِينَ"},
{"ind_2mp", "تَصِلُونَ"},
{"ind_2ms", "تَصِلُ"},
{"ind_3fd", "تَصِلَانِ"},
{"ind_3fp", "يَصِلْنَ"},
{"ind_3fs", "تَصِلُ"},
{"ind_3md", "يَصِلَانِ"},
{"ind_3mp", "يَصِلُونَ"},
{"ind_3ms", "يَصِلُ"},
{"ind_pass_1p", "نُوصَلُ"},
{"ind_pass_1s", "أُوصَلُ"},
{"ind_pass_2d", "تُوصَلَانِ"},
{"ind_pass_2fp", "تُوصَلْنَ"},
{"ind_pass_2fs", "تُوصَلِينَ"},
{"ind_pass_2mp", "تُوصَلُونَ"},
{"ind_pass_2ms", "تُوصَلُ"},
{"ind_pass_3fd", "تُوصَلَانِ"},
{"ind_pass_3fp", "يُوصَلْنَ"},
{"ind_pass_3fs", "تُوصَلُ"},
{"ind_pass_3md", "يُوصَلَانِ"},
{"ind_pass_3mp", "يُوصَلُونَ"},
{"ind_pass_3ms", "يُوصَلُ"},
{"past_1p", "وَصَلْنَا"},
{"past_1s", "وَصَلْتُ"},
{"past_2d", "وَصَلْتُمَا"},
{"past_2fp", "وَصَلْتُنَّ"},
{"past_2fs", "وَصَلْتِ"},
{"past_2mp", "وَصَلْتُمْ"},
{"past_2ms", "وَصَلْتَ"},
{"past_3fd", "وَصَلَتَا"},
{"past_3fp", "وَصَلْنَ"},
{"past_3fs", "وَصَلَتْ"},
{"past_3md", "وَصَلَا"},
{"past_3mp", "وَصَلُوا"},
{"past_3ms", "وَصَلَ"},
{"past_pass_1p", "وُصِلْنَا"},
{"past_pass_1s", "وُصِلْتُ"},
{"past_pass_2d", "وُصِلْتُمَا"},
{"past_pass_2fp", "وُصِلْتُنَّ"},
{"past_pass_2fs", "وُصِلْتِ"},
{"past_pass_2mp", "وُصِلْتُمْ"},
{"past_pass_2ms", "وُصِلْتَ"},
{"past_pass_3fd", "وُصِلَتَا"},
{"past_pass_3fp", "وُصِلْنَ"},
{"past_pass_3fs", "وُصِلَتْ"},
{"past_pass_3md", "وُصِلَا"},
{"past_pass_3mp", "وُصِلُوا"},
{"past_pass_3ms", "وُصِلَ"},
},
},
{
label = "رَمَى ـِ (p.161، ناقص يائي)", root = "رمي", wazn = "فعَل يفعِل",
pass = true,
forms = {
{"imp_2d", "اِرْمِيَا"},
{"imp_2fp", "اِرْمِينَ"},
{"imp_2fs", "اِرْمِي"},
{"imp_2mp", "اِرْمُوا"},
{"imp_2ms", "اِرْمِ"},
{"ind_1p", "نَرْمِي"},
{"ind_1s", "أَرْمِي"},
{"ind_2d", "تَرْمِيَانِ"},
{"ind_2fp", "تَرْمِينَ"},
{"ind_2fs", "تَرْمِينَ"},
{"ind_2mp", "تَرْمُونَ"},
{"ind_2ms", "تَرْمِي"},
{"ind_3fd", "تَرْمِيَانِ"},
{"ind_3fp", "يَرْمِينَ"},
{"ind_3fs", "تَرْمِي"},
{"ind_3md", "يَرْمِيَانِ"},
{"ind_3mp", "يَرْمُونَ"},
{"ind_3ms", "يَرْمِي"},
{"ind_pass_1p", "نُرْمَى"},
{"ind_pass_1s", "أُرْمَى"},
{"ind_pass_2d", "تُرْمَيَانِ"},
{"ind_pass_2fp", "تُرْمَيْنَ"},
{"ind_pass_2fs", "تُرْمَيْنَ"},
{"ind_pass_2mp", "تُرْمَوْنَ"},
{"ind_pass_2ms", "تُرْمَى"},
{"ind_pass_3fd", "تُرْمَيَانِ"},
{"ind_pass_3fp", "يُرْمَيْنَ"},
{"ind_pass_3fs", "تُرْمَى"},
{"ind_pass_3md", "يُرْمَيَانِ"},
{"ind_pass_3mp", "يُرْمَوْنَ"},
{"ind_pass_3ms", "يُرْمَى"},
{"past_1p", "رَمَيْنَا"},
{"past_1s", "رَمَيْتُ"},
{"past_2d", "رَمَيْتُمَا"},
{"past_2fp", "رَمَيْتُنَّ"},
{"past_2fs", "رَمَيْتِ"},
{"past_2mp", "رَمَيْتُمْ"},
{"past_2ms", "رَمَيْتَ"},
{"past_3fd", "رَمَتَا"},
{"past_3fp", "رَمَيْنَ"},
{"past_3fs", "رَمَتْ"},
{"past_3md", "رَمَيَا"},
{"past_3mp", "رَمَوْا"},
{"past_3ms", "رَمَى"},
{"past_pass_1p", "رُمِينَا"},
{"past_pass_1s", "رُمِيتُ"},
{"past_pass_2d", "رُمِيتُمَا"},
{"past_pass_2fp", "رُمِيتُنَّ"},
{"past_pass_2fs", "رُمِيتِ"},
{"past_pass_2mp", "رُمِيتُمْ"},
{"past_pass_2ms", "رُمِيتَ"},
{"past_pass_3fd", "رُمِيَتَا"},
{"past_pass_3fp", "رُمِينَ"},
{"past_pass_3fs", "رُمِيَتْ"},
{"past_pass_3md", "رُمِيَا"},
{"past_pass_3mp", "رُمُوا"},
{"past_pass_3ms", "رُمِيَ"},
},
},
{
label = "فَعَلَ ـَ (p.169، abstract paradigm)", root = "فعل", wazn = "فعَل يفعَل",
pass = true,
forms = {
{"imp_2d", "اِفْعَلَا"},
{"imp_2fp", "اِفْعَلْنَ"},
{"imp_2fs", "اِفْعَلِي"},
{"imp_2mp", "اِفْعَلُوا"},
{"imp_2ms", "اِفْعَلْ"},
{"ind_1p", "نَفْعَلُ"},
{"ind_1s", "أَفْعَلُ"},
{"ind_2d", "تَفْعَلَانِ"},
{"ind_2fp", "تَفْعَلْنَ"},
{"ind_2fs", "تَفْعَلِينَ"},
{"ind_2mp", "تَفْعَلُونَ"},
{"ind_2ms", "تَفْعَلُ"},
{"ind_3fd", "تَفْعَلَانِ"},
{"ind_3fp", "يَفْعَلْنَ"},
{"ind_3fs", "تَفْعَلُ"},
{"ind_3md", "يَفْعَلَانِ"},
{"ind_3mp", "يَفْعَلُونَ"},
{"ind_3ms", "يَفْعَلُ"},
{"ind_pass_1p", "نُفْعَلُ"},
{"ind_pass_1s", "أُفْعَلُ"},
{"ind_pass_2d", "تُفْعَلَانِ"},
{"ind_pass_2fp", "تُفْعَلْنَ"},
{"ind_pass_2fs", "تُفْعَلِينَ"},
{"ind_pass_2mp", "تُفْعَلُونَ"},
{"ind_pass_2ms", "تُفْعَلُ"},
{"ind_pass_3fd", "تُفْعَلَانِ"},
{"ind_pass_3fp", "يُفْعَلْنَ"},
{"ind_pass_3fs", "تُفْعَلُ"},
{"ind_pass_3md", "يُفْعَلَانِ"},
{"ind_pass_3mp", "يُفْعَلُونَ"},
{"ind_pass_3ms", "يُفْعَلُ"},
{"past_1p", "فَعَلْنَا"},
{"past_1s", "فَعَلْتُ"},
{"past_2d", "فَعَلْتُمَا"},
{"past_2fp", "فَعَلْتُنَّ"},
{"past_2fs", "فَعَلْتِ"},
{"past_2mp", "فَعَلْتُمْ"},
{"past_2ms", "فَعَلْتَ"},
{"past_3fd", "فَعَلَتَا"},
{"past_3fp", "فَعَلْنَ"},
{"past_3fs", "فَعَلَتْ"},
{"past_3md", "فَعَلَا"},
{"past_3mp", "فَعَلُوا"},
{"past_3ms", "فَعَلَ"},
{"past_pass_1p", "فُعِلْنَا"},
{"past_pass_1s", "فُعِلْتُ"},
{"past_pass_2d", "فُعِلْتُمَا"},
{"past_pass_2fp", "فُعِلْتُنَّ"},
{"past_pass_2fs", "فُعِلْتِ"},
{"past_pass_2mp", "فُعِلْتُمْ"},
{"past_pass_2ms", "فُعِلْتَ"},
{"past_pass_3fd", "فُعِلَتَا"},
{"past_pass_3fp", "فُعِلْنَ"},
{"past_pass_3fs", "فُعِلَتْ"},
{"past_pass_3md", "فُعِلَا"},
{"past_pass_3mp", "فُعِلُوا"},
{"past_pass_3ms", "فُعِلَ"},
},
},
{
label = "عَضَّ ـَ (p.173، مضاعف)", root = "عضض", wazn = "فعَل يفعَل",
pass = true,
forms = {
{"imp_2d", "عَضَّا"},
{"imp_2fp", "اِعْضَضْنَ"},
{"imp_2fs", "عَضِّي"},
{"imp_2mp", "عَضُّوا"},
{"imp_2ms", "عَضَّ"},
{"ind_1p", "نَعَضُّ"},
{"ind_1s", "أَعَضُّ"},
{"ind_2d", "تَعَضَّانِ"},
{"ind_2fp", "تَعْضَضْنَ"},
{"ind_2fs", "تَعَضِّينَ"},
{"ind_2mp", "تَعَضُّونَ"},
{"ind_2ms", "تَعَضُّ"},
{"ind_3fd", "تَعَضَّانِ"},
{"ind_3fp", "يَعْضَضْنَ"},
{"ind_3fs", "تَعَضُّ"},
{"ind_3md", "يَعَضَّانِ"},
{"ind_3mp", "يَعَضُّونَ"},
{"ind_3ms", "يَعَضُّ"},
{"ind_pass_1p", "نُعَضُّ"},
{"ind_pass_1s", "أُعَضُّ"},
{"ind_pass_2d", "تُعَضَّانِ"},
{"ind_pass_2fp", "تُعْضَضْنَ"},
{"ind_pass_2fs", "تُعَضِّينَ"},
{"ind_pass_2mp", "تُعَضُّونَ"},
{"ind_pass_2ms", "تُعَضُّ"},
{"ind_pass_3fd", "تُعَضَّانِ"},
{"ind_pass_3fp", "يُعْضَضْنَ"},
{"ind_pass_3fs", "تُعَضُّ"},
{"ind_pass_3md", "يُعَضَّانِ"},
{"ind_pass_3mp", "يُعَضُّونَ"},
{"ind_pass_3ms", "يُعَضُّ"},
{"past_1p", "عَضَضْنَا"},
{"past_1s", "عَضَضْتُ"},
{"past_2d", "عَضَضْتُمَا"},
{"past_2fp", "عَضَضْتُنَّ"},
{"past_2fs", "عَضَضْتِ"},
{"past_2mp", "عَضَضْتُمْ"},
{"past_2ms", "عَضَضْتَ"},
{"past_3fd", "عَضَّتَا"},
{"past_3fp", "عَضَضْنَ"},
{"past_3fs", "عَضَّتْ"},
{"past_3md", "عَضَّا"},
{"past_3mp", "عَضُّوا"},
{"past_3ms", "عَضَّ"},
{"past_pass_1p", "عُضِضْنَا"},
{"past_pass_1s", "عُضِضْتُ"},
{"past_pass_2d", "عُضِضْتُمَا"},
{"past_pass_2fp", "عُضِضْتُنَّ"},
{"past_pass_2fs", "عُضِضْتِ"},
{"past_pass_2mp", "عُضِضْتُمْ"},
{"past_pass_2ms", "عُضِضْتَ"},
{"past_pass_3fd", "عُضَّتَا"},
{"past_pass_3fp", "عُضِضْنَ"},
{"past_pass_3fs", "عُضَّتْ"},
{"past_pass_3md", "عُضَّا"},
{"past_pass_3mp", "عُضُّوا"},
{"past_pass_3ms", "عُضَّ"},
},
},
{
label = "أَلَهَ ـَ (p.175، مهموز الفاء)", root = "أله", wazn = "فعَل يفعَل",
pass = true,
forms = {
{"imp_2d", "اِئْلَهَا"},
{"imp_2fp", "اِئْلَهْنَ"},
{"imp_2fs", "اِئْلَهِي"},
{"imp_2mp", "اِئْلَهُوا"},
{"imp_2ms", "اِئْلَهْ"},
{"ind_1p", "نَأْلَهُ"},
{"ind_1s", "آلَهُ"},
{"ind_2d", "تَأْلَهَانِ"},
{"ind_2fp", "تَأْلَهْنَ"},
{"ind_2fs", "تَأْلَهِينَ"},
{"ind_2mp", "تَأْلَهُونَ"},
{"ind_2ms", "تَأْلَهُ"},
{"ind_3fd", "تَأْلَهَانِ"},
{"ind_3fp", "يَأْلَهْنَ"},
{"ind_3fs", "تَأْلَهُ"},
{"ind_3md", "يَأْلَهَانِ"},
{"ind_3mp", "يَأْلَهُونَ"},
{"ind_3ms", "يَأْلَهُ"},
{"ind_pass_1p", "نُؤْلَهُ"},
{"ind_pass_1s", "أُولَهُ"},
{"ind_pass_2d", "تُؤْلَهَانِ"},
{"ind_pass_2fp", "تُؤْلَهْنَ"},
{"ind_pass_2fs", "تُؤْلَهِينَ"},
{"ind_pass_2mp", "تُؤْلَهُونَ"},
{"ind_pass_2ms", "تُؤْلَهُ"},
{"ind_pass_3fd", "تُؤْلَهَانِ"},
{"ind_pass_3fp", "يُؤْلَهْنَ"},
{"ind_pass_3fs", "تُؤْلَهُ"},
{"ind_pass_3md", "يُؤْلَهَانِ"},
{"ind_pass_3mp", "يُؤْلَهُونَ"},
{"ind_pass_3ms", "يُؤْلَهُ"},
{"past_1p", "أَلَهْنَا"},
{"past_1s", "أَلَهْتُ"},
{"past_2d", "أَلَهْتُمَا"},
{"past_2fp", "أَلَهْتُنَّ"},
{"past_2fs", "أَلَهْتِ"},
{"past_2mp", "أَلَهْتُمْ"},
{"past_2ms", "أَلَهْتَ"},
{"past_3fd", "أَلَهَتَا"},
{"past_3fp", "أَلَهْنَ"},
{"past_3fs", "أَلَهَتْ"},
{"past_3md", "أَلَهَا"},
{"past_3mp", "أَلَهُوا"},
{"past_3ms", "أَلَهَ"},
{"past_pass_1p", "أُلِهْنَا"},
{"past_pass_1s", "أُلِهْتُ"},
{"past_pass_2d", "أُلِهْتُمَا"},
{"past_pass_2fp", "أُلِهْتُنَّ"},
{"past_pass_2fs", "أُلِهْتِ"},
{"past_pass_2mp", "أُلِهْتُمْ"},
{"past_pass_2ms", "أُلِهْتَ"},
{"past_pass_3fd", "أُلِهَتَا"},
{"past_pass_3fp", "أُلِهْنَ"},
{"past_pass_3fs", "أُلِهَتْ"},
{"past_pass_3md", "أُلِهَا"},
{"past_pass_3mp", "أُلِهُوا"},
{"past_pass_3ms", "أُلِهَ"},
},
},
{
label = "باعَ ـِ (p.158، أجوف يائي)", root = "بيع", wazn = "فعَل يفعِل",
pass = true,
forms = {
{"imp_2d", "بِيعَا"},
{"imp_2fp", "بِعْنَ"},
{"imp_2fs", "بِيعِي"},
{"imp_2mp", "بِيعُوا"},
{"imp_2ms", "بِعْ"},
{"ind_1p", "نَبِيعُ"},
{"ind_1s", "أَبِيعُ"},
{"ind_2d", "تَبِيعَانِ"},
{"ind_2fp", "تَبِعْنَ"},
{"ind_2fs", "تَبِيعِينَ"},
{"ind_2mp", "تَبِيعُونَ"},
{"ind_2ms", "تَبِيعُ"},
{"ind_3fd", "تَبِيعَانِ"},
{"ind_3fp", "يَبِعْنَ"},
{"ind_3fs", "تَبِيعُ"},
{"ind_3md", "يَبِيعَانِ"},
{"ind_3mp", "يَبِيعُونَ"},
{"ind_3ms", "يَبِيعُ"},
{"ind_pass_1p", "نُبَاعُ"},
{"ind_pass_1s", "أُبَاعُ"},
{"ind_pass_2d", "تُبَاعَانِ"},
{"ind_pass_2fp", "تُبَعْنَ"},
{"ind_pass_2fs", "تُبَاعِينَ"},
{"ind_pass_2mp", "تُبَاعُونَ"},
{"ind_pass_2ms", "تُبَاعُ"},
{"ind_pass_3fd", "تُبَاعَانِ"},
{"ind_pass_3fp", "يُبَعْنَ"},
{"ind_pass_3fs", "تُبَاعُ"},
{"ind_pass_3md", "يُبَاعَانِ"},
{"ind_pass_3mp", "يُبَاعُونَ"},
{"ind_pass_3ms", "يُبَاعُ"},
{"past_1p", "بِعْنَا"},
{"past_1s", "بِعْتُ"},
{"past_2d", "بِعْتُمَا"},
{"past_2fp", "بِعْتُنَّ"},
{"past_2fs", "بِعْتِ"},
{"past_2mp", "بِعْتُمْ"},
{"past_2ms", "بِعْتَ"},
{"past_3fd", "بَاعَتَا"},
{"past_3fp", "بِعْنَ"},
{"past_3fs", "بَاعَتْ"},
{"past_3md", "بَاعَا"},
{"past_3mp", "بَاعُوا"},
{"past_3ms", "بَاعَ"},
{"past_pass_1p", "بُعْنَا"},
{"past_pass_1s", "بُعْتُ"},
{"past_pass_2d", "بُعْتُمَا"},
{"past_pass_2fp", "بُعْتُنَّ"},
{"past_pass_2fs", "بُعْتِ"},
{"past_pass_2mp", "بُعْتُمْ"},
{"past_pass_2ms", "بُعْتَ"},
{"past_pass_3fd", "بِيعَتَا"},
{"past_pass_3fp", "بُعْنَ"},
{"past_pass_3fs", "بِيعَتْ"},
{"past_pass_3md", "بِيعَا"},
{"past_pass_3mp", "بِيعُوا"},
{"past_pass_3ms", "بِيعَ"},
},
},
{
label = "طَوَى ـِ (p.166، لفيف مقرون)", root = "طوي", wazn = "فعَل يفعِل",
pass = true,
forms = {
{"imp_2d", "اِطْوِيَا"},
{"imp_2fp", "اِطْوِينَ"},
{"imp_2fs", "اِطْوِي"},
{"imp_2mp", "اِطْوُوا"},
{"imp_2ms", "اِطْوِ"},
{"ind_1p", "نَطْوِي"},
{"ind_1s", "أَطْوِي"},
{"ind_2d", "تَطْوِيَانِ"},
{"ind_2fp", "تَطْوِينَ"},
{"ind_2fs", "تَطْوِينَ"},
{"ind_2mp", "تَطْوُونَ"},
{"ind_2ms", "تَطْوِي"},
{"ind_3fd", "تَطْوِيَانِ"},
{"ind_3fp", "يَطْوِينَ"},
{"ind_3fs", "تَطْوِي"},
{"ind_3md", "يَطْوِيَانِ"},
{"ind_3mp", "يَطْوُونَ"},
{"ind_3ms", "يَطْوِي"},
{"ind_pass_1p", "نُطْوَى"},
{"ind_pass_1s", "أُطْوَى"},
{"ind_pass_2d", "تُطْوَيَانِ"},
{"ind_pass_2fp", "تُطْوَيْنَ"},
{"ind_pass_2fs", "تُطْوَيْنَ"},
{"ind_pass_2mp", "تُطْوَوْنَ"},
{"ind_pass_2ms", "تُطْوَى"},
{"ind_pass_3fd", "تُطْوَيَانِ"},
{"ind_pass_3fp", "يُطْوَيْنَ"},
{"ind_pass_3fs", "تُطْوَى"},
{"ind_pass_3md", "يُطْوَيَانِ"},
{"ind_pass_3mp", "يُطْوَوْنَ"},
{"ind_pass_3ms", "يُطْوَى"},
{"past_1p", "طَوَيْنَا"},
{"past_1s", "طَوَيْتُ"},
{"past_2d", "طَوَيْتُمَا"},
{"past_2fp", "طَوَيْتُنَّ"},
{"past_2fs", "طَوَيْتِ"},
{"past_2mp", "طَوَيْتُمْ"},
{"past_2ms", "طَوَيْتَ"},
{"past_3fd", "طَوَتَا"},
{"past_3fp", "طَوَيْنَ"},
{"past_3fs", "طَوَتْ"},
{"past_3md", "طَوَيَا"},
{"past_3mp", "طَوَوْا"},
{"past_3ms", "طَوَى"},
{"past_pass_1p", "طُوِينَا"},
{"past_pass_1s", "طُوِيتُ"},
{"past_pass_2d", "طُوِيتُمَا"},
{"past_pass_2fp", "طُوِيتُنَّ"},
{"past_pass_2fs", "طُوِيتِ"},
{"past_pass_2mp", "طُوِيتُمْ"},
{"past_pass_2ms", "طُوِيتَ"},
{"past_pass_3fd", "طُوِيَتَا"},
{"past_pass_3fp", "طُوِينَ"},
{"past_pass_3fs", "طُوِيَتْ"},
{"past_pass_3md", "طُوِيَا"},
{"past_pass_3mp", "طُوُوا"},
{"past_pass_3ms", "طُوِيَ"},
},
},
{
label = "سَأَلَ ـَ (p.176، مهموز العين)", root = "سأل", wazn = "فعَل يفعَل",
pass = true,
forms = {
{"imp_2d", "اِسْأَلَا"},
{"imp_2fp", "اِسْأَلْنَ"},
{"imp_2fs", "اِسْأَلِي"},
{"imp_2mp", "اِسْأَلُوا"},
{"imp_2ms", "اِسْأَلْ"},
{"ind_1p", "نَسْأَلُ"},
{"ind_1s", "أَسْأَلُ"},
{"ind_2d", "تَسْأَلَانِ"},
{"ind_2fp", "تَسْأَلْنَ"},
{"ind_2fs", "تَسْأَلِينَ"},
{"ind_2mp", "تَسْأَلُونَ"},
{"ind_2ms", "تَسْأَلُ"},
{"ind_3fd", "تَسْأَلَانِ"},
{"ind_3fp", "يَسْأَلْنَ"},
{"ind_3fs", "تَسْأَلُ"},
{"ind_3md", "يَسْأَلَانِ"},
{"ind_3mp", "يَسْأَلُونَ"},
{"ind_3ms", "يَسْأَلُ"},
{"ind_pass_1p", "نُسْأَلُ"},
{"ind_pass_1s", "أُسْأَلُ"},
{"ind_pass_2d", "تُسْأَلَانِ"},
{"ind_pass_2fp", "تُسْأَلْنَ"},
{"ind_pass_2fs", "تُسْأَلِينَ"},
{"ind_pass_2mp", "تُسْأَلُونَ"},
{"ind_pass_2ms", "تُسْأَلُ"},
{"ind_pass_3fd", "تُسْأَلَانِ"},
{"ind_pass_3fp", "يُسْأَلْنَ"},
{"ind_pass_3fs", "تُسْأَلُ"},
{"ind_pass_3md", "يُسْأَلَانِ"},
{"ind_pass_3mp", "يُسْأَلُونَ"},
{"ind_pass_3ms", "يُسْأَلُ"},
{"past_1p", "سَأَلْنَا"},
{"past_1s", "سَأَلْتُ"},
{"past_2d", "سَأَلْتُمَا"},
{"past_2fp", "سَأَلْتُنَّ"},
{"past_2fs", "سَأَلْتِ"},
{"past_2mp", "سَأَلْتُمْ"},
{"past_2ms", "سَأَلْتَ"},
{"past_3fd", "سَأَلَتَا"},
{"past_3fp", "سَأَلْنَ"},
{"past_3fs", "سَأَلَتْ"},
{"past_3md", "سَأَلَا"},
{"past_3mp", "سَأَلُوا"},
{"past_3ms", "سَأَلَ"},
{"past_pass_1p", "سُئِلْنَا"},
{"past_pass_1s", "سُئِلْتُ"},
{"past_pass_2d", "سُئِلْتُمَا"},
{"past_pass_2fp", "سُئِلْتُنَّ"},
{"past_pass_2fs", "سُئِلْتِ"},
{"past_pass_2mp", "سُئِلْتُمْ"},
{"past_pass_2ms", "سُئِلْتَ"},
{"past_pass_3fd", "سُئِلَتَا"},
{"past_pass_3fp", "سُئِلْنَ"},
{"past_pass_3fs", "سُئِلَتْ"},
{"past_pass_3md", "سُئِلَا"},
{"past_pass_3mp", "سُئِلُوا"},
{"past_pass_3ms", "سُئِلَ"},
},
},
{
label = "باتَ ـَ (p.183، أجوف يائي)", root = "بيت", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "بَاتَا"},
{"imp_2fp", "بَتْنَ"},
{"imp_2fs", "بَاتِي"},
{"imp_2mp", "بَاتُوا"},
{"imp_2ms", "بَتْ"},
{"ind_1p", "نَبَاتُ"},
{"ind_1s", "أَبَاتُ"},
{"ind_2d", "تَبَاتَانِ"},
{"ind_2fp", "تَبَتْنَ"},
{"ind_2fs", "تَبَاتِينَ"},
{"ind_2mp", "تَبَاتُونَ"},
{"ind_2ms", "تَبَاتُ"},
{"ind_3fd", "تَبَاتَانِ"},
{"ind_3fp", "يَبَتْنَ"},
{"ind_3fs", "تَبَاتُ"},
{"ind_3md", "يَبَاتَانِ"},
{"ind_3mp", "يَبَاتُونَ"},
{"ind_3ms", "يَبَاتُ"},
{"past_1p", "بِتْنَا"},
{"past_1s", "بِتُّ"},
{"past_2d", "بِتُّمَا"},
{"past_2fp", "بِتُّنَّ"},
{"past_2fs", "بِتِّ"},
{"past_2mp", "بِتُّمْ"},
{"past_2ms", "بِتَّ"},
{"past_3fd", "بَاتَتَا"},
{"past_3fp", "بِتْنَ"},
{"past_3fs", "بَاتَتْ"},
{"past_3md", "بَاتَا"},
{"past_3mp", "بَاتُوا"},
{"past_3ms", "بَاتَ"},
},
},
{
label = "سَعَى ـَ (p.186، ناقص يائي)", root = "سعي", wazn = "فعَل يفعَل",
pass = true,
forms = {
{"imp_2d", "اِسْعَيَا"},
{"imp_2fp", "اِسْعَيْنَ"},
{"imp_2fs", "اِسْعَيْ"},
{"imp_2mp", "اِسْعَوْا"},
{"imp_2ms", "اِسْعَ"},
{"ind_1p", "نَسْعَى"},
{"ind_1s", "أَسْعَى"},
{"ind_2d", "تَسْعَيَانِ"},
{"ind_2fp", "تَسْعَيْنَ"},
{"ind_2fs", "تَسْعَيْنَ"},
{"ind_2mp", "تَسْعَوْنَ"},
{"ind_2ms", "تَسْعَى"},
{"ind_3fd", "تَسْعَيَانِ"},
{"ind_3fp", "يَسْعَيْنَ"},
{"ind_3fs", "تَسْعَى"},
{"ind_3md", "يَسْعَيَانِ"},
{"ind_3mp", "يَسْعَوْنَ"},
{"ind_3ms", "يَسْعَى"},
{"ind_pass_1p", "نُسْعَى"},
{"ind_pass_1s", "أُسْعَى"},
{"ind_pass_2d", "تُسْعَيَانِ"},
{"ind_pass_2fp", "تُسْعَيْنَ"},
{"ind_pass_2fs", "تُسْعَيْنَ"},
{"ind_pass_2mp", "تُسْعَوْنَ"},
{"ind_pass_2ms", "تُسْعَى"},
{"ind_pass_3fd", "تُسْعَيَانِ"},
{"ind_pass_3fp", "يُسْعَيْنَ"},
{"ind_pass_3fs", "تُسْعَى"},
{"ind_pass_3md", "يُسْعَيَانِ"},
{"ind_pass_3mp", "يُسْعَوْنَ"},
{"ind_pass_3ms", "يُسْعَى"},
{"past_1p", "سَعَيْنَا"},
{"past_1s", "سَعَيْتُ"},
{"past_2d", "سَعَيْتُمَا"},
{"past_2fp", "سَعَيْتُنَّ"},
{"past_2fs", "سَعَيْتِ"},
{"past_2mp", "سَعَيْتُمْ"},
{"past_2ms", "سَعَيْتَ"},
{"past_3fd", "سَعَتَا"},
{"past_3fp", "سَعَيْنَ"},
{"past_3fs", "سَعَتْ"},
{"past_3md", "سَعَيَا"},
{"past_3mp", "سَعَوْا"},
{"past_3ms", "سَعَى"},
{"past_pass_1p", "سُعِينَا"},
{"past_pass_1s", "سُعِيتُ"},
{"past_pass_2d", "سُعِيتُمَا"},
{"past_pass_2fp", "سُعِيتُنَّ"},
{"past_pass_2fs", "سُعِيتِ"},
{"past_pass_2mp", "سُعِيتُمْ"},
{"past_pass_2ms", "سُعِيتَ"},
{"past_pass_3fd", "سُعِيَتَا"},
{"past_pass_3fp", "سُعِينَ"},
{"past_pass_3fs", "سُعِيَتْ"},
{"past_pass_3md", "سُعِيَا"},
{"past_pass_3mp", "سُعُوا"},
{"past_pass_3ms", "سُعِيَ"},
},
},
{
label = "كَرُمَ ـُ (p.189، صحيح سالم)", root = "كرم", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُكْرُمَا"},
{"imp_2fp", "اُكْرُمْنَ"},
{"imp_2fs", "اُكْرُمِي"},
{"imp_2mp", "اُكْرُمُوا"},
{"imp_2ms", "اُكْرُمْ"},
{"ind_1p", "نَكْرُمُ"},
{"ind_1s", "أَكْرُمُ"},
{"ind_2d", "تَكْرُمَانِ"},
{"ind_2fp", "تَكْرُمْنَ"},
{"ind_2fs", "تَكْرُمِينَ"},
{"ind_2mp", "تَكْرُمُونَ"},
{"ind_2ms", "تَكْرُمُ"},
{"ind_3fd", "تَكْرُمَانِ"},
{"ind_3fp", "يَكْرُمْنَ"},
{"ind_3fs", "تَكْرُمُ"},
{"ind_3md", "يَكْرُمَانِ"},
{"ind_3mp", "يَكْرُمُونَ"},
{"ind_3ms", "يَكْرُمُ"},
{"past_1p", "كَرُمْنَا"},
{"past_1s", "كَرُمْتُ"},
{"past_2d", "كَرُمْتُمَا"},
{"past_2fp", "كَرُمْتُنَّ"},
{"past_2fs", "كَرُمْتِ"},
{"past_2mp", "كَرُمْتُمْ"},
{"past_2ms", "كَرُمْتَ"},
{"past_3fd", "كَرُمَتَا"},
{"past_3fp", "كَرُمْنَ"},
{"past_3fs", "كَرُمَتْ"},
{"past_3md", "كَرُمَا"},
{"past_3mp", "كَرُمُوا"},
{"past_3ms", "كَرُمَ"},
},
},
{
label = "هَمَّ ـُ (p.192، مضاعف)", root = "همم", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "هُمَّا"},
{"imp_2fp", "اُهْمُمْنَ"},
{"imp_2fs", "هُمِّي"},
{"imp_2mp", "هُمُّوا"},
{"imp_2ms", "هُمَّ"},
{"ind_1p", "نَهُمُّ"},
{"ind_1s", "أَهُمُّ"},
{"ind_2d", "تَهُمَّانِ"},
{"ind_2fp", "تَهْمُمْنَ"},
{"ind_2fs", "تَهُمِّينَ"},
{"ind_2mp", "تَهُمُّونَ"},
{"ind_2ms", "تَهُمُّ"},
{"ind_3fd", "تَهُمَّانِ"},
{"ind_3fp", "يَهْمُمْنَ"},
{"ind_3fs", "تَهُمُّ"},
{"ind_3md", "يَهُمَّانِ"},
{"ind_3mp", "يَهُمُّونَ"},
{"ind_3ms", "يَهُمُّ"},
{"past_1p", "هَمُمْنَا"},
{"past_1s", "هَمُمْتُ"},
{"past_2d", "هَمُمْتُمَا"},
{"past_2fp", "هَمُمْتُنَّ"},
{"past_2fs", "هَمُمْتِ"},
{"past_2mp", "هَمُمْتُمْ"},
{"past_2ms", "هَمُمْتَ"},
{"past_3fd", "هَمَّتَا"},
{"past_3fp", "هَمُمْنَ"},
{"past_3fs", "هَمَّتْ"},
{"past_3md", "هَمَّا"},
{"past_3mp", "هَمُّوا"},
{"past_3ms", "هَمَّ"},
},
},
{
label = "أَصُلَ ـُ (p.195، مهموز الفاء)", root = "أصل", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُؤْصُلَا"},
{"imp_2fp", "اُؤْصُلْنَ"},
{"imp_2fs", "اُؤْصُلِي"},
{"imp_2mp", "اُؤْصُلُوا"},
{"imp_2ms", "اُؤْصُلْ"},
{"ind_1p", "نَأْصُلُ"},
{"ind_1s", "آصُلُ"},
{"ind_2d", "تَأْصُلَانِ"},
{"ind_2fp", "تَأْصُلْنَ"},
{"ind_2fs", "تَأْصُلِينَ"},
{"ind_2mp", "تَأْصُلُونَ"},
{"ind_2ms", "تَأْصُلُ"},
{"ind_3fd", "تَأْصُلَانِ"},
{"ind_3fp", "يَأْصُلْنَ"},
{"ind_3fs", "تَأْصُلُ"},
{"ind_3md", "يَأْصُلَانِ"},
{"ind_3mp", "يَأْصُلُونَ"},
{"ind_3ms", "يَأْصُلُ"},
{"past_1p", "أَصُلْنَا"},
{"past_1s", "أَصُلْتُ"},
{"past_2d", "أَصُلْتُمَا"},
{"past_2fp", "أَصُلْتُنَّ"},
{"past_2fs", "أَصُلْتِ"},
{"past_2mp", "أَصُلْتُمْ"},
{"past_2ms", "أَصُلْتَ"},
{"past_3fd", "أَصُلَتَا"},
{"past_3fp", "أَصُلْنَ"},
{"past_3fs", "أَصُلَتْ"},
{"past_3md", "أَصُلَا"},
{"past_3mp", "أَصُلُوا"},
{"past_3ms", "أَصُلَ"},
},
},
{
label = "جَرُؤَ ـُ (p.199، مهموز اللام)", root = "جرأ", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُجْرُؤَا"},
{"imp_2fp", "اُجْرُؤْنَ"},
{"imp_2fs", "اُجْرُئِي"},
{"imp_2mp", "اُجْرُؤُوا"},
{"imp_2ms", "اُجْرُؤْ"},
{"ind_1p", "نَجْرُؤُ"},
{"ind_1s", "أَجْرُؤُ"},
{"ind_2d", "تَجْرُؤَانِ"},
{"ind_2fp", "تَجْرُؤْنَ"},
{"ind_2fs", "تَجْرُئِينَ"},
{"ind_2mp", "تَجْرُؤُونَ"},
{"ind_2ms", "تَجْرُؤُ"},
{"ind_3fd", "تَجْرُؤَانِ"},
{"ind_3fp", "يَجْرُؤْنَ"},
{"ind_3fs", "تَجْرُؤُ"},
{"ind_3md", "يَجْرُؤَانِ"},
{"ind_3mp", "يَجْرُؤُونَ"},
{"ind_3ms", "يَجْرُؤُ"},
{"past_1p", "جَرُؤْنَا"},
{"past_1s", "جَرُؤْتُ"},
{"past_2d", "جَرُؤْتُمَا"},
{"past_2fp", "جَرُؤْتُنَّ"},
{"past_2fs", "جَرُؤْتِ"},
{"past_2mp", "جَرُؤْتُمْ"},
{"past_2ms", "جَرُؤْتَ"},
{"past_3fd", "جَرُؤَتَا"},
{"past_3fp", "جَرُؤْنَ"},
{"past_3fs", "جَرُؤَتْ"},
{"past_3md", "جَرُؤَا"},
{"past_3mp", "جَرُؤُوا"},
{"past_3ms", "جَرُؤَ"},
},
},
{
label = "يَسُرَ ـُ (p.201، معتل الفاء مثال)", root = "يسر", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُوسُرَا"},
{"imp_2fp", "اُوسُرْنَ"},
{"imp_2fs", "اُوسُرِي"},
{"imp_2mp", "اُوسُرُوا"},
{"imp_2ms", "اُوسُرْ"},
{"ind_1p", "نَيْسُرُ"},
{"ind_1s", "أَيْسُرُ"},
{"ind_2d", "تَيْسُرَانِ"},
{"ind_2fp", "تَيْسُرْنَ"},
{"ind_2fs", "تَيْسُرِينَ"},
{"ind_2mp", "تَيْسُرُونَ"},
{"ind_2ms", "تَيْسُرُ"},
{"ind_3fd", "تَيْسُرَانِ"},
{"ind_3fp", "يَيْسُرْنَ"},
{"ind_3fs", "تَيْسُرُ"},
{"ind_3md", "يَيْسُرَانِ"},
{"ind_3mp", "يَيْسُرُونَ"},
{"ind_3ms", "يَيْسُرُ"},
{"past_1p", "يَسُرْنَا"},
{"past_1s", "يَسُرْتُ"},
{"past_2d", "يَسُرْتُمَا"},
{"past_2fp", "يَسُرْتُنَّ"},
{"past_2fs", "يَسُرْتِ"},
{"past_2mp", "يَسُرْتُمْ"},
{"past_2ms", "يَسُرْتَ"},
{"past_3fd", "يَسُرَتَا"},
{"past_3fp", "يَسُرْنَ"},
{"past_3fs", "يَسُرَتْ"},
{"past_3md", "يَسُرَا"},
{"past_3mp", "يَسُرُوا"},
{"past_3ms", "يَسُرَ"},
},
},
{
label = "سَهُوَ ـُ (p.204، ناقص واوي)", root = "سهو", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُسْهُوَا"},
{"imp_2fp", "اُسْهُونَ"},
{"imp_2fs", "اُسْهُوِي"},
{"imp_2mp", "اُسْهُوا"},
{"imp_2ms", "اُسْهُ"},
{"ind_1p", "نَسْهُو"},
{"ind_1s", "أَسْهُو"},
{"ind_2d", "تَسْهُوَانِ"},
{"ind_2fp", "تَسْهُونَ"},
{"ind_2fs", "تَسْهُوِينَ"},
{"ind_2mp", "تَسْهُونَ"},
{"ind_2ms", "تَسْهُو"},
{"ind_3fd", "تَسْهُوَانِ"},
{"ind_3fp", "يَسْهُونَ"},
{"ind_3fs", "تَسْهُو"},
{"ind_3md", "يَسْهُوَانِ"},
{"ind_3mp", "يَسْهُونَ"},
{"ind_3ms", "يَسْهُو"},
{"past_1p", "سَهُونَا"},
{"past_1s", "سَهُوتُ"},
{"past_2d", "سَهُوتُمَا"},
{"past_2fp", "سَهُوتُنَّ"},
{"past_2fs", "سَهُوتِ"},
{"past_2mp", "سَهُوتُمْ"},
{"past_2ms", "سَهُوتَ"},
{"past_3fd", "سَهُوَتَا"},
{"past_3fp", "سَهُونَ"},
{"past_3fs", "سَهُوَتْ"},
{"past_3md", "سَهُوَا"},
{"past_3mp", "سَهُوا"},
{"past_3ms", "سَهُوَ"},
},
},
{
label = "عَلِمَ ـَ (p.206، صحيح سالم)", root = "علم", wazn = "فعِل يفعَل",
pass = true,
forms = {
{"imp_2d", "اِعْلَمَا"},
{"imp_2fp", "اِعْلَمْنَ"},
{"imp_2fs", "اِعْلَمِي"},
{"imp_2mp", "اِعْلَمُوا"},
{"imp_2ms", "اِعْلَمْ"},
{"ind_1p", "نَعْلَمُ"},
{"ind_1s", "أَعْلَمُ"},
{"ind_2d", "تَعْلَمَانِ"},
{"ind_2fp", "تَعْلَمْنَ"},
{"ind_2fs", "تَعْلَمِينَ"},
{"ind_2mp", "تَعْلَمُونَ"},
{"ind_2ms", "تَعْلَمُ"},
{"ind_3fd", "تَعْلَمَانِ"},
{"ind_3fp", "يَعْلَمْنَ"},
{"ind_3fs", "تَعْلَمُ"},
{"ind_3md", "يَعْلَمَانِ"},
{"ind_3mp", "يَعْلَمُونَ"},
{"ind_3ms", "يَعْلَمُ"},
{"ind_pass_1p", "نُعْلَمُ"},
{"ind_pass_1s", "أُعْلَمُ"},
{"ind_pass_2d", "تُعْلَمَانِ"},
{"ind_pass_2fp", "تُعْلَمْنَ"},
{"ind_pass_2fs", "تُعْلَمِينَ"},
{"ind_pass_2mp", "تُعْلَمُونَ"},
{"ind_pass_2ms", "تُعْلَمُ"},
{"ind_pass_3fd", "تُعْلَمَانِ"},
{"ind_pass_3fp", "يُعْلَمْنَ"},
{"ind_pass_3fs", "تُعْلَمُ"},
{"ind_pass_3md", "يُعْلَمَانِ"},
{"ind_pass_3mp", "يُعْلَمُونَ"},
{"ind_pass_3ms", "يُعْلَمُ"},
{"past_1p", "عَلِمْنَا"},
{"past_1s", "عَلِمْتُ"},
{"past_2d", "عَلِمْتُمَا"},
{"past_2fp", "عَلِمْتُنَّ"},
{"past_2fs", "عَلِمْتِ"},
{"past_2mp", "عَلِمْتُمْ"},
{"past_2ms", "عَلِمْتَ"},
{"past_3fd", "عَلِمَتَا"},
{"past_3fp", "عَلِمْنَ"},
{"past_3fs", "عَلِمَتْ"},
{"past_3md", "عَلِمَا"},
{"past_3mp", "عَلِمُوا"},
{"past_3ms", "عَلِمَ"},
{"past_pass_1p", "عُلِمْنَا"},
{"past_pass_1s", "عُلِمْتُ"},
{"past_pass_2d", "عُلِمْتُمَا"},
{"past_pass_2fp", "عُلِمْتُنَّ"},
{"past_pass_2fs", "عُلِمْتِ"},
{"past_pass_2mp", "عُلِمْتُمْ"},
{"past_pass_2ms", "عُلِمْتَ"},
{"past_pass_3fd", "عُلِمَتَا"},
{"past_pass_3fp", "عُلِمْنَ"},
{"past_pass_3fs", "عُلِمَتْ"},
{"past_pass_3md", "عُلِمَا"},
{"past_pass_3mp", "عُلِمُوا"},
{"past_pass_3ms", "عُلِمَ"},
},
},
{
label = "ظَلَّ ـَ (p.210، مضاعف)", root = "ظلل", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "ظَلَّا"},
{"imp_2fp", "اِظْلَلْنَ"},
{"imp_2fs", "ظَلِّي"},
{"imp_2mp", "ظَلُّوا"},
{"imp_2ms", "ظَلَّ"},
{"ind_1p", "نَظَلُّ"},
{"ind_1s", "أَظَلُّ"},
{"ind_2d", "تَظَلَّانِ"},
{"ind_2fp", "تَظْلَلْنَ"},
{"ind_2fs", "تَظَلِّينَ"},
{"ind_2mp", "تَظَلُّونَ"},
{"ind_2ms", "تَظَلُّ"},
{"ind_3fd", "تَظَلَّانِ"},
{"ind_3fp", "يَظْلَلْنَ"},
{"ind_3fs", "تَظَلُّ"},
{"ind_3md", "يَظَلَّانِ"},
{"ind_3mp", "يَظَلُّونَ"},
{"ind_3ms", "يَظَلُّ"},
{"past_1p", "ظَلِلْنَا"},
{"past_1s", "ظَلِلْتُ"},
{"past_2d", "ظَلِلْتُمَا"},
{"past_2fp", "ظَلِلْتُنَّ"},
{"past_2fs", "ظَلِلْتِ"},
{"past_2mp", "ظَلِلْتُمْ"},
{"past_2ms", "ظَلِلْتَ"},
{"past_3fd", "ظَلَّتَا"},
{"past_3fp", "ظَلِلْنَ"},
{"past_3fs", "ظَلَّتْ"},
{"past_3md", "ظَلَّا"},
{"past_3mp", "ظَلُّوا"},
{"past_3ms", "ظَلَّ"},
},
},
{
label = "أَلِفَ ـَ (p.213، مهموز الفاء)", root = "ألف", wazn = "فعِل يفعَل",
pass = true,
forms = {
{"imp_2d", "اِئْلَفَا"},
{"imp_2fp", "اِئْلَفْنَ"},
{"imp_2fs", "اِئْلَفِي"},
{"imp_2mp", "اِئْلَفُوا"},
{"imp_2ms", "اِئْلَفْ"},
{"ind_1p", "نَأْلَفُ"},
{"ind_1s", "آلَفُ"},
{"ind_2d", "تَأْلَفَانِ"},
{"ind_2fp", "تَأْلَفْنَ"},
{"ind_2fs", "تَأْلَفِينَ"},
{"ind_2mp", "تَأْلَفُونَ"},
{"ind_2ms", "تَأْلَفُ"},
{"ind_3fd", "تَأْلَفَانِ"},
{"ind_3fp", "يَأْلَفْنَ"},
{"ind_3fs", "تَأْلَفُ"},
{"ind_3md", "يَأْلَفَانِ"},
{"ind_3mp", "يَأْلَفُونَ"},
{"ind_3ms", "يَأْلَفُ"},
{"ind_pass_1p", "نُؤْلَفُ"},
{"ind_pass_1s", "أُولَفُ"},
{"ind_pass_2d", "تُؤْلَفَانِ"},
{"ind_pass_2fp", "تُؤْلَفْنَ"},
{"ind_pass_2fs", "تُؤْلَفِينَ"},
{"ind_pass_2mp", "تُؤْلَفُونَ"},
{"ind_pass_2ms", "تُؤْلَفُ"},
{"ind_pass_3fd", "تُؤْلَفَانِ"},
{"ind_pass_3fp", "يُؤْلَفْنَ"},
{"ind_pass_3fs", "تُؤْلَفُ"},
{"ind_pass_3md", "يُؤْلَفَانِ"},
{"ind_pass_3mp", "يُؤْلَفُونَ"},
{"ind_pass_3ms", "يُؤْلَفُ"},
{"past_1p", "أَلِفْنَا"},
{"past_1s", "أَلِفْتُ"},
{"past_2d", "أَلِفْتُمَا"},
{"past_2fp", "أَلِفْتُنَّ"},
{"past_2fs", "أَلِفْتِ"},
{"past_2mp", "أَلِفْتُمْ"},
{"past_2ms", "أَلِفْتَ"},
{"past_3fd", "أَلِفَتَا"},
{"past_3fp", "أَلِفْنَ"},
{"past_3fs", "أَلِفَتْ"},
{"past_3md", "أَلِفَا"},
{"past_3mp", "أَلِفُوا"},
{"past_3ms", "أَلِفَ"},
{"past_pass_1p", "أُلِفْنَا"},
{"past_pass_1s", "أُلِفْتُ"},
{"past_pass_2d", "أُلِفْتُمَا"},
{"past_pass_2fp", "أُلِفْتُنَّ"},
{"past_pass_2fs", "أُلِفْتِ"},
{"past_pass_2mp", "أُلِفْتُمْ"},
{"past_pass_2ms", "أُلِفْتَ"},
{"past_pass_3fd", "أُلِفَتَا"},
{"past_pass_3fp", "أُلِفْنَ"},
{"past_pass_3fs", "أُلِفَتْ"},
{"past_pass_3md", "أُلِفَا"},
{"past_pass_3mp", "أُلِفُوا"},
{"past_pass_3ms", "أُلِفَ"},
},
},
{
label = "بَئِسَ ـَ (p.216، مهموز العين)", root = "بأس", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِبْأَسَا"},
{"imp_2fp", "اِبْأَسْنَ"},
{"imp_2fs", "اِبْأَسِي"},
{"imp_2mp", "اِبْأَسُوا"},
{"imp_2ms", "اِبْأَسْ"},
{"ind_1p", "نَبْأَسُ"},
{"ind_1s", "أَبْأَسُ"},
{"ind_2d", "تَبْأَسَانِ"},
{"ind_2fp", "تَبْأَسْنَ"},
{"ind_2fs", "تَبْأَسِينَ"},
{"ind_2mp", "تَبْأَسُونَ"},
{"ind_2ms", "تَبْأَسُ"},
{"ind_3fd", "تَبْأَسَانِ"},
{"ind_3fp", "يَبْأَسْنَ"},
{"ind_3fs", "تَبْأَسُ"},
{"ind_3md", "يَبْأَسَانِ"},
{"ind_3mp", "يَبْأَسُونَ"},
{"ind_3ms", "يَبْأَسُ"},
{"past_1p", "بَئِسْنَا"},
{"past_1s", "بَئِسْتُ"},
{"past_2d", "بَئِسْتُمَا"},
{"past_2fp", "بَئِسْتُنَّ"},
{"past_2fs", "بَئِسْتِ"},
{"past_2mp", "بَئِسْتُمْ"},
{"past_2ms", "بَئِسْتَ"},
{"past_3fd", "بَئِسَتَا"},
{"past_3fp", "بَئِسْنَ"},
{"past_3fs", "بَئِسَتْ"},
{"past_3md", "بَئِسَا"},
{"past_3mp", "بَئِسُوا"},
{"past_3ms", "بَئِسَ"},
},
},
{
label = "خَطِئَ ـَ (p.219، مهموز اللام)", root = "خطأ", wazn = "فعِل يفعَل",
pass = true,
forms = {
{"imp_2d", "اِخْطَآ"},
{"imp_2fp", "اِخْطَأْنَ"},
{"imp_2fs", "اِخْطَئِي"},
{"imp_2mp", "اِخْطَؤُوا"},
{"imp_2ms", "اِخْطَأْ"},
{"ind_1p", "نَخْطَأُ"},
{"ind_1s", "أَخْطَأُ"},
{"ind_2d", "تَخْطَآنِ"},
{"ind_2fp", "تَخْطَأْنَ"},
{"ind_2fs", "تَخْطَئِينَ"},
{"ind_2mp", "تَخْطَؤُونَ"},
{"ind_2ms", "تَخْطَأُ"},
{"ind_3fd", "تَخْطَآنِ"},
{"ind_3fp", "يَخْطَأْنَ"},
{"ind_3fs", "تَخْطَأُ"},
{"ind_3md", "يَخْطَآنِ"},
{"ind_3mp", "يَخْطَؤُونَ"},
{"ind_3ms", "يَخْطَأُ"},
{"ind_pass_1p", "نُخْطَأُ"},
{"ind_pass_1s", "أُخْطَأُ"},
{"ind_pass_2d", "تُخْطَآنِ"},
{"ind_pass_2fp", "تُخْطَأْنَ"},
{"ind_pass_2fs", "تُخْطَئِينَ"},
{"ind_pass_2mp", "تُخْطَؤُونَ"},
{"ind_pass_2ms", "تُخْطَأُ"},
{"ind_pass_3fd", "تُخْطَآنِ"},
{"ind_pass_3fp", "يُخْطَأْنَ"},
{"ind_pass_3fs", "تُخْطَأُ"},
{"ind_pass_3md", "يُخْطَآنِ"},
{"ind_pass_3mp", "يُخْطَؤُونَ"},
{"ind_pass_3ms", "يُخْطَأُ"},
{"past_1p", "خَطِئْنَا"},
{"past_1s", "خَطِئْتُ"},
{"past_2d", "خَطِئْتُمَا"},
{"past_2fp", "خَطِئْتُنَّ"},
{"past_2fs", "خَطِئْتِ"},
{"past_2mp", "خَطِئْتُمْ"},
{"past_2ms", "خَطِئْتَ"},
{"past_3fd", "خَطِئَتَا"},
{"past_3fp", "خَطِئْنَ"},
{"past_3fs", "خَطِئَتْ"},
{"past_3md", "خَطِئَا"},
{"past_3mp", "خَطِئُوا"},
{"past_3ms", "خَطِئَ"},
{"past_pass_1p", "خُطِئْنَا"},
{"past_pass_1s", "خُطِئْتُ"},
{"past_pass_2d", "خُطِئْتُمَا"},
{"past_pass_2fp", "خُطِئْتُنَّ"},
{"past_pass_2fs", "خُطِئْتِ"},
{"past_pass_2mp", "خُطِئْتُمْ"},
{"past_pass_2ms", "خُطِئْتَ"},
{"past_pass_3fd", "خُطِئَتَا"},
{"past_pass_3fp", "خُطِئْنَ"},
{"past_pass_3fs", "خُطِئَتْ"},
{"past_pass_3md", "خُطِئَا"},
{"past_pass_3mp", "خُطِئُوا"},
{"past_pass_3ms", "خُطِئَ"},
},
},
{
label = "يَقِظَ ـَ (p.222، معتل الفاء مثال)", root = "يقظ", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِيقَظَا"},
{"imp_2fp", "اِيقَظْنَ"},
{"imp_2fs", "اِيقَظِي"},
{"imp_2mp", "اِيقَظُوا"},
{"imp_2ms", "اِيقَظْ"},
{"ind_1p", "نَيْقَظُ"},
{"ind_1s", "أَيْقَظُ"},
{"ind_2d", "تَيْقَظَانِ"},
{"ind_2fp", "تَيْقَظْنَ"},
{"ind_2fs", "تَيْقَظِينَ"},
{"ind_2mp", "تَيْقَظُونَ"},
{"ind_2ms", "تَيْقَظُ"},
{"ind_3fd", "تَيْقَظَانِ"},
{"ind_3fp", "يَيْقَظْنَ"},
{"ind_3fs", "تَيْقَظُ"},
{"ind_3md", "يَيْقَظَانِ"},
{"ind_3mp", "يَيْقَظُونَ"},
{"ind_3ms", "يَيْقَظُ"},
{"past_1p", "يَقِظْنَا"},
{"past_1s", "يَقِظْتُ"},
{"past_2d", "يَقِظْتُمَا"},
{"past_2fp", "يَقِظْتُنَّ"},
{"past_2fs", "يَقِظْتِ"},
{"past_2mp", "يَقِظْتُمْ"},
{"past_2ms", "يَقِظْتَ"},
{"past_3fd", "يَقِظَتَا"},
{"past_3fp", "يَقِظْنَ"},
{"past_3fs", "يَقِظَتْ"},
{"past_3md", "يَقِظَا"},
{"past_3mp", "يَقِظُوا"},
{"past_3ms", "يَقِظَ"},
},
},
{
label = "وَنِيَ ـَ (p.230، لفيف مفروق)", root = "وني", wazn = "فعِل يفعَل",
pass = true,
forms = {
{"imp_2d", "اِوْنَيَا"},
{"imp_2fp", "اِوْنَيْنَ"},
{"imp_2mp", "اِوْنَوْا"},
{"imp_2ms", "اِوْنَ"},
{"ind_1p", "نَوْنَى"},
{"ind_1s", "أَوْنَى"},
{"ind_2d", "تَوْنَيَانِ"},
{"ind_2fp", "تَوْنَيْنَ"},
{"ind_2fs", "تَوْنَيْنَ"},
{"ind_2mp", "تَوْنَوْنَ"},
{"ind_2ms", "تَوْنَى"},
{"ind_3fd", "تَوْنَيَانِ"},
{"ind_3fp", "يَوْنَيْنَ"},
{"ind_3fs", "تَوْنَى"},
{"ind_3md", "يَوْنَيَانِ"},
{"ind_3mp", "يَوْنَوْنَ"},
{"ind_3ms", "يَوْنَى"},
{"ind_pass_1p", "نُونَى"},
{"ind_pass_1s", "أُونَى"},
{"ind_pass_2d", "تُونَيَانِ"},
{"ind_pass_2fp", "تُونَيْنَ"},
{"ind_pass_2fs", "تُونَيْنَ"},
{"ind_pass_2mp", "تُونَوْنَ"},
{"ind_pass_2ms", "تُونَى"},
{"ind_pass_3fd", "تُونَيَانِ"},
{"ind_pass_3fp", "يُونَيْنَ"},
{"ind_pass_3fs", "تُونَى"},
{"ind_pass_3md", "يُونَيَانِ"},
{"ind_pass_3mp", "يُونَوْنَ"},
{"ind_pass_3ms", "يُونَى"},
{"past_1p", "وَنِينَا"},
{"past_1s", "وَنِيتُ"},
{"past_2d", "وَنِيتُمَا"},
{"past_2fp", "وَنِيتُنَّ"},
{"past_2fs", "وَنِيتِ"},
{"past_2mp", "وَنِيتُمْ"},
{"past_2ms", "وَنِيتَ"},
{"past_3fd", "وَنِيَتَا"},
{"past_3fp", "وَنِينَ"},
{"past_3fs", "وَنِيَتْ"},
{"past_3md", "وَنِيَا"},
{"past_3mp", "وَنُوا"},
{"past_3ms", "وَنِيَ"},
{"past_pass_1p", "وُنِينَا"},
{"past_pass_1s", "وُنِيتُ"},
{"past_pass_2d", "وُنِيتُمَا"},
{"past_pass_2fp", "وُنِيتُنَّ"},
{"past_pass_2fs", "وُنِيتِ"},
{"past_pass_2mp", "وُنِيتُمْ"},
{"past_pass_2ms", "وُنِيتَ"},
{"past_pass_3fd", "وُنِيَتَا"},
{"past_pass_3fp", "وُنِينَ"},
{"past_pass_3fs", "وُنِيَتْ"},
{"past_pass_3md", "وُنِيَا"},
{"past_pass_3mp", "وُنُوا"},
{"past_pass_3ms", "وُنِيَ"},
},
},
{
label = "وَثِقَ ـِ (p.236، معتل الفاء مثال)", root = "وثق", wazn = "فعِل يفعِل",
pass = true,
forms = {
{"imp_2d", "ثِقَا"},
{"imp_2fp", "ثِقْنَ"},
{"imp_2fs", "ثِقِي"},
{"imp_2mp", "ثِقُوا"},
{"imp_2ms", "ثِقْ"},
{"ind_1p", "نَثِقُ"},
{"ind_1s", "أَثِقُ"},
{"ind_2d", "تَثِقَانِ"},
{"ind_2fp", "تَثِقْنَ"},
{"ind_2fs", "تَثِقِينَ"},
{"ind_2mp", "تَثِقُونَ"},
{"ind_2ms", "تَثِقُ"},
{"ind_3fd", "تَثِقَانِ"},
{"ind_3fp", "يَثِقْنَ"},
{"ind_3fs", "تَثِقُ"},
{"ind_3md", "يَثِقَانِ"},
{"ind_3mp", "يَثِقُونَ"},
{"ind_3ms", "يَثِقُ"},
{"ind_pass_1p", "نُوثَقُ"},
{"ind_pass_1s", "أُوثَقُ"},
{"ind_pass_2d", "تُوثَقَانِ"},
{"ind_pass_2fp", "تُوثَقْنَ"},
{"ind_pass_2fs", "تُوثَقِينَ"},
{"ind_pass_2mp", "تُوثَقُونَ"},
{"ind_pass_2ms", "تُوثَقُ"},
{"ind_pass_3fd", "تُوثَقَانِ"},
{"ind_pass_3fp", "يُوثَقْنَ"},
{"ind_pass_3fs", "تُوثَقُ"},
{"ind_pass_3md", "يُوثَقَانِ"},
{"ind_pass_3mp", "يُوثَقُونَ"},
{"ind_pass_3ms", "يُوثَقُ"},
{"past_1p", "وَثِقْنَا"},
{"past_1s", "وَثِقْتُ"},
{"past_2d", "وَثِقْتُمَا"},
{"past_2fp", "وَثِقْتُنَّ"},
{"past_2fs", "وَثِقْتِ"},
{"past_2mp", "وَثِقْتُمْ"},
{"past_2ms", "وَثِقْتَ"},
{"past_3fd", "وَثِقَتَا"},
{"past_3fp", "وَثِقْنَ"},
{"past_3fs", "وَثِقَتْ"},
{"past_3md", "وَثِقَا"},
{"past_3mp", "وَثِقُوا"},
{"past_3ms", "وَثِقَ"},
{"past_pass_1p", "وُثِقْنَا"},
{"past_pass_1s", "وُثِقْتُ"},
{"past_pass_2d", "وُثِقْتُمَا"},
{"past_pass_2fp", "وُثِقْتُنَّ"},
{"past_pass_2fs", "وُثِقْتِ"},
{"past_pass_2mp", "وُثِقْتُمْ"},
{"past_pass_2ms", "وُثِقْتَ"},
{"past_pass_3fd", "وُثِقَتَا"},
{"past_pass_3fp", "وُثِقْنَ"},
{"past_pass_3fs", "وُثِقَتْ"},
{"past_pass_3md", "وُثِقَا"},
{"past_pass_3mp", "وُثِقُوا"},
{"past_pass_3ms", "وُثِقَ"},
},
},
{
label = "أَفْعَلَ (p.273، الوزن الرابع)", root = "فعل", wazn = "أفعل",
pass = true,
forms = {
{"imp_2d", "أَفْعِلَا"},
{"imp_2fp", "أَفْعِلْنَ"},
{"imp_2fs", "أَفْعِلِي"},
{"imp_2mp", "أَفْعِلُوا"},
{"imp_2ms", "أَفْعِلْ"},
{"ind_1p", "نُفْعِلُ"},
{"ind_1s", "أُفْعِلُ"},
{"ind_2d", "تُفْعِلَانِ"},
{"ind_2fp", "تُفْعِلْنَ"},
{"ind_2fs", "تُفْعِلِينَ"},
{"ind_2mp", "تُفْعِلُونَ"},
{"ind_2ms", "تُفْعِلُ"},
{"ind_3fd", "تُفْعِلَانِ"},
{"ind_3fp", "يُفْعِلْنَ"},
{"ind_3fs", "تُفْعِلُ"},
{"ind_3md", "يُفْعِلَانِ"},
{"ind_3mp", "يُفْعِلُونَ"},
{"ind_3ms", "يُفْعِلُ"},
{"ind_pass_1p", "نُفْعَلُ"},
{"ind_pass_1s", "أُفْعَلُ"},
{"ind_pass_2d", "تُفْعَلَانِ"},
{"ind_pass_2fp", "تُفْعَلْنَ"},
{"ind_pass_2fs", "تُفْعَلِينَ"},
{"ind_pass_2mp", "تُفْعَلُونَ"},
{"ind_pass_2ms", "تُفْعَلُ"},
{"ind_pass_3fd", "تُفْعَلَانِ"},
{"ind_pass_3fp", "يُفْعَلْنَ"},
{"ind_pass_3fs", "تُفْعَلُ"},
{"ind_pass_3md", "يُفْعَلَانِ"},
{"ind_pass_3mp", "يُفْعَلُونَ"},
{"ind_pass_3ms", "يُفْعَلُ"},
{"past_1p", "أَفْعَلْنَا"},
{"past_1s", "أَفْعَلْتُ"},
{"past_2d", "أَفْعَلْتُمَا"},
{"past_2fp", "أَفْعَلْتُنَّ"},
{"past_2fs", "أَفْعَلْتِ"},
{"past_2mp", "أَفْعَلْتُمْ"},
{"past_2ms", "أَفْعَلْتَ"},
{"past_3fd", "أَفْعَلَتَا"},
{"past_3fp", "أَفْعَلْنَ"},
{"past_3fs", "أَفْعَلَتْ"},
{"past_3md", "أَفْعَلَا"},
{"past_3mp", "أَفْعَلُوا"},
{"past_3ms", "أَفْعَلَ"},
{"past_pass_1p", "أُفْعِلْنَا"},
{"past_pass_1s", "أُفْعِلْتُ"},
{"past_pass_2d", "أُفْعِلْتُمَا"},
{"past_pass_2fp", "أُفْعِلْتُنَّ"},
{"past_pass_2fs", "أُفْعِلْتِ"},
{"past_pass_2mp", "أُفْعِلْتُمْ"},
{"past_pass_2ms", "أُفْعِلْتَ"},
{"past_pass_3fd", "أُفْعِلَتَا"},
{"past_pass_3fp", "أُفْعِلْنَ"},
{"past_pass_3fs", "أُفْعِلَتْ"},
{"past_pass_3md", "أُفْعِلَا"},
{"past_pass_3mp", "أُفْعِلُوا"},
{"past_pass_3ms", "أُفْعِلَ"},
},
},
{
label = "وَجَلَ ـُ (p.136، معتل الفاء مثال)", root = "وجل", wazn = "فعَل يفعُل",
pass = true,
forms = {
{"imp_2d", "اُوجُلَا"},
{"imp_2fp", "اُوجُلْنَ"},
{"imp_2fs", "اُوجُلِي"},
{"imp_2mp", "اُوجُلُوا"},
{"imp_2ms", "اُوجُلْ"},
{"ind_1p", "نَوْجُلُ"},
{"ind_1s", "أَوْجُلُ"},
{"ind_2d", "تَوْجُلَانِ"},
{"ind_2fp", "تَوْجُلْنَ"},
{"ind_2fs", "تَوْجُلِينَ"},
{"ind_2mp", "تَوْجُلُونَ"},
{"ind_2ms", "تَوْجُلُ"},
{"ind_3fd", "تَوْجُلَانِ"},
{"ind_3fp", "يَوْجُلْنَ"},
{"ind_3fs", "تَوْجُلُ"},
{"ind_3md", "يَوْجُلَانِ"},
{"ind_3mp", "يَوْجُلُونَ"},
{"ind_3ms", "يَوْجُلُ"},
{"ind_pass_1p", "نُوجَلُ"},
{"ind_pass_1s", "أُوجَلُ"},
{"ind_pass_2d", "تُوجَلَانِ"},
{"ind_pass_2fp", "تُوجَلْنَ"},
{"ind_pass_2fs", "تُوجَلِينَ"},
{"ind_pass_2mp", "تُوجَلُونَ"},
{"ind_pass_2ms", "تُوجَلُ"},
{"ind_pass_3fd", "تُوجَلَانِ"},
{"ind_pass_3fp", "يُوجَلْنَ"},
{"ind_pass_3fs", "تُوجَلُ"},
{"ind_pass_3md", "يُوجَلَانِ"},
{"ind_pass_3mp", "يُوجَلُونَ"},
{"ind_pass_3ms", "يُوجَلُ"},
{"past_1p", "وَجَلْنَا"},
{"past_1s", "وَجَلْتُ"},
{"past_2d", "وَجَلْتُمَا"},
{"past_2fp", "وَجَلْتُنَّ"},
{"past_2fs", "وَجَلْتِ"},
{"past_2mp", "وَجَلْتُمْ"},
{"past_2ms", "وَجَلْتَ"},
{"past_3fd", "وَجَلَتَا"},
{"past_3fp", "وَجَلْنَ"},
{"past_3fs", "وَجَلَتْ"},
{"past_3md", "وَجَلَا"},
{"past_3mp", "وَجَلُوا"},
{"past_3ms", "وَجَلَ"},
{"past_pass_1p", "وُجِلْنَا"},
{"past_pass_1s", "وُجِلْتُ"},
{"past_pass_2d", "وُجِلْتُمَا"},
{"past_pass_2fp", "وُجِلْتُنَّ"},
{"past_pass_2fs", "وُجِلْتِ"},
{"past_pass_2mp", "وُجِلْتُمْ"},
{"past_pass_2ms", "وُجِلْتَ"},
{"past_pass_3fd", "وُجِلَتَا"},
{"past_pass_3fp", "وُجِلْنَ"},
{"past_pass_3fs", "وُجِلَتْ"},
{"past_pass_3md", "وُجِلَا"},
{"past_pass_3mp", "وُجِلُوا"},
{"past_pass_3ms", "وُجِلَ"},
},
},
{
label = "أَثَرَ ـِ (p.151، صحيح مهموز الفاء)", root = "أثر", wazn = "فعَل يفعِل",
pass = true,
forms = {
{"imp_2d", "اِئْثِرَا"},
{"imp_2fp", "اِئْثِرْنَ"},
{"imp_2fs", "اِئْثِرِي"},
{"imp_2mp", "اِئْثِرُوا"},
{"imp_2ms", "اِئْثِرْ"},
{"ind_1p", "نَأْثِرُ"},
{"ind_1s", "آثِرُ"},
{"ind_2d", "تَأْثِرَانِ"},
{"ind_2fp", "تَأْثِرْنَ"},
{"ind_2fs", "تَأْثِرِينَ"},
{"ind_2mp", "تَأْثِرُونَ"},
{"ind_2ms", "تَأْثِرُ"},
{"ind_3fd", "تَأْثِرَانِ"},
{"ind_3fp", "يَأْثِرْنَ"},
{"ind_3fs", "تَأْثِرُ"},
{"ind_3md", "يَأْثِرَانِ"},
{"ind_3mp", "يَأْثِرُونَ"},
{"ind_3ms", "يَأْثِرُ"},
{"ind_pass_1p", "نُؤْثَرُ"},
{"ind_pass_1s", "أُوثَرُ"},
{"ind_pass_2d", "تُؤْثَرَانِ"},
{"ind_pass_2fp", "تُؤْثَرْنَ"},
{"ind_pass_2fs", "تُؤْثَرِينَ"},
{"ind_pass_2mp", "تُؤْثَرُونَ"},
{"ind_pass_2ms", "تُؤْثَرُ"},
{"ind_pass_3fd", "تُؤْثَرَانِ"},
{"ind_pass_3fp", "يُؤْثَرْنَ"},
{"ind_pass_3fs", "تُؤْثَرُ"},
{"ind_pass_3md", "يُؤْثَرَانِ"},
{"ind_pass_3mp", "يُؤْثَرُونَ"},
{"ind_pass_3ms", "يُؤْثَرُ"},
{"past_1p", "أَثَرْنَا"},
{"past_1s", "أَثَرْتُ"},
{"past_2d", "أَثَرْتُمَا"},
{"past_2fp", "أَثَرْتُنَّ"},
{"past_2fs", "أَثَرْتِ"},
{"past_2mp", "أَثَرْتُمْ"},
{"past_2ms", "أَثَرْتَ"},
{"past_3fd", "أَثَرَتَا"},
{"past_3fp", "أَثَرْنَ"},
{"past_3fs", "أَثَرَتْ"},
{"past_3md", "أَثَرَا"},
{"past_3mp", "أَثَرُوا"},
{"past_3ms", "أَثَرَ"},
{"past_pass_1p", "أُثِرْنَا"},
{"past_pass_1s", "أُثِرْتُ"},
{"past_pass_2d", "أُثِرْتُمَا"},
{"past_pass_2fp", "أُثِرْتُنَّ"},
{"past_pass_2fs", "أُثِرْتِ"},
{"past_pass_2mp", "أُثِرْتُمْ"},
{"past_pass_2ms", "أُثِرْتَ"},
{"past_pass_3fd", "أُثِرَتَا"},
{"past_pass_3fp", "أُثِرْنَ"},
{"past_pass_3fs", "أُثِرَتْ"},
{"past_pass_3md", "أُثِرَا"},
{"past_pass_3mp", "أُثِرُوا"},
{"past_pass_3ms", "أُثِرَ"},
},
},
{
label = "بَدَأَ ـَ (p.178، صحيح مهموز اللام)", root = "بدأ", wazn = "فعَل يفعَل",
pass = true,
forms = {
{"imp_2d", "اِبْدَآ"},
{"imp_2fp", "اِبْدَأْنَ"},
{"imp_2fs", "اِبْدَئِي"},
{"imp_2mp", "اِبْدَؤُوا"},
{"imp_2ms", "اِبْدَأْ"},
{"ind_1p", "نَبْدَأُ"},
{"ind_1s", "أَبْدَأُ"},
{"ind_2d", "تَبْدَآنِ"},
{"ind_2fp", "تَبْدَأْنَ"},
{"ind_2fs", "تَبْدَئِينَ"},
{"ind_2mp", "تَبْدَؤُونَ"},
{"ind_2ms", "تَبْدَأُ"},
{"ind_3fd", "تَبْدَآنِ"},
{"ind_3fp", "يَبْدَأْنَ"},
{"ind_3fs", "تَبْدَأُ"},
{"ind_3md", "يَبْدَآنِ"},
{"ind_3mp", "يَبْدَؤُونَ"},
{"ind_3ms", "يَبْدَأُ"},
{"ind_pass_1p", "نُبْدَأُ"},
{"ind_pass_1s", "أُبْدَأُ"},
{"ind_pass_2d", "تُبْدَآنِ"},
{"ind_pass_2fp", "تُبْدَأْنَ"},
{"ind_pass_2fs", "تُبْدَئِينَ"},
{"ind_pass_2mp", "تُبْدَؤُونَ"},
{"ind_pass_2ms", "تُبْدَأُ"},
{"ind_pass_3fd", "تُبْدَآنِ"},
{"ind_pass_3fp", "يُبْدَأْنَ"},
{"ind_pass_3fs", "تُبْدَأُ"},
{"ind_pass_3md", "يُبْدَآنِ"},
{"ind_pass_3mp", "يُبْدَؤُونَ"},
{"ind_pass_3ms", "يُبْدَأُ"},
{"past_1p", "بَدَأْنَا"},
{"past_1s", "بَدَأْتُ"},
{"past_2d", "بَدَأْتُمَا"},
{"past_2fp", "بَدَأْتُنَّ"},
{"past_2fs", "بَدَأْتِ"},
{"past_2mp", "بَدَأْتُمْ"},
{"past_2ms", "بَدَأْتَ"},
{"past_3fd", "بَدَأَتَا"},
{"past_3fp", "بَدَأْنَ"},
{"past_3fs", "بَدَأَتْ"},
{"past_3md", "بَدَآ"},
{"past_3mp", "بَدَؤُوا"},
{"past_3ms", "بَدَأَ"},
{"past_pass_1p", "بُدِئْنَا"},
{"past_pass_1s", "بُدِئْتُ"},
{"past_pass_2d", "بُدِئْتُمَا"},
{"past_pass_2fp", "بُدِئْتُنَّ"},
{"past_pass_2fs", "بُدِئْتِ"},
{"past_pass_2mp", "بُدِئْتُمْ"},
{"past_pass_2ms", "بُدِئْتَ"},
{"past_pass_3fd", "بُدِئَتَا"},
{"past_pass_3fp", "بُدِئْنَ"},
{"past_pass_3fs", "بُدِئَتْ"},
{"past_pass_3md", "بُدِئَا"},
{"past_pass_3mp", "بُدِئُوا"},
{"past_pass_3ms", "بُدِئَ"},
},
},
{
label = "حَسِبَ ـِ (p.234، صحيح سالم)", root = "حسب", wazn = "فعِل يفعِل",
pass = true,
forms = {
{"imp_2d", "اِحْسِبَا"},
{"imp_2fp", "اِحْسِبْنَ"},
{"imp_2fs", "اِحْسِبِي"},
{"imp_2mp", "اِحْسِبُوا"},
{"imp_2ms", "اِحْسِبْ"},
{"ind_1p", "نَحْسِبُ"},
{"ind_1s", "أَحْسِبُ"},
{"ind_2d", "تَحْسِبَانِ"},
{"ind_2fp", "تَحْسِبْنَ"},
{"ind_2fs", "تَحْسِبِينَ"},
{"ind_2mp", "تَحْسِبُونَ"},
{"ind_2ms", "تَحْسِبُ"},
{"ind_3fd", "تَحْسِبَانِ"},
{"ind_3fp", "يَحْسِبْنَ"},
{"ind_3fs", "تَحْسِبُ"},
{"ind_3md", "يَحْسِبَانِ"},
{"ind_3mp", "يَحْسِبُونَ"},
{"ind_3ms", "يَحْسِبُ"},
{"ind_pass_1p", "نُحْسَبُ"},
{"ind_pass_1s", "أُحْسَبُ"},
{"ind_pass_2d", "تُحْسَبَانِ"},
{"ind_pass_2fp", "تُحْسَبْنَ"},
{"ind_pass_2fs", "تُحْسَبِينَ"},
{"ind_pass_2mp", "تُحْسَبُونَ"},
{"ind_pass_2ms", "تُحْسَبُ"},
{"ind_pass_3fd", "تُحْسَبَانِ"},
{"ind_pass_3fp", "يُحْسَبْنَ"},
{"ind_pass_3fs", "تُحْسَبُ"},
{"ind_pass_3md", "يُحْسَبَانِ"},
{"ind_pass_3mp", "يُحْسَبُونَ"},
{"ind_pass_3ms", "يُحْسَبُ"},
{"past_1p", "حَسِبْنَا"},
{"past_1s", "حَسِبْتُ"},
{"past_2d", "حَسِبْتُمَا"},
{"past_2fp", "حَسِبْتُنَّ"},
{"past_2fs", "حَسِبْتِ"},
{"past_2mp", "حَسِبْتُمْ"},
{"past_2ms", "حَسِبْتَ"},
{"past_3fd", "حَسِبَتَا"},
{"past_3fp", "حَسِبْنَ"},
{"past_3fs", "حَسِبَتْ"},
{"past_3md", "حَسِبَا"},
{"past_3mp", "حَسِبُوا"},
{"past_3ms", "حَسِبَ"},
{"past_pass_1p", "حُسِبْنَا"},
{"past_pass_1s", "حُسِبْتُ"},
{"past_pass_2d", "حُسِبْتُمَا"},
{"past_pass_2fp", "حُسِبْتُنَّ"},
{"past_pass_2fs", "حُسِبْتِ"},
{"past_pass_2mp", "حُسِبْتُمْ"},
{"past_pass_2ms", "حُسِبْتَ"},
{"past_pass_3fd", "حُسِبَتَا"},
{"past_pass_3fp", "حُسِبْنَ"},
{"past_pass_3fs", "حُسِبَتْ"},
{"past_pass_3md", "حُسِبَا"},
{"past_pass_3mp", "حُسِبُوا"},
{"past_pass_3ms", "حُسِبَ"},
},
},
{
label = "اِدَّارَأَ (p.312، تفاعل مدغم مهموز اللام)", root = "درأ", wazn = "تفاعل",
reduced = true,
forms = {
{"imp_2d", "اِدَّارَآ"},
{"imp_2fp", "اِدَّارَأْنَ"},
{"imp_2fs", "اِدَّارَئِي"},
{"imp_2mp", "اِدَّارَؤُوا"},
{"imp_2ms", "اِدَّارَأْ"},
{"ind_1p", "نَدَّارَأُ"},
{"ind_1s", "أَدَّارَأُ"},
{"ind_2d", "تَدَّارَآنِ"},
{"ind_2fp", "تَدَّارَأْنَ"},
{"ind_2fs", "تَدَّارَئِينَ"},
{"ind_2mp", "تَدَّارَؤُونَ"},
{"ind_2ms", "تَدَّارَأُ"},
{"ind_3fd", "تَدَّارَآنِ"},
{"ind_3fp", "يَدَّارَأْنَ"},
{"ind_3fs", "تَدَّارَأُ"},
{"ind_3md", "يَدَّارَآنِ"},
{"ind_3mp", "يَدَّارَؤُونَ"},
{"ind_3ms", "يَدَّارَأُ"},
{"past_1p", "اِدَّارَأْنَا"},
{"past_1s", "اِدَّارَأْتُ"},
{"past_2d", "اِدَّارَأْتُمَا"},
{"past_2fp", "اِدَّارَأْتُنَّ"},
{"past_2fs", "اِدَّارَأْتِ"},
{"past_2mp", "اِدَّارَأْتُمْ"},
{"past_2ms", "اِدَّارَأْتَ"},
{"past_3fd", "اِدَّارَأَتَا"},
{"past_3fp", "اِدَّارَأْنَ"},
{"past_3fs", "اِدَّارَأَتْ"},
{"past_3md", "اِدَّارَآ"},
{"past_3mp", "اِدَّارَؤُوا"},
{"past_3ms", "اِدَّارَأَ"},
},
},
}
6wsyp4rsgsdtmt96ucvf914why2iq7i
وحدة:ar-verb/testcases/2
828
241791
1159005
1158873
2026-09-10T12:39:13Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159005
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 2 من 15. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/2")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_2()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
4ma6n8wqqltdzetgm6nasy4m7cejh9z
1159063
1159005
2026-09-10T19:33:42Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159063
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 2 من 16. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/2")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_2()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
hbbhw6vsf47dcnpsr91vyu5p31l054b
وحدة:ar-verb/testcases/بيانات/3
828
241792
1159007
1158875
2026-09-10T12:39:16Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159007
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 3 من 15.
return {
{
label = "اِتّايَعَ (p.316، تفاعل مدغم، معتل العين)", root = "تيع", wazn = "تفاعل",
reduced = true,
forms = {
{"imp_2d", "اِتَّايَعَا"},
{"imp_2fp", "اِتَّايَعْنَ"},
{"imp_2fs", "اِتَّايَعِي"},
{"imp_2mp", "اِتَّايَعُوا"},
{"imp_2ms", "اِتَّايَعْ"},
{"ind_1p", "نَتَّايَعُ"},
{"ind_1s", "أَتَّايَعُ"},
{"ind_2d", "تَتَّايَعَانِ"},
{"ind_2fp", "تَتَّايَعْنَ"},
{"ind_2fs", "تَتَّايَعِينَ"},
{"ind_2mp", "تَتَّايَعُونَ"},
{"ind_2ms", "تَتَّايَعُ"},
{"ind_3fd", "تَتَّايَعَانِ"},
{"ind_3fp", "يَتَّايَعْنَ"},
{"ind_3fs", "تَتَّايَعُ"},
{"ind_3md", "يَتَّايَعَانِ"},
{"ind_3mp", "يَتَّايَعُونَ"},
{"ind_3ms", "يَتَّايَعُ"},
{"past_1p", "اِتَّايَعْنَا"},
{"past_1s", "اِتَّايَعْتُ"},
{"past_2d", "اِتَّايَعْتُمَا"},
{"past_2fp", "اِتَّايَعْتُنَّ"},
{"past_2fs", "اِتَّايَعْتِ"},
{"past_2mp", "اِتَّايَعْتُمْ"},
{"past_2ms", "اِتَّايَعْتَ"},
{"past_3fd", "اِتَّايَعَتَا"},
{"past_3fp", "اِتَّايَعْنَ"},
{"past_3fs", "اِتَّايَعَتْ"},
{"past_3md", "اِتَّايَعَا"},
{"past_3mp", "اِتَّايَعُوا"},
{"past_3ms", "اِتَّايَعَ"},
},
},
{
label = "اِنْفَعَلَ (p.321، abstract paradigm)", root = "فعل", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْفَعِلَا"},
{"imp_2fp", "اِنْفَعِلْنَ"},
{"imp_2fs", "اِنْفَعِلِي"},
{"imp_2mp", "اِنْفَعِلُوا"},
{"imp_2ms", "اِنْفَعِلْ"},
{"ind_1p", "نَنْفَعِلُ"},
{"ind_1s", "أَنْفَعِلُ"},
{"ind_2d", "تَنْفَعِلَانِ"},
{"ind_2fp", "تَنْفَعِلْنَ"},
{"ind_2fs", "تَنْفَعِلِينَ"},
{"ind_2mp", "تَنْفَعِلُونَ"},
{"ind_2ms", "تَنْفَعِلُ"},
{"ind_3fd", "تَنْفَعِلَانِ"},
{"ind_3fp", "يَنْفَعِلْنَ"},
{"ind_3fs", "تَنْفَعِلُ"},
{"ind_3md", "يَنْفَعِلَانِ"},
{"ind_3mp", "يَنْفَعِلُونَ"},
{"ind_3ms", "يَنْفَعِلُ"},
{"past_1p", "اِنْفَعَلْنَا"},
{"past_1s", "اِنْفَعَلْتُ"},
{"past_2d", "اِنْفَعَلْتُمَا"},
{"past_2fp", "اِنْفَعَلْتُنَّ"},
{"past_2fs", "اِنْفَعَلْتِ"},
{"past_2mp", "اِنْفَعَلْتُمْ"},
{"past_2ms", "اِنْفَعَلْتَ"},
{"past_3fd", "اِنْفَعَلَتَا"},
{"past_3fp", "اِنْفَعَلْنَ"},
{"past_3fs", "اِنْفَعَلَتْ"},
{"past_3md", "اِنْفَعَلَا"},
{"past_3mp", "اِنْفَعَلُوا"},
{"past_3ms", "اِنْفَعَلَ"},
},
},
{
label = "اِنْأَطَرَ (p.325، انفعل مهموز الفاء)", root = "أطر", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْأَطِرَا"},
{"imp_2fp", "اِنْأَطِرْنَ"},
{"imp_2fs", "اِنْأَطِرِي"},
{"imp_2mp", "اِنْأَطِرُوا"},
{"imp_2ms", "اِنْأَطِرْ"},
{"ind_1p", "نَنْأَطِرُ"},
{"ind_1s", "أَنْأَطِرُ"},
{"ind_2d", "تَنْأَطِرَانِ"},
{"ind_2fp", "تَنْأَطِرْنَ"},
{"ind_2fs", "تَنْأَطِرِينَ"},
{"ind_2mp", "تَنْأَطِرُونَ"},
{"ind_2ms", "تَنْأَطِرُ"},
{"ind_3fd", "تَنْأَطِرَانِ"},
{"ind_3fp", "يَنْأَطِرْنَ"},
{"ind_3fs", "تَنْأَطِرُ"},
{"ind_3md", "يَنْأَطِرَانِ"},
{"ind_3mp", "يَنْأَطِرُونَ"},
{"ind_3ms", "يَنْأَطِرُ"},
{"past_1p", "اِنْأَطَرْنَا"},
{"past_1s", "اِنْأَطَرْتُ"},
{"past_2d", "اِنْأَطَرْتُمَا"},
{"past_2fp", "اِنْأَطَرْتُنَّ"},
{"past_2fs", "اِنْأَطَرْتِ"},
{"past_2mp", "اِنْأَطَرْتُمْ"},
{"past_2ms", "اِنْأَطَرْتَ"},
{"past_3fd", "اِنْأَطَرَتَا"},
{"past_3fp", "اِنْأَطَرْنَ"},
{"past_3fs", "اِنْأَطَرَتْ"},
{"past_3md", "اِنْأَطَرَا"},
{"past_3mp", "اِنْأَطَرُوا"},
{"past_3ms", "اِنْأَطَرَ"},
},
},
{
label = "اِفْعَلَّ (p.356، abstract paradigm)", root = "فعل", wazn = "افعلّ",
forms = {
{"imp_2d", "اِفْعَلَّا"},
{"imp_2fp", "اِفْعَلِلْنَ"},
{"imp_2fs", "اِفْعَلِّي"},
{"imp_2mp", "اِفْعَلُّوا"},
{"imp_2ms", "اِفْعَلَّ"},
{"ind_1p", "نَفْعَلُّ"},
{"ind_1s", "أَفْعَلُّ"},
{"ind_2d", "تَفْعَلَّانِ"},
{"ind_2fp", "تَفْعَلِلْنَ"},
{"ind_2fs", "تَفْعَلِّينَ"},
{"ind_2mp", "تَفْعَلُّونَ"},
{"ind_2ms", "تَفْعَلُّ"},
{"ind_3fd", "تَفْعَلَّانِ"},
{"ind_3fp", "يَفْعَلِلْنَ"},
{"ind_3fs", "تَفْعَلُّ"},
{"ind_3md", "يَفْعَلَّانِ"},
{"ind_3mp", "يَفْعَلُّونَ"},
{"ind_3ms", "يَفْعَلُّ"},
{"past_1p", "اِفْعَلَلْنَا"},
{"past_1s", "اِفْعَلَلْتُ"},
{"past_2d", "اِفْعَلَلْتُمَا"},
{"past_2fp", "اِفْعَلَلْتُنَّ"},
{"past_2fs", "اِفْعَلَلْتِ"},
{"past_2mp", "اِفْعَلَلْتُمْ"},
{"past_2ms", "اِفْعَلَلْتَ"},
{"past_3fd", "اِفْعَلَّتَا"},
{"past_3fp", "اِفْعَلَلْنَ"},
{"past_3fs", "اِفْعَلَّتْ"},
{"past_3md", "اِفْعَلَّا"},
{"past_3mp", "اِفْعَلُّوا"},
{"past_3ms", "اِفْعَلَّ"},
},
},
{
label = "اِسْتَفْعَلَ (p.360، abstract paradigm)", root = "فعل", wazn = "استفعل",
pass = true,
forms = {
{"imp_2d", "اِسْتَفْعِلَا"},
{"imp_2fp", "اِسْتَفْعِلْنَ"},
{"imp_2fs", "اِسْتَفْعِلِي"},
{"imp_2mp", "اِسْتَفْعِلُوا"},
{"imp_2ms", "اِسْتَفْعِلْ"},
{"ind_1p", "نَسْتَفْعِلُ"},
{"ind_1s", "أَسْتَفْعِلُ"},
{"ind_2d", "تَسْتَفْعِلَانِ"},
{"ind_2fp", "تَسْتَفْعِلْنَ"},
{"ind_2fs", "تَسْتَفْعِلِينَ"},
{"ind_2mp", "تَسْتَفْعِلُونَ"},
{"ind_2ms", "تَسْتَفْعِلُ"},
{"ind_3fd", "تَسْتَفْعِلَانِ"},
{"ind_3fp", "يَسْتَفْعِلْنَ"},
{"ind_3fs", "تَسْتَفْعِلُ"},
{"ind_3md", "يَسْتَفْعِلَانِ"},
{"ind_3mp", "يَسْتَفْعِلُونَ"},
{"ind_3ms", "يَسْتَفْعِلُ"},
{"ind_pass_1p", "نُسْتَفْعَلُ"},
{"ind_pass_1s", "أُسْتَفْعَلُ"},
{"ind_pass_2d", "تُسْتَفْعَلَانِ"},
{"ind_pass_2fp", "تُسْتَفْعَلْنَ"},
{"ind_pass_2fs", "تُسْتَفْعَلِينَ"},
{"ind_pass_2mp", "تُسْتَفْعَلُونَ"},
{"ind_pass_2ms", "تُسْتَفْعَلُ"},
{"ind_pass_3fd", "تُسْتَفْعَلَانِ"},
{"ind_pass_3fp", "يُسْتَفْعَلْنَ"},
{"ind_pass_3fs", "تُسْتَفْعَلُ"},
{"ind_pass_3md", "يُسْتَفْعَلَانِ"},
{"ind_pass_3mp", "يُسْتَفْعَلُونَ"},
{"ind_pass_3ms", "يُسْتَفْعَلُ"},
{"past_1p", "اِسْتَفْعَلْنَا"},
{"past_1s", "اِسْتَفْعَلْتُ"},
{"past_2d", "اِسْتَفْعَلْتُمَا"},
{"past_2fp", "اِسْتَفْعَلْتُنَّ"},
{"past_2fs", "اِسْتَفْعَلْتِ"},
{"past_2mp", "اِسْتَفْعَلْتُمْ"},
{"past_2ms", "اِسْتَفْعَلْتَ"},
{"past_3fd", "اِسْتَفْعَلَتَا"},
{"past_3fp", "اِسْتَفْعَلْنَ"},
{"past_3fs", "اِسْتَفْعَلَتْ"},
{"past_3md", "اِسْتَفْعَلَا"},
{"past_3mp", "اِسْتَفْعَلُوا"},
{"past_3ms", "اِسْتَفْعَلَ"},
{"past_pass_1p", "اُسْتُفْعِلْنَا"},
{"past_pass_1s", "اُسْتُفْعِلْتُ"},
{"past_pass_2d", "اُسْتُفْعِلْتُمَا"},
{"past_pass_2fp", "اُسْتُفْعِلْتُنَّ"},
{"past_pass_2fs", "اُسْتُفْعِلْتِ"},
{"past_pass_2mp", "اُسْتُفْعِلْتُمْ"},
{"past_pass_2ms", "اُسْتُفْعِلْتَ"},
{"past_pass_3fd", "اُسْتُفْعِلَتَا"},
{"past_pass_3fp", "اُسْتُفْعِلْنَ"},
{"past_pass_3fs", "اُسْتُفْعِلَتْ"},
{"past_pass_3md", "اُسْتُفْعِلَا"},
{"past_pass_3mp", "اُسْتُفْعِلُوا"},
{"past_pass_3ms", "اُسْتُفْعِلَ"},
},
},
{
label = "اِفْعَوْعَلَ (p.374، abstract paradigm)", root = "فعل", wazn = "افعوعل",
pass = true,
forms = {
{"imp_2d", "اِفْعَوْعِلَا"},
{"imp_2fp", "اِفْعَوْعِلْنَ"},
{"imp_2fs", "اِفْعَوْعِلِي"},
{"imp_2mp", "اِفْعَوْعِلُوا"},
{"imp_2ms", "اِفْعَوْعِلْ"},
{"ind_1p", "نَفْعَوْعِلُ"},
{"ind_1s", "أَفْعَوْعِلُ"},
{"ind_2d", "تَفْعَوْعِلَانِ"},
{"ind_2fp", "تَفْعَوْعِلْنَ"},
{"ind_2fs", "تَفْعَوْعِلِينَ"},
{"ind_2mp", "تَفْعَوْعِلُونَ"},
{"ind_2ms", "تَفْعَوْعِلُ"},
{"ind_3fd", "تَفْعَوْعِلَانِ"},
{"ind_3fp", "يَفْعَوْعِلْنَ"},
{"ind_3fs", "تَفْعَوْعِلُ"},
{"ind_3md", "يَفْعَوْعِلَانِ"},
{"ind_3mp", "يَفْعَوْعِلُونَ"},
{"ind_3ms", "يَفْعَوْعِلُ"},
{"ind_pass_1p", "نُفْعَوْعَلُ"},
{"ind_pass_1s", "أُفْعَوْعَلُ"},
{"ind_pass_2d", "تُفْعَوْعَلَانِ"},
{"ind_pass_2fp", "تُفْعَوْعَلْنَ"},
{"ind_pass_2fs", "تُفْعَوْعَلِينَ"},
{"ind_pass_2mp", "تُفْعَوْعَلُونَ"},
{"ind_pass_2ms", "تُفْعَوْعَلُ"},
{"ind_pass_3fd", "تُفْعَوْعَلَانِ"},
{"ind_pass_3fp", "يُفْعَوْعَلْنَ"},
{"ind_pass_3fs", "تُفْعَوْعَلُ"},
{"ind_pass_3md", "يُفْعَوْعَلَانِ"},
{"ind_pass_3mp", "يُفْعَوْعَلُونَ"},
{"ind_pass_3ms", "يُفْعَوْعَلُ"},
{"past_1p", "اِفْعَوْعَلْنَا"},
{"past_1s", "اِفْعَوْعَلْتُ"},
{"past_2d", "اِفْعَوْعَلْتُمَا"},
{"past_2fp", "اِفْعَوْعَلْتُنَّ"},
{"past_2fs", "اِفْعَوْعَلْتِ"},
{"past_2mp", "اِفْعَوْعَلْتُمْ"},
{"past_2ms", "اِفْعَوْعَلْتَ"},
{"past_3fd", "اِفْعَوْعَلَتَا"},
{"past_3fp", "اِفْعَوْعَلْنَ"},
{"past_3fs", "اِفْعَوْعَلَتْ"},
{"past_3md", "اِفْعَوْعَلَا"},
{"past_3mp", "اِفْعَوْعَلُوا"},
{"past_3ms", "اِفْعَوْعَلَ"},
{"past_pass_1p", "اُفْعُوعِلْنَا"},
{"past_pass_1s", "اُفْعُوعِلْتُ"},
{"past_pass_2d", "اُفْعُوعِلْتُمَا"},
{"past_pass_2fp", "اُفْعُوعِلْتُنَّ"},
{"past_pass_2fs", "اُفْعُوعِلْتِ"},
{"past_pass_2mp", "اُفْعُوعِلْتُمْ"},
{"past_pass_2ms", "اُفْعُوعِلْتَ"},
{"past_pass_3fd", "اُفْعُوعِلَتَا"},
{"past_pass_3fp", "اُفْعُوعِلْنَ"},
{"past_pass_3fs", "اُفْعُوعِلَتْ"},
{"past_pass_3md", "اُفْعُوعِلَا"},
{"past_pass_3mp", "اُفْعُوعِلُوا"},
{"past_pass_3ms", "اُفْعُوعِلَ"},
},
},
{
label = "اِفْعَوَّلَ (p.375، abstract paradigm)", root = "فعل", wazn = "افعوّل",
pass = true,
forms = {
{"imp_2d", "اِفْعَوِّلَا"},
{"imp_2fp", "اِفْعَوِّلْنَ"},
{"imp_2fs", "اِفْعَوِّلِي"},
{"imp_2mp", "اِفْعَوِّلُوا"},
{"imp_2ms", "اِفْعَوِّلْ"},
{"ind_1p", "نَفْعَوِّلُ"},
{"ind_1s", "أَفْعَوِّلُ"},
{"ind_2d", "تَفْعَوِّلَانِ"},
{"ind_2fp", "تَفْعَوِّلْنَ"},
{"ind_2fs", "تَفْعَوِّلِينَ"},
{"ind_2mp", "تَفْعَوِّلُونَ"},
{"ind_2ms", "تَفْعَوِّلُ"},
{"ind_3fd", "تَفْعَوِّلَانِ"},
{"ind_3fp", "يَفْعَوِّلْنَ"},
{"ind_3fs", "تَفْعَوِّلُ"},
{"ind_3md", "يَفْعَوِّلَانِ"},
{"ind_3mp", "يَفْعَوِّلُونَ"},
{"ind_3ms", "يَفْعَوِّلُ"},
{"ind_pass_1p", "نُفْعَوَّلُ"},
{"ind_pass_1s", "أُفْعَوَّلُ"},
{"ind_pass_2d", "تُفْعَوَّلَانِ"},
{"ind_pass_2fp", "تُفْعَوَّلْنَ"},
{"ind_pass_2fs", "تُفْعَوَّلِينَ"},
{"ind_pass_2mp", "تُفْعَوَّلُونَ"},
{"ind_pass_2ms", "تُفْعَوَّلُ"},
{"ind_pass_3fd", "تُفْعَوَّلَانِ"},
{"ind_pass_3fp", "يُفْعَوَّلْنَ"},
{"ind_pass_3fs", "تُفْعَوَّلُ"},
{"ind_pass_3md", "يُفْعَوَّلَانِ"},
{"ind_pass_3mp", "يُفْعَوَّلُونَ"},
{"ind_pass_3ms", "يُفْعَوَّلُ"},
{"past_1p", "اِفْعَوَّلْنَا"},
{"past_1s", "اِفْعَوَّلْتُ"},
{"past_2d", "اِفْعَوَّلْتُمَا"},
{"past_2fp", "اِفْعَوَّلْتُنَّ"},
{"past_2fs", "اِفْعَوَّلْتِ"},
{"past_2mp", "اِفْعَوَّلْتُمْ"},
{"past_2ms", "اِفْعَوَّلْتَ"},
{"past_3fd", "اِفْعَوَّلَتَا"},
{"past_3fp", "اِفْعَوَّلْنَ"},
{"past_3fs", "اِفْعَوَّلَتْ"},
{"past_3md", "اِفْعَوَّلَا"},
{"past_3mp", "اِفْعَوَّلُوا"},
{"past_3ms", "اِفْعَوَّلَ"},
{"past_pass_1p", "اُفْعُوِّلْنَا"},
{"past_pass_1s", "اُفْعُوِّلْتُ"},
{"past_pass_2d", "اُفْعُوِّلْتُمَا"},
{"past_pass_2fp", "اُفْعُوِّلْتُنَّ"},
{"past_pass_2fs", "اُفْعُوِّلْتِ"},
{"past_pass_2mp", "اُفْعُوِّلْتُمْ"},
{"past_pass_2ms", "اُفْعُوِّلْتَ"},
{"past_pass_3fd", "اُفْعُوِّلَتَا"},
{"past_pass_3fp", "اُفْعُوِّلْنَ"},
{"past_pass_3fs", "اُفْعُوِّلَتْ"},
{"past_pass_3md", "اُفْعُوِّلَا"},
{"past_pass_3mp", "اُفْعُوِّلُوا"},
{"past_pass_3ms", "اُفْعُوِّلَ"},
},
},
{
label = "اِفْعالَّ (p.376، abstract paradigm)", root = "فعل", wazn = "افعالّ",
forms = {
{"imp_2d", "اِفْعَالَّا"},
{"imp_2fp", "اِفْعَالِلْنَ"},
{"imp_2fs", "اِفْعَالِّي"},
{"imp_2mp", "اِفْعَالُّوا"},
{"imp_2ms", "اِفْعَالِلْ"},
{"ind_1p", "نَفْعَالُّ"},
{"ind_1s", "أَفْعَالُّ"},
{"ind_2d", "تَفْعَالَّانِ"},
{"ind_2fp", "تَفْعَالِلْنَ"},
{"ind_2fs", "تَفْعَالِّينَ"},
{"ind_2mp", "تَفْعَالُّونَ"},
{"ind_2ms", "تَفْعَالُّ"},
{"ind_3fd", "تَفْعَالَّانِ"},
{"ind_3fp", "يَفْعَالِلْنَ"},
{"ind_3fs", "تَفْعَالُّ"},
{"ind_3md", "يَفْعَالَّانِ"},
{"ind_3mp", "يَفْعَالُّونَ"},
{"ind_3ms", "يَفْعَالُّ"},
{"past_1p", "اِفْعَالَلْنَا"},
{"past_1s", "اِفْعَالَلْتُ"},
{"past_2d", "اِفْعَالَلْتُمَا"},
{"past_2fp", "اِفْعَالَلْتُنَّ"},
{"past_2fs", "اِفْعَالَلْتِ"},
{"past_2mp", "اِفْعَالَلْتُمْ"},
{"past_2ms", "اِفْعَالَلْتَ"},
{"past_3fd", "اِفْعَالَّتَا"},
{"past_3fp", "اِفْعَالَلْنَ"},
{"past_3fs", "اِفْعَالَّتْ"},
{"past_3md", "اِفْعَالَّا"},
{"past_3mp", "اِفْعَالُّوا"},
{"past_3ms", "اِفْعَالَّ"},
},
},
{
label = "اِجْلَوَّذَ (p.377، افعوّل صحيح سالم)", root = "جلذ", wazn = "افعوّل",
forms = {
{"imp_2d", "اِجْلَوِّذَا"},
{"imp_2fp", "اِجْلَوِّذْنَ"},
{"imp_2fs", "اِجْلَوِّذِي"},
{"imp_2mp", "اِجْلَوِّذُوا"},
{"imp_2ms", "اِجْلَوِّذْ"},
{"ind_1p", "نَجْلَوِّذُ"},
{"ind_1s", "أَجْلَوِّذُ"},
{"ind_2d", "تَجْلَوِّذَانِ"},
{"ind_2fp", "تَجْلَوِّذْنَ"},
{"ind_2fs", "تَجْلَوِّذِينَ"},
{"ind_2mp", "تَجْلَوِّذُونَ"},
{"ind_2ms", "تَجْلَوِّذُ"},
{"ind_3fd", "تَجْلَوِّذَانِ"},
{"ind_3fp", "يَجْلَوِّذْنَ"},
{"ind_3fs", "تَجْلَوِّذُ"},
{"ind_3md", "يَجْلَوِّذَانِ"},
{"ind_3mp", "يَجْلَوِّذُونَ"},
{"ind_3ms", "يَجْلَوِّذُ"},
{"past_1p", "اِجْلَوَّذْنَا"},
{"past_1s", "اِجْلَوَّذْتُ"},
{"past_2d", "اِجْلَوَّذْتُمَا"},
{"past_2fp", "اِجْلَوَّذْتُنَّ"},
{"past_2fs", "اِجْلَوَّذْتِ"},
{"past_2mp", "اِجْلَوَّذْتُمْ"},
{"past_2ms", "اِجْلَوَّذْتَ"},
{"past_3fd", "اِجْلَوَّذَتَا"},
{"past_3fp", "اِجْلَوَّذْنَ"},
{"past_3fs", "اِجْلَوَّذَتْ"},
{"past_3md", "اِجْلَوَّذَا"},
{"past_3mp", "اِجْلَوَّذُوا"},
{"past_3ms", "اِجْلَوَّذَ"},
},
},
{
label = "اِدْهامَّ (p.379، افعالّ صحيح سالم)", root = "دهم", wazn = "افعالّ",
forms = {
{"imp_2d", "اِدْهَامَّا"},
{"imp_2fp", "اِدْهَامِمْنَ"},
{"imp_2fs", "اِدْهَامِّي"},
{"imp_2mp", "اِدْهَامُّوا"},
{"imp_2ms", "اِدْهَامِمْ"},
{"ind_1p", "نَدْهَامُّ"},
{"ind_1s", "أَدْهَامُّ"},
{"ind_2d", "تَدْهَامَّانِ"},
{"ind_2fp", "تَدْهَامِمْنَ"},
{"ind_2fs", "تَدْهَامِّينَ"},
{"ind_2mp", "تَدْهَامُّونَ"},
{"ind_2ms", "تَدْهَامُّ"},
{"ind_3fd", "تَدْهَامَّانِ"},
{"ind_3fp", "يَدْهَامِمْنَ"},
{"ind_3fs", "تَدْهَامُّ"},
{"ind_3md", "يَدْهَامَّانِ"},
{"ind_3mp", "يَدْهَامُّونَ"},
{"ind_3ms", "يَدْهَامُّ"},
{"past_1p", "اِدْهَامَمْنَا"},
{"past_1s", "اِدْهَامَمْتُ"},
{"past_2d", "اِدْهَامَمْتُمَا"},
{"past_2fp", "اِدْهَامَمْتُنَّ"},
{"past_2fs", "اِدْهَامَمْتِ"},
{"past_2mp", "اِدْهَامَمْتُمْ"},
{"past_2ms", "اِدْهَامَمْتَ"},
{"past_3fd", "اِدْهَامَّتَا"},
{"past_3fp", "اِدْهَامَمْنَ"},
{"past_3fs", "اِدْهَامَّتْ"},
{"past_3md", "اِدْهَامَّا"},
{"past_3mp", "اِدْهَامُّوا"},
{"past_3ms", "اِدْهَامَّ"},
},
},
{
label = "اِحْوَوَّى (p.384، افعوّل لفيف مقرون)", root = "حوي", wazn = "افعوّل",
forms = {
{"imp_2d", "اِحْوَوِّيَا"},
{"imp_2fp", "اِحْوَوِّينَ"},
{"imp_2fs", "اِحْوَوِّي"},
{"imp_2mp", "اِحْوَوُّوا"},
{"imp_2ms", "اِحْوَوِّ"},
{"ind_1p", "نَحْوَوِّي"},
{"ind_1s", "أَحْوَوِّي"},
{"ind_2d", "تَحْوَوِّيَانِ"},
{"ind_2fp", "تَحْوَوِّينَ"},
{"ind_2fs", "تَحْوَوِّينَ"},
{"ind_2mp", "تَحْوَوُّونَ"},
{"ind_2ms", "تَحْوَوِّي"},
{"ind_3fd", "تَحْوَوِّيَانِ"},
{"ind_3fp", "يَحْوَوِّينَ"},
{"ind_3fs", "تَحْوَوِّي"},
{"ind_3md", "يَحْوَوِّيَانِ"},
{"ind_3mp", "يَحْوَوُّونَ"},
{"ind_3ms", "يَحْوَوِّي"},
{"past_1p", "اِحْوَوَّيْنَا"},
{"past_1s", "اِحْوَوَّيْتُ"},
{"past_2d", "اِحْوَوَّيْتُمَا"},
{"past_2fp", "اِحْوَوَّيْتُنَّ"},
{"past_2fs", "اِحْوَوَّيْتِ"},
{"past_2mp", "اِحْوَوَّيْتُمْ"},
{"past_2ms", "اِحْوَوَّيْتَ"},
{"past_3fd", "اِحْوَوَّتَا"},
{"past_3fp", "اِحْوَوَّيْنَ"},
{"past_3fs", "اِحْوَوَّتْ"},
{"past_3md", "اِحْوَوَّيَا"},
{"past_3mp", "اِحْوَوَّوْا"},
{"past_3ms", "اِحْوَوَّى"},
},
},
{
label = "تَفَعْلَلَ (p.399، abstract paradigm)", root = "فعلل", wazn = "تفعلل",
pass = true,
forms = {
{"imp_2d", "تَفَعْلَلَا"},
{"imp_2fp", "تَفَعْلَلْنَ"},
{"imp_2fs", "تَفَعْلَلِي"},
{"imp_2mp", "تَفَعْلَلُوا"},
{"imp_2ms", "تَفَعْلَلْ"},
{"ind_1p", "نَتَفَعْلَلُ"},
{"ind_1s", "أَتَفَعْلَلُ"},
{"ind_2d", "تَتَفَعْلَلَانِ"},
{"ind_2fp", "تَتَفَعْلَلْنَ"},
{"ind_2fs", "تَتَفَعْلَلِينَ"},
{"ind_2mp", "تَتَفَعْلَلُونَ"},
{"ind_2ms", "تَتَفَعْلَلُ"},
{"ind_3fd", "تَتَفَعْلَلَانِ"},
{"ind_3fp", "يَتَفَعْلَلْنَ"},
{"ind_3fs", "تَتَفَعْلَلُ"},
{"ind_3md", "يَتَفَعْلَلَانِ"},
{"ind_3mp", "يَتَفَعْلَلُونَ"},
{"ind_3ms", "يَتَفَعْلَلُ"},
{"ind_pass_1p", "نُتَفَعْلَلُ"},
{"ind_pass_1s", "أُتَفَعْلَلُ"},
{"ind_pass_2d", "تُتَفَعْلَلَانِ"},
{"ind_pass_2fp", "تُتَفَعْلَلْنَ"},
{"ind_pass_2fs", "تُتَفَعْلَلِينَ"},
{"ind_pass_2mp", "تُتَفَعْلَلُونَ"},
{"ind_pass_2ms", "تُتَفَعْلَلُ"},
{"ind_pass_3fd", "تُتَفَعْلَلَانِ"},
{"ind_pass_3fp", "يُتَفَعْلَلْنَ"},
{"ind_pass_3fs", "تُتَفَعْلَلُ"},
{"ind_pass_3md", "يُتَفَعْلَلَانِ"},
{"ind_pass_3mp", "يُتَفَعْلَلُونَ"},
{"ind_pass_3ms", "يُتَفَعْلَلُ"},
{"past_1p", "تَفَعْلَلْنَا"},
{"past_1s", "تَفَعْلَلْتُ"},
{"past_2d", "تَفَعْلَلْتُمَا"},
{"past_2fp", "تَفَعْلَلْتُنَّ"},
{"past_2fs", "تَفَعْلَلْتِ"},
{"past_2mp", "تَفَعْلَلْتُمْ"},
{"past_2ms", "تَفَعْلَلْتَ"},
{"past_3fd", "تَفَعْلَلَتَا"},
{"past_3fp", "تَفَعْلَلْنَ"},
{"past_3fs", "تَفَعْلَلَتْ"},
{"past_3md", "تَفَعْلَلَا"},
{"past_3mp", "تَفَعْلَلُوا"},
{"past_3ms", "تَفَعْلَلَ"},
{"past_pass_1p", "تُفُعْلِلْنَا"},
{"past_pass_1s", "تُفُعْلِلْتُ"},
{"past_pass_2d", "تُفُعْلِلْتُمَا"},
{"past_pass_2fp", "تُفُعْلِلْتُنَّ"},
{"past_pass_2fs", "تُفُعْلِلْتِ"},
{"past_pass_2mp", "تُفُعْلِلْتُمْ"},
{"past_pass_2ms", "تُفُعْلِلْتَ"},
{"past_pass_3fd", "تُفُعْلِلَتَا"},
{"past_pass_3fp", "تُفُعْلِلْنَ"},
{"past_pass_3fs", "تُفُعْلِلَتْ"},
{"past_pass_3md", "تُفُعْلِلَا"},
{"past_pass_3mp", "تُفُعْلِلُوا"},
{"past_pass_3ms", "تُفُعْلِلَ"},
},
},
{
label = "تَفَعْوَلَ (p.401، abstract paradigm)", root = "فعول", wazn = "تفعلل",
pass = true,
forms = {
{"imp_2d", "تَفَعْوَلَا"},
{"imp_2fp", "تَفَعْوَلْنَ"},
{"imp_2fs", "تَفَعْوَلِي"},
{"imp_2mp", "تَفَعْوَلُوا"},
{"imp_2ms", "تَفَعْوَلْ"},
{"ind_1p", "نَتَفَعْوَلُ"},
{"ind_1s", "أَتَفَعْوَلُ"},
{"ind_2d", "تَتَفَعْوَلَانِ"},
{"ind_2fp", "تَتَفَعْوَلْنَ"},
{"ind_2fs", "تَتَفَعْوَلِينَ"},
{"ind_2mp", "تَتَفَعْوَلُونَ"},
{"ind_2ms", "تَتَفَعْوَلُ"},
{"ind_3fd", "تَتَفَعْوَلَانِ"},
{"ind_3fp", "يَتَفَعْوَلْنَ"},
{"ind_3fs", "تَتَفَعْوَلُ"},
{"ind_3md", "يَتَفَعْوَلَانِ"},
{"ind_3mp", "يَتَفَعْوَلُونَ"},
{"ind_3ms", "يَتَفَعْوَلُ"},
{"ind_pass_1p", "نُتَفَعْوَلُ"},
{"ind_pass_1s", "أُتَفَعْوَلُ"},
{"ind_pass_2d", "تُتَفَعْوَلَانِ"},
{"ind_pass_2fp", "تُتَفَعْوَلْنَ"},
{"ind_pass_2fs", "تُتَفَعْوَلِينَ"},
{"ind_pass_2mp", "تُتَفَعْوَلُونَ"},
{"ind_pass_2ms", "تُتَفَعْوَلُ"},
{"ind_pass_3fd", "تُتَفَعْوَلَانِ"},
{"ind_pass_3fp", "يُتَفَعْوَلْنَ"},
{"ind_pass_3fs", "تُتَفَعْوَلُ"},
{"ind_pass_3md", "يُتَفَعْوَلَانِ"},
{"ind_pass_3mp", "يُتَفَعْوَلُونَ"},
{"ind_pass_3ms", "يُتَفَعْوَلُ"},
{"past_1p", "تَفَعْوَلْنَا"},
{"past_1s", "تَفَعْوَلْتُ"},
{"past_2d", "تَفَعْوَلْتُمَا"},
{"past_2fp", "تَفَعْوَلْتُنَّ"},
{"past_2fs", "تَفَعْوَلْتِ"},
{"past_2mp", "تَفَعْوَلْتُمْ"},
{"past_2ms", "تَفَعْوَلْتَ"},
{"past_3fd", "تَفَعْوَلَتَا"},
{"past_3fp", "تَفَعْوَلْنَ"},
{"past_3fs", "تَفَعْوَلَتْ"},
{"past_3md", "تَفَعْوَلَا"},
{"past_3mp", "تَفَعْوَلُوا"},
{"past_3ms", "تَفَعْوَلَ"},
{"past_pass_1p", "تُفُعْوِلْنَا"},
{"past_pass_1s", "تُفُعْوِلْتُ"},
{"past_pass_2d", "تُفُعْوِلْتُمَا"},
{"past_pass_2fp", "تُفُعْوِلْتُنَّ"},
{"past_pass_2fs", "تُفُعْوِلْتِ"},
{"past_pass_2mp", "تُفُعْوِلْتُمْ"},
{"past_pass_2ms", "تُفُعْوِلْتَ"},
{"past_pass_3fd", "تُفُعْوِلَتَا"},
{"past_pass_3fp", "تُفُعْوِلْنَ"},
{"past_pass_3fs", "تُفُعْوِلَتْ"},
{"past_pass_3md", "تُفُعْوِلَا"},
{"past_pass_3mp", "تُفُعْوِلُوا"},
{"past_pass_3ms", "تُفُعْوِلَ"},
},
},
{
label = "تَفَعْيَلَ (p.402، abstract paradigm)", root = "فعيل", wazn = "تفعلل",
pass = true,
forms = {
{"imp_2d", "تَفَعْيَلَا"},
{"imp_2fp", "تَفَعْيَلْنَ"},
{"imp_2fs", "تَفَعْيَلِي"},
{"imp_2mp", "تَفَعْيَلُوا"},
{"imp_2ms", "تَفَعْيَلْ"},
{"ind_1p", "نَتَفَعْيَلُ"},
{"ind_1s", "أَتَفَعْيَلُ"},
{"ind_2d", "تَتَفَعْيَلَانِ"},
{"ind_2fp", "تَتَفَعْيَلْنَ"},
{"ind_2fs", "تَتَفَعْيَلِينَ"},
{"ind_2mp", "تَتَفَعْيَلُونَ"},
{"ind_2ms", "تَتَفَعْيَلُ"},
{"ind_3fd", "تَتَفَعْيَلَانِ"},
{"ind_3fp", "يَتَفَعْيَلْنَ"},
{"ind_3fs", "تَتَفَعْيَلُ"},
{"ind_3md", "يَتَفَعْيَلَانِ"},
{"ind_3mp", "يَتَفَعْيَلُونَ"},
{"ind_3ms", "يَتَفَعْيَلُ"},
{"ind_pass_1p", "نُتَفَعْيَلُ"},
{"ind_pass_1s", "أُتَفَعْيَلُ"},
{"ind_pass_2d", "تُتَفَعْيَلَانِ"},
{"ind_pass_2fp", "تُتَفَعْيَلْنَ"},
{"ind_pass_2fs", "تُتَفَعْيَلِينَ"},
{"ind_pass_2mp", "تُتَفَعْيَلُونَ"},
{"ind_pass_2ms", "تُتَفَعْيَلُ"},
{"ind_pass_3fd", "تُتَفَعْيَلَانِ"},
{"ind_pass_3fp", "يُتَفَعْيَلْنَ"},
{"ind_pass_3fs", "تُتَفَعْيَلُ"},
{"ind_pass_3md", "يُتَفَعْيَلَانِ"},
{"ind_pass_3mp", "يُتَفَعْيَلُونَ"},
{"ind_pass_3ms", "يُتَفَعْيَلُ"},
{"past_1p", "تَفَعْيَلْنَا"},
{"past_1s", "تَفَعْيَلْتُ"},
{"past_2d", "تَفَعْيَلْتُمَا"},
{"past_2fp", "تَفَعْيَلْتُنَّ"},
{"past_2fs", "تَفَعْيَلْتِ"},
{"past_2mp", "تَفَعْيَلْتُمْ"},
{"past_2ms", "تَفَعْيَلْتَ"},
{"past_3fd", "تَفَعْيَلَتَا"},
{"past_3fp", "تَفَعْيَلْنَ"},
{"past_3fs", "تَفَعْيَلَتْ"},
{"past_3md", "تَفَعْيَلَا"},
{"past_3mp", "تَفَعْيَلُوا"},
{"past_3ms", "تَفَعْيَلَ"},
{"past_pass_1p", "تُفُعْيِلْنَا"},
{"past_pass_1s", "تُفُعْيِلْتُ"},
{"past_pass_2d", "تُفُعْيِلْتُمَا"},
{"past_pass_2fp", "تُفُعْيِلْتُنَّ"},
{"past_pass_2fs", "تُفُعْيِلْتِ"},
{"past_pass_2mp", "تُفُعْيِلْتُمْ"},
{"past_pass_2ms", "تُفُعْيِلْتَ"},
{"past_pass_3fd", "تُفُعْيِلَتَا"},
{"past_pass_3fp", "تُفُعْيِلْنَ"},
{"past_pass_3fs", "تُفُعْيِلَتْ"},
{"past_pass_3md", "تُفُعْيِلَا"},
{"past_pass_3mp", "تُفُعْيِلُوا"},
{"past_pass_3ms", "تُفُعْيِلَ"},
},
},
{
label = "اِفْعَنْلَلَ (p.411، abstract paradigm)", root = "فعلل", wazn = "افعنلل",
forms = {
{"imp_2d", "اِفْعَنْلِلَا"},
{"imp_2fp", "اِفْعَنْلِلْنَ"},
{"imp_2fs", "اِفْعَنْلِلِي"},
{"imp_2mp", "اِفْعَنْلِلُوا"},
{"imp_2ms", "اِفْعَنْلِلْ"},
{"ind_1p", "نَفْعَنْلِلُ"},
{"ind_1s", "أَفْعَنْلِلُ"},
{"ind_2d", "تَفْعَنْلِلَانِ"},
{"ind_2fp", "تَفْعَنْلِلْنَ"},
{"ind_2fs", "تَفْعَنْلِلِينَ"},
{"ind_2mp", "تَفْعَنْلِلُونَ"},
{"ind_2ms", "تَفْعَنْلِلُ"},
{"ind_3fd", "تَفْعَنْلِلَانِ"},
{"ind_3fp", "يَفْعَنْلِلْنَ"},
{"ind_3fs", "تَفْعَنْلِلُ"},
{"ind_3md", "يَفْعَنْلِلَانِ"},
{"ind_3mp", "يَفْعَنْلِلُونَ"},
{"ind_3ms", "يَفْعَنْلِلُ"},
{"past_1p", "اِفْعَنْلَلْنَا"},
{"past_1s", "اِفْعَنْلَلْتُ"},
{"past_2d", "اِفْعَنْلَلْتُمَا"},
{"past_2fp", "اِفْعَنْلَلْتُنَّ"},
{"past_2fs", "اِفْعَنْلَلْتِ"},
{"past_2mp", "اِفْعَنْلَلْتُمْ"},
{"past_2ms", "اِفْعَنْلَلْتَ"},
{"past_3fd", "اِفْعَنْلَلَتَا"},
{"past_3fp", "اِفْعَنْلَلْنَ"},
{"past_3fs", "اِفْعَنْلَلَتْ"},
{"past_3md", "اِفْعَنْلَلَا"},
{"past_3mp", "اِفْعَنْلَلُوا"},
{"past_3ms", "اِفْعَنْلَلَ"},
},
},
{
label = "اِنْقاضَّ (p.380، افعالّ)", root = "نقض", wazn = "افعالّ",
forms = {
{"imp_2d", "اِنْقَاضَّا"},
{"imp_2fp", "اِنْقَاضِضْنَ"},
{"imp_2fs", "اِنْقَاضِّي"},
{"imp_2mp", "اِنْقَاضُّوا"},
{"imp_2ms", "اِنْقَاضِضْ"},
{"ind_1p", "نَنْقَاضُّ"},
{"ind_1s", "أَنْقَاضُّ"},
{"ind_2d", "تَنْقَاضَّانِ"},
{"ind_2fp", "تَنْقَاضِضْنَ"},
{"ind_2fs", "تَنْقَاضِّينَ"},
{"ind_2mp", "تَنْقَاضُّونَ"},
{"ind_2ms", "تَنْقَاضُّ"},
{"ind_3fd", "تَنْقَاضَّانِ"},
{"ind_3fp", "يَنْقَاضِضْنَ"},
{"ind_3fs", "تَنْقَاضُّ"},
{"ind_3md", "يَنْقَاضَّانِ"},
{"ind_3mp", "يَنْقَاضُّونَ"},
{"ind_3ms", "يَنْقَاضُّ"},
{"past_1p", "اِنْقَاضَضْنَا"},
{"past_1s", "اِنْقَاضَضْتُ"},
{"past_2d", "اِنْقَاضَضْتُمَا"},
{"past_2fp", "اِنْقَاضَضْتُنَّ"},
{"past_2fs", "اِنْقَاضَضْتِ"},
{"past_2mp", "اِنْقَاضَضْتُمْ"},
{"past_2ms", "اِنْقَاضَضْتَ"},
{"past_3fd", "اِنْقَاضَّتَا"},
{"past_3fp", "اِنْقَاضَضْنَ"},
{"past_3fs", "اِنْقَاضَّتْ"},
{"past_3md", "اِنْقَاضَّا"},
{"past_3mp", "اِنْقَاضُّوا"},
{"past_3ms", "اِنْقَاضَّ"},
},
},
{
label = "اِفْعَلَلَّ (p.416، abstract paradigm)", root = "فعلل", wazn = "افعللّ",
forms = {
{"imp_2d", "اِفْعَلِلَّا"},
{"imp_2fp", "اِفْعَلِّلْنَ"},
{"imp_2fs", "اِفْعَلِلِّي"},
{"imp_2mp", "اِفْعَلِلُّوا"},
{"imp_2ms", "اِفْعَلِلَّ"},
{"ind_1p", "نَفْعَلِلُّ"},
{"ind_1s", "أَفْعَلِلُّ"},
{"ind_2d", "تَفْعَلِلَّانِ"},
{"ind_2fp", "تَفْعَلِّلْنَ"},
{"ind_2fs", "تَفْعَلِلِّينَ"},
{"ind_2mp", "تَفْعَلِلُّونَ"},
{"ind_2ms", "تَفْعَلِلُّ"},
{"ind_3fd", "تَفْعَلِلَّانِ"},
{"ind_3fp", "يَفْعَلِّلْنَ"},
{"ind_3fs", "تَفْعَلِلُّ"},
{"ind_3md", "يَفْعَلِلَّانِ"},
{"ind_3mp", "يَفْعَلِلُّونَ"},
{"ind_3ms", "يَفْعَلِلُّ"},
{"past_1p", "اِفْعَلَّلْنَا"},
{"past_1s", "اِفْعَلَّلْتُ"},
{"past_2d", "اِفْعَلَّلْتُمَا"},
{"past_2fp", "اِفْعَلَّلْتُنَّ"},
{"past_2fs", "اِفْعَلَّلْتِ"},
{"past_2mp", "اِفْعَلَّلْتُمْ"},
{"past_2ms", "اِفْعَلَّلْتَ"},
{"past_3fd", "اِفْعَلَلَّتَا"},
{"past_3fp", "اِفْعَلَّلْنَ"},
{"past_3fs", "اِفْعَلَلَّتْ"},
{"past_3md", "اِفْعَلَلَّا"},
{"past_3mp", "اِفْعَلَلُّوا"},
{"past_3ms", "اِفْعَلَلَّ"},
},
},
{
label = "اِهْوَأَنَّ (p.420، افعللّ معتل العين)", root = "هوأن", wazn = "افعللّ",
forms = {
{"imp_2d", "اِهْوَئِنَّا"},
{"imp_2fp", "اِهْوَأْنِنَّ"},
{"imp_2fs", "اِهْوَئِنِّي"},
{"imp_2mp", "اِهْوَئِنُّوا"},
{"imp_2ms", "اِهْوَأْنِنْ"},
{"ind_1p", "نَهْوَئِنُّ"},
{"ind_1s", "أَهْوَئِنُّ"},
{"ind_2d", "تَهْوَئِنَّانِ"},
{"ind_2fp", "تَهْوَأْنِنَّ"},
{"ind_2fs", "تَهْوَئِنِّينَ"},
{"ind_2mp", "تَهْوَئِنُّونَ"},
{"ind_2ms", "تَهْوَئِنُّ"},
{"ind_3fd", "تَهْوَئِنَّانِ"},
{"ind_3fp", "يَهْوَأْنِنَّ"},
{"ind_3fs", "تَهْوَئِنُّ"},
{"ind_3md", "يَهْوَئِنَّانِ"},
{"ind_3mp", "يَهْوَئِنُّونَ"},
{"ind_3ms", "يَهْوَئِنُّ"},
{"past_1p", "اِهْوَأْنَنَّا"},
{"past_1s", "اِهْوَأْنَنْتُ"},
{"past_2d", "اِهْوَأْنَنْتُمَا"},
{"past_2fp", "اِهْوَأْنَنْتُنَّ"},
{"past_2fs", "اِهْوَأْنَنْتِ"},
{"past_2mp", "اِهْوَأْنَنْتُمْ"},
{"past_2ms", "اِهْوَأْنَنْتَ"},
{"past_3fd", "اِهْوَأَنَّتَا"},
{"past_3fp", "اِهْوَأْنَنَّ"},
{"past_3fs", "اِهْوَأَنَّتْ"},
{"past_3md", "اِهْوَأَنَّا"},
{"past_3mp", "اِهْوَأَنُّوا"},
{"past_3ms", "اِهْوَأَنَّ"},
},
},
{
label = "كَتَبَ ـُ (p.126، صحيح سالم)", root = "كتب", wazn = "فعَل يفعُل",
pass = true,
forms = {
{"imp_2d", "اُكْتُبَا"},
{"imp_2fp", "اُكْتُبْنَ"},
{"imp_2fs", "اُكْتُبِي"},
{"imp_2mp", "اُكْتُبُوا"},
{"imp_2ms", "اُكْتُبْ"},
{"ind_1p", "نَكْتُبُ"},
{"ind_1s", "أَكْتُبُ"},
{"ind_2d", "تَكْتُبَانِ"},
{"ind_2fp", "تَكْتُبْنَ"},
{"ind_2fs", "تَكْتُبِينَ"},
{"ind_2mp", "تَكْتُبُونَ"},
{"ind_2ms", "تَكْتُبُ"},
{"ind_3fd", "تَكْتُبَانِ"},
{"ind_3fp", "يَكْتُبْنَ"},
{"ind_3fs", "تَكْتُبُ"},
{"ind_3md", "يَكْتُبَانِ"},
{"ind_3mp", "يَكْتُبُونَ"},
{"ind_3ms", "يَكْتُبُ"},
{"ind_pass_1p", "نُكْتَبُ"},
{"ind_pass_1s", "أُكْتَبُ"},
{"ind_pass_2d", "تُكْتَبَانِ"},
{"ind_pass_2fp", "تُكْتَبْنَ"},
{"ind_pass_2fs", "تُكْتَبِينَ"},
{"ind_pass_2mp", "تُكْتَبُونَ"},
{"ind_pass_2ms", "تُكْتَبُ"},
{"ind_pass_3fd", "تُكْتَبَانِ"},
{"ind_pass_3fp", "يُكْتَبْنَ"},
{"ind_pass_3fs", "تُكْتَبُ"},
{"ind_pass_3md", "يُكْتَبَانِ"},
{"ind_pass_3mp", "يُكْتَبُونَ"},
{"ind_pass_3ms", "يُكْتَبُ"},
{"past_1p", "كَتَبْنَا"},
{"past_1s", "كَتَبْتُ"},
{"past_2d", "كَتَبْتُمَا"},
{"past_2fp", "كَتَبْتُنَّ"},
{"past_2fs", "كَتَبْتِ"},
{"past_2mp", "كَتَبْتُمْ"},
{"past_2ms", "كَتَبْتَ"},
{"past_3fd", "كَتَبَتَا"},
{"past_3fp", "كَتَبْنَ"},
{"past_3fs", "كَتَبَتْ"},
{"past_3md", "كَتَبَا"},
{"past_3mp", "كَتَبُوا"},
{"past_3ms", "كَتَبَ"},
{"past_pass_1p", "كُتِبْنَا"},
{"past_pass_1s", "كُتِبْتُ"},
{"past_pass_2d", "كُتِبْتُمَا"},
{"past_pass_2fp", "كُتِبْتُنَّ"},
{"past_pass_2fs", "كُتِبْتِ"},
{"past_pass_2mp", "كُتِبْتُمْ"},
{"past_pass_2ms", "كُتِبْتَ"},
{"past_pass_3fd", "كُتِبَتَا"},
{"past_pass_3fp", "كُتِبْنَ"},
{"past_pass_3fs", "كُتِبَتْ"},
{"past_pass_3md", "كُتِبَا"},
{"past_pass_3mp", "كُتِبُوا"},
{"past_pass_3ms", "كُتِبَ"},
},
},
{
label = "فَتَحَ ـَ (p.170، صحيح سالم)", root = "فتح", wazn = "فعَل يفعَل",
pass = true,
forms = {
{"imp_2d", "اِفْتَحَا"},
{"imp_2fp", "اِفْتَحْنَ"},
{"imp_2fs", "اِفْتَحِي"},
{"imp_2mp", "اِفْتَحُوا"},
{"imp_2ms", "اِفْتَحْ"},
{"ind_1p", "نَفْتَحُ"},
{"ind_1s", "أَفْتَحُ"},
{"ind_2d", "تَفْتَحَانِ"},
{"ind_2fp", "تَفْتَحْنَ"},
{"ind_2fs", "تَفْتَحِينَ"},
{"ind_2mp", "تَفْتَحُونَ"},
{"ind_2ms", "تَفْتَحُ"},
{"ind_3fd", "تَفْتَحَانِ"},
{"ind_3fp", "يَفْتَحْنَ"},
{"ind_3fs", "تَفْتَحُ"},
{"ind_3md", "يَفْتَحَانِ"},
{"ind_3mp", "يَفْتَحُونَ"},
{"ind_3ms", "يَفْتَحُ"},
{"ind_pass_1p", "نُفْتَحُ"},
{"ind_pass_1s", "أُفْتَحُ"},
{"ind_pass_2d", "تُفْتَحَانِ"},
{"ind_pass_2fp", "تُفْتَحْنَ"},
{"ind_pass_2fs", "تُفْتَحِينَ"},
{"ind_pass_2mp", "تُفْتَحُونَ"},
{"ind_pass_2ms", "تُفْتَحُ"},
{"ind_pass_3fd", "تُفْتَحَانِ"},
{"ind_pass_3fp", "يُفْتَحْنَ"},
{"ind_pass_3fs", "تُفْتَحُ"},
{"ind_pass_3md", "يُفْتَحَانِ"},
{"ind_pass_3mp", "يُفْتَحُونَ"},
{"ind_pass_3ms", "يُفْتَحُ"},
{"past_1p", "فَتَحْنَا"},
{"past_1s", "فَتَحْتُ"},
{"past_2d", "فَتَحْتُمَا"},
{"past_2fp", "فَتَحْتُنَّ"},
{"past_2fs", "فَتَحْتِ"},
{"past_2mp", "فَتَحْتُمْ"},
{"past_2ms", "فَتَحْتَ"},
{"past_3fd", "فَتَحَتَا"},
{"past_3fp", "فَتَحْنَ"},
{"past_3fs", "فَتَحَتْ"},
{"past_3md", "فَتَحَا"},
{"past_3mp", "فَتَحُوا"},
{"past_3ms", "فَتَحَ"},
{"past_pass_1p", "فُتِحْنَا"},
{"past_pass_1s", "فُتِحْتُ"},
{"past_pass_2d", "فُتِحْتُمَا"},
{"past_pass_2fp", "فُتِحْتُنَّ"},
{"past_pass_2fs", "فُتِحْتِ"},
{"past_pass_2mp", "فُتِحْتُمْ"},
{"past_pass_2ms", "فُتِحْتَ"},
{"past_pass_3fd", "فُتِحَتَا"},
{"past_pass_3fp", "فُتِحْنَ"},
{"past_pass_3fs", "فُتِحَتْ"},
{"past_pass_3md", "فُتِحَا"},
{"past_pass_3mp", "فُتِحُوا"},
{"past_pass_3ms", "فُتِحَ"},
},
},
{
label = "نَعِمَ ـِ (p.235، صحيح سالم)", root = "نعم", wazn = "فعِل يفعِل",
pass = true,
forms = {
{"imp_2d", "اِنْعِمَا"},
{"imp_2fp", "اِنْعِمْنَ"},
{"imp_2fs", "اِنْعِمِي"},
{"imp_2mp", "اِنْعِمُوا"},
{"imp_2ms", "اِنْعِمْ"},
{"ind_1p", "نَنْعِمُ"},
{"ind_1s", "أَنْعِمُ"},
{"ind_2d", "تَنْعِمَانِ"},
{"ind_2fp", "تَنْعِمْنَ"},
{"ind_2fs", "تَنْعِمِينَ"},
{"ind_2mp", "تَنْعِمُونَ"},
{"ind_2ms", "تَنْعِمُ"},
{"ind_3fd", "تَنْعِمَانِ"},
{"ind_3fp", "يَنْعِمْنَ"},
{"ind_3fs", "تَنْعِمُ"},
{"ind_3md", "يَنْعِمَانِ"},
{"ind_3mp", "يَنْعِمُونَ"},
{"ind_3ms", "يَنْعِمُ"},
{"ind_pass_1p", "نُنْعَمُ"},
{"ind_pass_1s", "أُنْعَمُ"},
{"ind_pass_2d", "تُنْعَمَانِ"},
{"ind_pass_2fp", "تُنْعَمْنَ"},
{"ind_pass_2fs", "تُنْعَمِينَ"},
{"ind_pass_2mp", "تُنْعَمُونَ"},
{"ind_pass_2ms", "تُنْعَمُ"},
{"ind_pass_3fd", "تُنْعَمَانِ"},
{"ind_pass_3fp", "يُنْعَمْنَ"},
{"ind_pass_3fs", "تُنْعَمُ"},
{"ind_pass_3md", "يُنْعَمَانِ"},
{"ind_pass_3mp", "يُنْعَمُونَ"},
{"ind_pass_3ms", "يُنْعَمُ"},
{"past_1p", "نَعِمْنَا"},
{"past_1s", "نَعِمْتُ"},
{"past_2d", "نَعِمْتُمَا"},
{"past_2fp", "نَعِمْتُنَّ"},
{"past_2fs", "نَعِمْتِ"},
{"past_2mp", "نَعِمْتُمْ"},
{"past_2ms", "نَعِمْتَ"},
{"past_3fd", "نَعِمَتَا"},
{"past_3fp", "نَعِمْنَ"},
{"past_3fs", "نَعِمَتْ"},
{"past_3md", "نَعِمَا"},
{"past_3mp", "نَعِمُوا"},
{"past_3ms", "نَعِمَ"},
{"past_pass_1p", "نُعِمْنَا"},
{"past_pass_1s", "نُعِمْتُ"},
{"past_pass_2d", "نُعِمْتُمَا"},
{"past_pass_2fp", "نُعِمْتُنَّ"},
{"past_pass_2fs", "نُعِمْتِ"},
{"past_pass_2mp", "نُعِمْتُمْ"},
{"past_pass_2ms", "نُعِمْتَ"},
{"past_pass_3fd", "نُعِمَتَا"},
{"past_pass_3fp", "نُعِمْنَ"},
{"past_pass_3fs", "نُعِمَتْ"},
{"past_pass_3md", "نُعِمَا"},
{"past_pass_3mp", "نُعِمُوا"},
{"past_pass_3ms", "نُعِمَ"},
},
},
{
label = "وَرِيَ ـِ (p.237، لفيف مفروق)", root = "وري", wazn = "فعِل يفعِل",
forms = {
{"imp_2d", "رِيَا"},
{"imp_2fp", "رِينَ"},
{"imp_2fs", "رِي"},
{"imp_2mp", "رُوا"},
{"imp_2ms", "رِ"},
{"ind_1p", "نَرِي"},
{"ind_1s", "أَرِي"},
{"ind_2d", "تَرِيَانِ"},
{"ind_2fp", "تَرِينَ"},
{"ind_2fs", "تَرِينَ"},
{"ind_2mp", "تَرُونَ"},
{"ind_2ms", "تَرِي"},
{"ind_3fd", "تَرِيَانِ"},
{"ind_3fp", "يَرِينَ"},
{"ind_3fs", "تَرِي"},
{"ind_3md", "يَرِيَانِ"},
{"ind_3mp", "يَرُونَ"},
{"ind_3ms", "يَرِي"},
{"past_1p", "وَرِينَا"},
{"past_1s", "وَرِيتُ"},
{"past_2d", "وَرِيتُمَا"},
{"past_2fp", "وَرِيتُنَّ"},
{"past_2fs", "وَرِيتِ"},
{"past_2mp", "وَرِيتُمْ"},
{"past_2ms", "وَرِيتَ"},
{"past_3fd", "وَرِيَتَا"},
{"past_3fp", "وَرِينَ"},
{"past_3fs", "وَرِيَتْ"},
{"past_3md", "وَرِيَا"},
{"past_3mp", "وَرُوا"},
{"past_3ms", "وَرِيَ"},
},
},
{
label = "تَفَعَّلَ (p.285، abstract paradigm)", root = "فعل", wazn = "تفعّل",
pass = true,
forms = {
{"imp_2d", "تَفَعَّلَا"},
{"imp_2fp", "تَفَعَّلْنَ"},
{"imp_2fs", "تَفَعَّلِي"},
{"imp_2mp", "تَفَعَّلُوا"},
{"imp_2ms", "تَفَعَّلْ"},
{"ind_1p", "نَتَفَعَّلُ"},
{"ind_1s", "أَتَفَعَّلُ"},
{"ind_2d", "تَتَفَعَّلَانِ"},
{"ind_2fp", "تَتَفَعَّلْنَ"},
{"ind_2fs", "تَتَفَعَّلِينَ"},
{"ind_2mp", "تَتَفَعَّلُونَ"},
{"ind_2ms", "تَتَفَعَّلُ"},
{"ind_3fd", "تَتَفَعَّلَانِ"},
{"ind_3fp", "يَتَفَعَّلْنَ"},
{"ind_3fs", "تَتَفَعَّلُ"},
{"ind_3md", "يَتَفَعَّلَانِ"},
{"ind_3mp", "يَتَفَعَّلُونَ"},
{"ind_3ms", "يَتَفَعَّلُ"},
{"ind_pass_1p", "نُتَفَعَّلُ"},
{"ind_pass_1s", "أُتَفَعَّلُ"},
{"ind_pass_2d", "تُتَفَعَّلَانِ"},
{"ind_pass_2fp", "تُتَفَعَّلْنَ"},
{"ind_pass_2fs", "تُتَفَعَّلِينَ"},
{"ind_pass_2mp", "تُتَفَعَّلُونَ"},
{"ind_pass_2ms", "تُتَفَعَّلُ"},
{"ind_pass_3fd", "تُتَفَعَّلَانِ"},
{"ind_pass_3fp", "يُتَفَعَّلْنَ"},
{"ind_pass_3fs", "تُتَفَعَّلُ"},
{"ind_pass_3md", "يُتَفَعَّلَانِ"},
{"ind_pass_3mp", "يُتَفَعَّلُونَ"},
{"ind_pass_3ms", "يُتَفَعَّلُ"},
{"past_1p", "تَفَعَّلْنَا"},
{"past_1s", "تَفَعَّلْتُ"},
{"past_2d", "تَفَعَّلْتُمَا"},
{"past_2fp", "تَفَعَّلْتُنَّ"},
{"past_2fs", "تَفَعَّلْتِ"},
{"past_2mp", "تَفَعَّلْتُمْ"},
{"past_2ms", "تَفَعَّلْتَ"},
{"past_3fd", "تَفَعَّلَتَا"},
{"past_3fp", "تَفَعَّلْنَ"},
{"past_3fs", "تَفَعَّلَتْ"},
{"past_3md", "تَفَعَّلَا"},
{"past_3mp", "تَفَعَّلُوا"},
{"past_3ms", "تَفَعَّلَ"},
{"past_pass_1p", "تُفُعِّلْنَا"},
{"past_pass_1s", "تُفُعِّلْتُ"},
{"past_pass_2d", "تُفُعِّلْتُمَا"},
{"past_pass_2fp", "تُفُعِّلْتُنَّ"},
{"past_pass_2fs", "تُفُعِّلْتِ"},
{"past_pass_2mp", "تُفُعِّلْتُمْ"},
{"past_pass_2ms", "تُفُعِّلْتَ"},
{"past_pass_3fd", "تُفُعِّلَتَا"},
{"past_pass_3fp", "تُفُعِّلْنَ"},
{"past_pass_3fs", "تُفُعِّلَتْ"},
{"past_pass_3md", "تُفُعِّلَا"},
{"past_pass_3mp", "تُفُعِّلُوا"},
{"past_pass_3ms", "تُفُعِّلَ"},
},
},
{
label = "نَصَرَ ـُ (p.127)", root = "نصر", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "اُنْصُرَا"},
{"imp_2fp", "اُنْصُرْنَ"},
{"imp_2fs", "اُنْصُرِي"},
{"imp_2mp", "اُنْصُرُوا"},
{"imp_2ms", "اُنْصُرْ"},
{"ind_1p", "نَنْصُرُ"},
{"ind_1s", "أَنْصُرُ"},
{"ind_2d", "تَنْصُرَانِ"},
{"ind_2fp", "تَنْصُرْنَ"},
{"ind_2fs", "تَنْصُرِينَ"},
{"ind_2mp", "تَنْصُرُونَ"},
{"ind_2ms", "تَنْصُرُ"},
{"ind_3fd", "تَنْصُرَانِ"},
{"ind_3fp", "يَنْصُرْنَ"},
{"ind_3fs", "تَنْصُرُ"},
{"ind_3md", "يَنْصُرَانِ"},
{"ind_3mp", "يَنْصُرُونَ"},
{"ind_3ms", "يَنْصُرُ"},
{"past_1p", "نَصَرْنَا"},
{"past_1s", "نَصَرْتُ"},
{"past_2d", "نَصَرْتُمَا"},
{"past_2fp", "نَصَرْتُنَّ"},
{"past_2fs", "نَصَرْتِ"},
{"past_2mp", "نَصَرْتُمْ"},
{"past_2ms", "نَصَرْتَ"},
{"past_3fd", "نَصَرَتَا"},
{"past_3fp", "نَصَرْنَ"},
{"past_3fs", "نَصَرَتْ"},
{"past_3md", "نَصَرَا"},
{"past_3mp", "نَصَرُوا"},
{"past_3ms", "نَصَرَ"},
},
},
{
label = "حَدَثَ ـُ (p.127)", root = "حدث", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "اُحْدُثَا"},
{"imp_2fp", "اُحْدُثْنَ"},
{"imp_2fs", "اُحْدُثِي"},
{"imp_2mp", "اُحْدُثُوا"},
{"imp_2ms", "اُحْدُثْ"},
{"ind_1p", "نَحْدُثُ"},
{"ind_1s", "أَحْدُثُ"},
{"ind_2d", "تَحْدُثَانِ"},
{"ind_2fp", "تَحْدُثْنَ"},
{"ind_2fs", "تَحْدُثِينَ"},
{"ind_2mp", "تَحْدُثُونَ"},
{"ind_2ms", "تَحْدُثُ"},
{"ind_3fd", "تَحْدُثَانِ"},
{"ind_3fp", "يَحْدُثْنَ"},
{"ind_3fs", "تَحْدُثُ"},
{"ind_3md", "يَحْدُثَانِ"},
{"ind_3mp", "يَحْدُثُونَ"},
{"ind_3ms", "يَحْدُثُ"},
{"past_1p", "حَدَثْنَا"},
{"past_1s", "حَدَثْتُ"},
{"past_2d", "حَدَثْتُمَا"},
{"past_2fp", "حَدَثْتُنَّ"},
{"past_2fs", "حَدَثْتِ"},
{"past_2mp", "حَدَثْتُمْ"},
{"past_2ms", "حَدَثْتَ"},
{"past_3fd", "حَدَثَتَا"},
{"past_3fp", "حَدَثْنَ"},
{"past_3fs", "حَدَثَتْ"},
{"past_3md", "حَدَثَا"},
{"past_3mp", "حَدَثُوا"},
{"past_3ms", "حَدَثَ"},
},
},
{
label = "وَحَّدَ (p.266)", root = "وحد", wazn = "فعّل",
forms = {
{"imp_2d", "وَحِّدَا"},
{"imp_2fp", "وَحِّدْنَ"},
{"imp_2fs", "وَحِّدِي"},
{"imp_2mp", "وَحِّدُوا"},
{"imp_2ms", "وَحِّدْ"},
{"ind_1p", "نُوَحِّدُ"},
{"ind_1s", "أُوَحِّدُ"},
{"ind_2d", "تُوَحِّدَانِ"},
{"ind_2fp", "تُوَحِّدْنَ"},
{"ind_2fs", "تُوَحِّدِينَ"},
{"ind_2mp", "تُوَحِّدُونَ"},
{"ind_2ms", "تُوَحِّدُ"},
{"ind_3fd", "تُوَحِّدَانِ"},
{"ind_3fp", "يُوَحِّدْنَ"},
{"ind_3fs", "تُوَحِّدُ"},
{"ind_3md", "يُوَحِّدَانِ"},
{"ind_3mp", "يُوَحِّدُونَ"},
{"ind_3ms", "يُوَحِّدُ"},
{"past_1p", "وَحَّدْنَا"},
{"past_1s", "وَحَّدْتُ"},
{"past_2d", "وَحَّدْتُمَا"},
{"past_2fp", "وَحَّدْتُنَّ"},
{"past_2fs", "وَحَّدْتِ"},
{"past_2mp", "وَحَّدْتُمْ"},
{"past_2ms", "وَحَّدْتَ"},
{"past_3fd", "وَحَّدَتَا"},
{"past_3fp", "وَحَّدْنَ"},
{"past_3fs", "وَحَّدَتْ"},
{"past_3md", "وَحَّدَا"},
{"past_3mp", "وَحَّدُوا"},
{"past_3ms", "وَحَّدَ"},
},
},
{
label = "يَبَّسَ (p.266)", root = "يبس", wazn = "فعّل",
forms = {
{"imp_2d", "يَبِّسَا"},
{"imp_2fp", "يَبِّسْنَ"},
{"imp_2fs", "يَبِّسِي"},
{"imp_2mp", "يَبِّسُوا"},
{"imp_2ms", "يَبِّسْ"},
{"ind_1p", "نُيَبِّسُ"},
{"ind_1s", "أُيَبِّسُ"},
{"ind_2d", "تُيَبِّسَانِ"},
{"ind_2fp", "تُيَبِّسْنَ"},
{"ind_2fs", "تُيَبِّسِينَ"},
{"ind_2mp", "تُيَبِّسُونَ"},
{"ind_2ms", "تُيَبِّسُ"},
{"ind_3fd", "تُيَبِّسَانِ"},
{"ind_3fp", "يُيَبِّسْنَ"},
{"ind_3fs", "تُيَبِّسُ"},
{"ind_3md", "يُيَبِّسَانِ"},
{"ind_3mp", "يُيَبِّسُونَ"},
{"ind_3ms", "يُيَبِّسُ"},
{"past_1p", "يَبَّسْنَا"},
{"past_1s", "يَبَّسْتُ"},
{"past_2d", "يَبَّسْتُمَا"},
{"past_2fp", "يَبَّسْتُنَّ"},
{"past_2fs", "يَبَّسْتِ"},
{"past_2mp", "يَبَّسْتُمْ"},
{"past_2ms", "يَبَّسْتَ"},
{"past_3fd", "يَبَّسَتَا"},
{"past_3fp", "يَبَّسْنَ"},
{"past_3fs", "يَبَّسَتْ"},
{"past_3md", "يَبَّسَا"},
{"past_3mp", "يَبَّسُوا"},
{"past_3ms", "يَبَّسَ"},
},
},
{
label = "نَوَّرَ (p.267)", root = "نور", wazn = "فعّل",
forms = {
{"imp_2d", "نَوِّرَا"},
{"imp_2fp", "نَوِّرْنَ"},
{"imp_2fs", "نَوِّرِي"},
{"imp_2mp", "نَوِّرُوا"},
{"imp_2ms", "نَوِّرْ"},
{"ind_1p", "نُنَوِّرُ"},
{"ind_1s", "أُنَوِّرُ"},
{"ind_2d", "تُنَوِّرَانِ"},
{"ind_2fp", "تُنَوِّرْنَ"},
{"ind_2fs", "تُنَوِّرِينَ"},
{"ind_2mp", "تُنَوِّرُونَ"},
{"ind_2ms", "تُنَوِّرُ"},
{"ind_3fd", "تُنَوِّرَانِ"},
{"ind_3fp", "يُنَوِّرْنَ"},
{"ind_3fs", "تُنَوِّرُ"},
{"ind_3md", "يُنَوِّرَانِ"},
{"ind_3mp", "يُنَوِّرُونَ"},
{"ind_3ms", "يُنَوِّرُ"},
{"past_1p", "نَوَّرْنَا"},
{"past_1s", "نَوَّرْتُ"},
{"past_2d", "نَوَّرْتُمَا"},
{"past_2fp", "نَوَّرْتُنَّ"},
{"past_2fs", "نَوَّرْتِ"},
{"past_2mp", "نَوَّرْتُمْ"},
{"past_2ms", "نَوَّرْتَ"},
{"past_3fd", "نَوَّرَتَا"},
{"past_3fp", "نَوَّرْنَ"},
{"past_3fs", "نَوَّرَتْ"},
{"past_3md", "نَوَّرَا"},
{"past_3mp", "نَوَّرُوا"},
{"past_3ms", "نَوَّرَ"},
},
},
{
label = "بَيَّضَ (p.267)", root = "بيض", wazn = "فعّل",
forms = {
{"imp_2d", "بَيِّضَا"},
{"imp_2fp", "بَيِّضْنَ"},
{"imp_2fs", "بَيِّضِي"},
{"imp_2mp", "بَيِّضُوا"},
{"imp_2ms", "بَيِّضْ"},
{"ind_1p", "نُبَيِّضُ"},
{"ind_1s", "أُبَيِّضُ"},
{"ind_2d", "تُبَيِّضَانِ"},
{"ind_2fp", "تُبَيِّضْنَ"},
{"ind_2fs", "تُبَيِّضِينَ"},
{"ind_2mp", "تُبَيِّضُونَ"},
{"ind_2ms", "تُبَيِّضُ"},
{"ind_3fd", "تُبَيِّضَانِ"},
{"ind_3fp", "يُبَيِّضْنَ"},
{"ind_3fs", "تُبَيِّضُ"},
{"ind_3md", "يُبَيِّضَانِ"},
{"ind_3mp", "يُبَيِّضُونَ"},
{"ind_3ms", "يُبَيِّضُ"},
{"past_1p", "بَيَّضْنَا"},
{"past_1s", "بَيَّضْتُ"},
{"past_2d", "بَيَّضْتُمَا"},
{"past_2fp", "بَيَّضْتُنَّ"},
{"past_2fs", "بَيَّضْتِ"},
{"past_2mp", "بَيَّضْتُمْ"},
{"past_2ms", "بَيَّضْتَ"},
{"past_3fd", "بَيَّضَتَا"},
{"past_3fp", "بَيَّضْنَ"},
{"past_3fs", "بَيَّضَتْ"},
{"past_3md", "بَيَّضَا"},
{"past_3mp", "بَيَّضُوا"},
{"past_3ms", "بَيَّضَ"},
},
},
{
label = "بَكَّى (p.270)", root = "بكي", wazn = "فعّل",
forms = {
{"imp_2d", "بَكِّيَا"},
{"imp_2fp", "بَكِّينَ"},
{"imp_2fs", "بَكِّي"},
{"imp_2mp", "بَكُّوا"},
{"imp_2ms", "بَكِّ"},
{"ind_1p", "نُبَكِّي"},
{"ind_1s", "أُبَكِّي"},
{"ind_2d", "تُبَكِّيَانِ"},
{"ind_2fp", "تُبَكِّينَ"},
{"ind_2fs", "تُبَكِّينَ"},
{"ind_2mp", "تُبَكُّونَ"},
{"ind_2ms", "تُبَكِّي"},
{"ind_3fd", "تُبَكِّيَانِ"},
{"ind_3fp", "يُبَكِّينَ"},
{"ind_3fs", "تُبَكِّي"},
{"ind_3md", "يُبَكِّيَانِ"},
{"ind_3mp", "يُبَكُّونَ"},
{"ind_3ms", "يُبَكِّي"},
{"past_1p", "بَكَّيْنَا"},
{"past_1s", "بَكَّيْتُ"},
{"past_2d", "بَكَّيْتُمَا"},
{"past_2fp", "بَكَّيْتُنَّ"},
{"past_2fs", "بَكَّيْتِ"},
{"past_2mp", "بَكَّيْتُمْ"},
{"past_2ms", "بَكَّيْتَ"},
{"past_3fd", "بَكَّتَا"},
{"past_3fp", "بَكَّيْنَ"},
{"past_3fs", "بَكَّتْ"},
{"past_3md", "بَكَّيَا"},
{"past_3mp", "بَكَّوْا"},
{"past_3ms", "بَكَّى"},
},
},
}
1chb8lybcvhi5qqtdtzgi0pm820cbkp
1159065
1159007
2026-09-10T19:33:47Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159065
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 3 من 16.
return {
{
label = "اِتّايَعَ (p.316، تفاعل مدغم، معتل العين)", root = "تيع", wazn = "تفاعل",
reduced = true,
forms = {
{"imp_2d", "اِتَّايَعَا"},
{"imp_2fp", "اِتَّايَعْنَ"},
{"imp_2fs", "اِتَّايَعِي"},
{"imp_2mp", "اِتَّايَعُوا"},
{"imp_2ms", "اِتَّايَعْ"},
{"ind_1p", "نَتَّايَعُ"},
{"ind_1s", "أَتَّايَعُ"},
{"ind_2d", "تَتَّايَعَانِ"},
{"ind_2fp", "تَتَّايَعْنَ"},
{"ind_2fs", "تَتَّايَعِينَ"},
{"ind_2mp", "تَتَّايَعُونَ"},
{"ind_2ms", "تَتَّايَعُ"},
{"ind_3fd", "تَتَّايَعَانِ"},
{"ind_3fp", "يَتَّايَعْنَ"},
{"ind_3fs", "تَتَّايَعُ"},
{"ind_3md", "يَتَّايَعَانِ"},
{"ind_3mp", "يَتَّايَعُونَ"},
{"ind_3ms", "يَتَّايَعُ"},
{"past_1p", "اِتَّايَعْنَا"},
{"past_1s", "اِتَّايَعْتُ"},
{"past_2d", "اِتَّايَعْتُمَا"},
{"past_2fp", "اِتَّايَعْتُنَّ"},
{"past_2fs", "اِتَّايَعْتِ"},
{"past_2mp", "اِتَّايَعْتُمْ"},
{"past_2ms", "اِتَّايَعْتَ"},
{"past_3fd", "اِتَّايَعَتَا"},
{"past_3fp", "اِتَّايَعْنَ"},
{"past_3fs", "اِتَّايَعَتْ"},
{"past_3md", "اِتَّايَعَا"},
{"past_3mp", "اِتَّايَعُوا"},
{"past_3ms", "اِتَّايَعَ"},
},
},
{
label = "اِنْفَعَلَ (p.321، abstract paradigm)", root = "فعل", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْفَعِلَا"},
{"imp_2fp", "اِنْفَعِلْنَ"},
{"imp_2fs", "اِنْفَعِلِي"},
{"imp_2mp", "اِنْفَعِلُوا"},
{"imp_2ms", "اِنْفَعِلْ"},
{"ind_1p", "نَنْفَعِلُ"},
{"ind_1s", "أَنْفَعِلُ"},
{"ind_2d", "تَنْفَعِلَانِ"},
{"ind_2fp", "تَنْفَعِلْنَ"},
{"ind_2fs", "تَنْفَعِلِينَ"},
{"ind_2mp", "تَنْفَعِلُونَ"},
{"ind_2ms", "تَنْفَعِلُ"},
{"ind_3fd", "تَنْفَعِلَانِ"},
{"ind_3fp", "يَنْفَعِلْنَ"},
{"ind_3fs", "تَنْفَعِلُ"},
{"ind_3md", "يَنْفَعِلَانِ"},
{"ind_3mp", "يَنْفَعِلُونَ"},
{"ind_3ms", "يَنْفَعِلُ"},
{"past_1p", "اِنْفَعَلْنَا"},
{"past_1s", "اِنْفَعَلْتُ"},
{"past_2d", "اِنْفَعَلْتُمَا"},
{"past_2fp", "اِنْفَعَلْتُنَّ"},
{"past_2fs", "اِنْفَعَلْتِ"},
{"past_2mp", "اِنْفَعَلْتُمْ"},
{"past_2ms", "اِنْفَعَلْتَ"},
{"past_3fd", "اِنْفَعَلَتَا"},
{"past_3fp", "اِنْفَعَلْنَ"},
{"past_3fs", "اِنْفَعَلَتْ"},
{"past_3md", "اِنْفَعَلَا"},
{"past_3mp", "اِنْفَعَلُوا"},
{"past_3ms", "اِنْفَعَلَ"},
},
},
{
label = "اِنْأَطَرَ (p.325، انفعل مهموز الفاء)", root = "أطر", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْأَطِرَا"},
{"imp_2fp", "اِنْأَطِرْنَ"},
{"imp_2fs", "اِنْأَطِرِي"},
{"imp_2mp", "اِنْأَطِرُوا"},
{"imp_2ms", "اِنْأَطِرْ"},
{"ind_1p", "نَنْأَطِرُ"},
{"ind_1s", "أَنْأَطِرُ"},
{"ind_2d", "تَنْأَطِرَانِ"},
{"ind_2fp", "تَنْأَطِرْنَ"},
{"ind_2fs", "تَنْأَطِرِينَ"},
{"ind_2mp", "تَنْأَطِرُونَ"},
{"ind_2ms", "تَنْأَطِرُ"},
{"ind_3fd", "تَنْأَطِرَانِ"},
{"ind_3fp", "يَنْأَطِرْنَ"},
{"ind_3fs", "تَنْأَطِرُ"},
{"ind_3md", "يَنْأَطِرَانِ"},
{"ind_3mp", "يَنْأَطِرُونَ"},
{"ind_3ms", "يَنْأَطِرُ"},
{"past_1p", "اِنْأَطَرْنَا"},
{"past_1s", "اِنْأَطَرْتُ"},
{"past_2d", "اِنْأَطَرْتُمَا"},
{"past_2fp", "اِنْأَطَرْتُنَّ"},
{"past_2fs", "اِنْأَطَرْتِ"},
{"past_2mp", "اِنْأَطَرْتُمْ"},
{"past_2ms", "اِنْأَطَرْتَ"},
{"past_3fd", "اِنْأَطَرَتَا"},
{"past_3fp", "اِنْأَطَرْنَ"},
{"past_3fs", "اِنْأَطَرَتْ"},
{"past_3md", "اِنْأَطَرَا"},
{"past_3mp", "اِنْأَطَرُوا"},
{"past_3ms", "اِنْأَطَرَ"},
},
},
{
label = "اِفْعَلَّ (p.356، abstract paradigm)", root = "فعل", wazn = "افعلّ",
forms = {
{"imp_2d", "اِفْعَلَّا"},
{"imp_2fp", "اِفْعَلِلْنَ"},
{"imp_2fs", "اِفْعَلِّي"},
{"imp_2mp", "اِفْعَلُّوا"},
{"imp_2ms", "اِفْعَلَّ"},
{"ind_1p", "نَفْعَلُّ"},
{"ind_1s", "أَفْعَلُّ"},
{"ind_2d", "تَفْعَلَّانِ"},
{"ind_2fp", "تَفْعَلِلْنَ"},
{"ind_2fs", "تَفْعَلِّينَ"},
{"ind_2mp", "تَفْعَلُّونَ"},
{"ind_2ms", "تَفْعَلُّ"},
{"ind_3fd", "تَفْعَلَّانِ"},
{"ind_3fp", "يَفْعَلِلْنَ"},
{"ind_3fs", "تَفْعَلُّ"},
{"ind_3md", "يَفْعَلَّانِ"},
{"ind_3mp", "يَفْعَلُّونَ"},
{"ind_3ms", "يَفْعَلُّ"},
{"past_1p", "اِفْعَلَلْنَا"},
{"past_1s", "اِفْعَلَلْتُ"},
{"past_2d", "اِفْعَلَلْتُمَا"},
{"past_2fp", "اِفْعَلَلْتُنَّ"},
{"past_2fs", "اِفْعَلَلْتِ"},
{"past_2mp", "اِفْعَلَلْتُمْ"},
{"past_2ms", "اِفْعَلَلْتَ"},
{"past_3fd", "اِفْعَلَّتَا"},
{"past_3fp", "اِفْعَلَلْنَ"},
{"past_3fs", "اِفْعَلَّتْ"},
{"past_3md", "اِفْعَلَّا"},
{"past_3mp", "اِفْعَلُّوا"},
{"past_3ms", "اِفْعَلَّ"},
},
},
{
label = "اِسْتَفْعَلَ (p.360، abstract paradigm)", root = "فعل", wazn = "استفعل",
pass = true,
forms = {
{"imp_2d", "اِسْتَفْعِلَا"},
{"imp_2fp", "اِسْتَفْعِلْنَ"},
{"imp_2fs", "اِسْتَفْعِلِي"},
{"imp_2mp", "اِسْتَفْعِلُوا"},
{"imp_2ms", "اِسْتَفْعِلْ"},
{"ind_1p", "نَسْتَفْعِلُ"},
{"ind_1s", "أَسْتَفْعِلُ"},
{"ind_2d", "تَسْتَفْعِلَانِ"},
{"ind_2fp", "تَسْتَفْعِلْنَ"},
{"ind_2fs", "تَسْتَفْعِلِينَ"},
{"ind_2mp", "تَسْتَفْعِلُونَ"},
{"ind_2ms", "تَسْتَفْعِلُ"},
{"ind_3fd", "تَسْتَفْعِلَانِ"},
{"ind_3fp", "يَسْتَفْعِلْنَ"},
{"ind_3fs", "تَسْتَفْعِلُ"},
{"ind_3md", "يَسْتَفْعِلَانِ"},
{"ind_3mp", "يَسْتَفْعِلُونَ"},
{"ind_3ms", "يَسْتَفْعِلُ"},
{"ind_pass_1p", "نُسْتَفْعَلُ"},
{"ind_pass_1s", "أُسْتَفْعَلُ"},
{"ind_pass_2d", "تُسْتَفْعَلَانِ"},
{"ind_pass_2fp", "تُسْتَفْعَلْنَ"},
{"ind_pass_2fs", "تُسْتَفْعَلِينَ"},
{"ind_pass_2mp", "تُسْتَفْعَلُونَ"},
{"ind_pass_2ms", "تُسْتَفْعَلُ"},
{"ind_pass_3fd", "تُسْتَفْعَلَانِ"},
{"ind_pass_3fp", "يُسْتَفْعَلْنَ"},
{"ind_pass_3fs", "تُسْتَفْعَلُ"},
{"ind_pass_3md", "يُسْتَفْعَلَانِ"},
{"ind_pass_3mp", "يُسْتَفْعَلُونَ"},
{"ind_pass_3ms", "يُسْتَفْعَلُ"},
{"past_1p", "اِسْتَفْعَلْنَا"},
{"past_1s", "اِسْتَفْعَلْتُ"},
{"past_2d", "اِسْتَفْعَلْتُمَا"},
{"past_2fp", "اِسْتَفْعَلْتُنَّ"},
{"past_2fs", "اِسْتَفْعَلْتِ"},
{"past_2mp", "اِسْتَفْعَلْتُمْ"},
{"past_2ms", "اِسْتَفْعَلْتَ"},
{"past_3fd", "اِسْتَفْعَلَتَا"},
{"past_3fp", "اِسْتَفْعَلْنَ"},
{"past_3fs", "اِسْتَفْعَلَتْ"},
{"past_3md", "اِسْتَفْعَلَا"},
{"past_3mp", "اِسْتَفْعَلُوا"},
{"past_3ms", "اِسْتَفْعَلَ"},
{"past_pass_1p", "اُسْتُفْعِلْنَا"},
{"past_pass_1s", "اُسْتُفْعِلْتُ"},
{"past_pass_2d", "اُسْتُفْعِلْتُمَا"},
{"past_pass_2fp", "اُسْتُفْعِلْتُنَّ"},
{"past_pass_2fs", "اُسْتُفْعِلْتِ"},
{"past_pass_2mp", "اُسْتُفْعِلْتُمْ"},
{"past_pass_2ms", "اُسْتُفْعِلْتَ"},
{"past_pass_3fd", "اُسْتُفْعِلَتَا"},
{"past_pass_3fp", "اُسْتُفْعِلْنَ"},
{"past_pass_3fs", "اُسْتُفْعِلَتْ"},
{"past_pass_3md", "اُسْتُفْعِلَا"},
{"past_pass_3mp", "اُسْتُفْعِلُوا"},
{"past_pass_3ms", "اُسْتُفْعِلَ"},
},
},
{
label = "اِفْعَوْعَلَ (p.374، abstract paradigm)", root = "فعل", wazn = "افعوعل",
pass = true,
forms = {
{"imp_2d", "اِفْعَوْعِلَا"},
{"imp_2fp", "اِفْعَوْعِلْنَ"},
{"imp_2fs", "اِفْعَوْعِلِي"},
{"imp_2mp", "اِفْعَوْعِلُوا"},
{"imp_2ms", "اِفْعَوْعِلْ"},
{"ind_1p", "نَفْعَوْعِلُ"},
{"ind_1s", "أَفْعَوْعِلُ"},
{"ind_2d", "تَفْعَوْعِلَانِ"},
{"ind_2fp", "تَفْعَوْعِلْنَ"},
{"ind_2fs", "تَفْعَوْعِلِينَ"},
{"ind_2mp", "تَفْعَوْعِلُونَ"},
{"ind_2ms", "تَفْعَوْعِلُ"},
{"ind_3fd", "تَفْعَوْعِلَانِ"},
{"ind_3fp", "يَفْعَوْعِلْنَ"},
{"ind_3fs", "تَفْعَوْعِلُ"},
{"ind_3md", "يَفْعَوْعِلَانِ"},
{"ind_3mp", "يَفْعَوْعِلُونَ"},
{"ind_3ms", "يَفْعَوْعِلُ"},
{"ind_pass_1p", "نُفْعَوْعَلُ"},
{"ind_pass_1s", "أُفْعَوْعَلُ"},
{"ind_pass_2d", "تُفْعَوْعَلَانِ"},
{"ind_pass_2fp", "تُفْعَوْعَلْنَ"},
{"ind_pass_2fs", "تُفْعَوْعَلِينَ"},
{"ind_pass_2mp", "تُفْعَوْعَلُونَ"},
{"ind_pass_2ms", "تُفْعَوْعَلُ"},
{"ind_pass_3fd", "تُفْعَوْعَلَانِ"},
{"ind_pass_3fp", "يُفْعَوْعَلْنَ"},
{"ind_pass_3fs", "تُفْعَوْعَلُ"},
{"ind_pass_3md", "يُفْعَوْعَلَانِ"},
{"ind_pass_3mp", "يُفْعَوْعَلُونَ"},
{"ind_pass_3ms", "يُفْعَوْعَلُ"},
{"past_1p", "اِفْعَوْعَلْنَا"},
{"past_1s", "اِفْعَوْعَلْتُ"},
{"past_2d", "اِفْعَوْعَلْتُمَا"},
{"past_2fp", "اِفْعَوْعَلْتُنَّ"},
{"past_2fs", "اِفْعَوْعَلْتِ"},
{"past_2mp", "اِفْعَوْعَلْتُمْ"},
{"past_2ms", "اِفْعَوْعَلْتَ"},
{"past_3fd", "اِفْعَوْعَلَتَا"},
{"past_3fp", "اِفْعَوْعَلْنَ"},
{"past_3fs", "اِفْعَوْعَلَتْ"},
{"past_3md", "اِفْعَوْعَلَا"},
{"past_3mp", "اِفْعَوْعَلُوا"},
{"past_3ms", "اِفْعَوْعَلَ"},
{"past_pass_1p", "اُفْعُوعِلْنَا"},
{"past_pass_1s", "اُفْعُوعِلْتُ"},
{"past_pass_2d", "اُفْعُوعِلْتُمَا"},
{"past_pass_2fp", "اُفْعُوعِلْتُنَّ"},
{"past_pass_2fs", "اُفْعُوعِلْتِ"},
{"past_pass_2mp", "اُفْعُوعِلْتُمْ"},
{"past_pass_2ms", "اُفْعُوعِلْتَ"},
{"past_pass_3fd", "اُفْعُوعِلَتَا"},
{"past_pass_3fp", "اُفْعُوعِلْنَ"},
{"past_pass_3fs", "اُفْعُوعِلَتْ"},
{"past_pass_3md", "اُفْعُوعِلَا"},
{"past_pass_3mp", "اُفْعُوعِلُوا"},
{"past_pass_3ms", "اُفْعُوعِلَ"},
},
},
{
label = "اِفْعَوَّلَ (p.375، abstract paradigm)", root = "فعل", wazn = "افعوّل",
pass = true,
forms = {
{"imp_2d", "اِفْعَوِّلَا"},
{"imp_2fp", "اِفْعَوِّلْنَ"},
{"imp_2fs", "اِفْعَوِّلِي"},
{"imp_2mp", "اِفْعَوِّلُوا"},
{"imp_2ms", "اِفْعَوِّلْ"},
{"ind_1p", "نَفْعَوِّلُ"},
{"ind_1s", "أَفْعَوِّلُ"},
{"ind_2d", "تَفْعَوِّلَانِ"},
{"ind_2fp", "تَفْعَوِّلْنَ"},
{"ind_2fs", "تَفْعَوِّلِينَ"},
{"ind_2mp", "تَفْعَوِّلُونَ"},
{"ind_2ms", "تَفْعَوِّلُ"},
{"ind_3fd", "تَفْعَوِّلَانِ"},
{"ind_3fp", "يَفْعَوِّلْنَ"},
{"ind_3fs", "تَفْعَوِّلُ"},
{"ind_3md", "يَفْعَوِّلَانِ"},
{"ind_3mp", "يَفْعَوِّلُونَ"},
{"ind_3ms", "يَفْعَوِّلُ"},
{"ind_pass_1p", "نُفْعَوَّلُ"},
{"ind_pass_1s", "أُفْعَوَّلُ"},
{"ind_pass_2d", "تُفْعَوَّلَانِ"},
{"ind_pass_2fp", "تُفْعَوَّلْنَ"},
{"ind_pass_2fs", "تُفْعَوَّلِينَ"},
{"ind_pass_2mp", "تُفْعَوَّلُونَ"},
{"ind_pass_2ms", "تُفْعَوَّلُ"},
{"ind_pass_3fd", "تُفْعَوَّلَانِ"},
{"ind_pass_3fp", "يُفْعَوَّلْنَ"},
{"ind_pass_3fs", "تُفْعَوَّلُ"},
{"ind_pass_3md", "يُفْعَوَّلَانِ"},
{"ind_pass_3mp", "يُفْعَوَّلُونَ"},
{"ind_pass_3ms", "يُفْعَوَّلُ"},
{"past_1p", "اِفْعَوَّلْنَا"},
{"past_1s", "اِفْعَوَّلْتُ"},
{"past_2d", "اِفْعَوَّلْتُمَا"},
{"past_2fp", "اِفْعَوَّلْتُنَّ"},
{"past_2fs", "اِفْعَوَّلْتِ"},
{"past_2mp", "اِفْعَوَّلْتُمْ"},
{"past_2ms", "اِفْعَوَّلْتَ"},
{"past_3fd", "اِفْعَوَّلَتَا"},
{"past_3fp", "اِفْعَوَّلْنَ"},
{"past_3fs", "اِفْعَوَّلَتْ"},
{"past_3md", "اِفْعَوَّلَا"},
{"past_3mp", "اِفْعَوَّلُوا"},
{"past_3ms", "اِفْعَوَّلَ"},
{"past_pass_1p", "اُفْعُوِّلْنَا"},
{"past_pass_1s", "اُفْعُوِّلْتُ"},
{"past_pass_2d", "اُفْعُوِّلْتُمَا"},
{"past_pass_2fp", "اُفْعُوِّلْتُنَّ"},
{"past_pass_2fs", "اُفْعُوِّلْتِ"},
{"past_pass_2mp", "اُفْعُوِّلْتُمْ"},
{"past_pass_2ms", "اُفْعُوِّلْتَ"},
{"past_pass_3fd", "اُفْعُوِّلَتَا"},
{"past_pass_3fp", "اُفْعُوِّلْنَ"},
{"past_pass_3fs", "اُفْعُوِّلَتْ"},
{"past_pass_3md", "اُفْعُوِّلَا"},
{"past_pass_3mp", "اُفْعُوِّلُوا"},
{"past_pass_3ms", "اُفْعُوِّلَ"},
},
},
{
label = "اِفْعالَّ (p.376، abstract paradigm)", root = "فعل", wazn = "افعالّ",
forms = {
{"imp_2d", "اِفْعَالَّا"},
{"imp_2fp", "اِفْعَالِلْنَ"},
{"imp_2fs", "اِفْعَالِّي"},
{"imp_2mp", "اِفْعَالُّوا"},
{"imp_2ms", "اِفْعَالِلْ"},
{"ind_1p", "نَفْعَالُّ"},
{"ind_1s", "أَفْعَالُّ"},
{"ind_2d", "تَفْعَالَّانِ"},
{"ind_2fp", "تَفْعَالِلْنَ"},
{"ind_2fs", "تَفْعَالِّينَ"},
{"ind_2mp", "تَفْعَالُّونَ"},
{"ind_2ms", "تَفْعَالُّ"},
{"ind_3fd", "تَفْعَالَّانِ"},
{"ind_3fp", "يَفْعَالِلْنَ"},
{"ind_3fs", "تَفْعَالُّ"},
{"ind_3md", "يَفْعَالَّانِ"},
{"ind_3mp", "يَفْعَالُّونَ"},
{"ind_3ms", "يَفْعَالُّ"},
{"past_1p", "اِفْعَالَلْنَا"},
{"past_1s", "اِفْعَالَلْتُ"},
{"past_2d", "اِفْعَالَلْتُمَا"},
{"past_2fp", "اِفْعَالَلْتُنَّ"},
{"past_2fs", "اِفْعَالَلْتِ"},
{"past_2mp", "اِفْعَالَلْتُمْ"},
{"past_2ms", "اِفْعَالَلْتَ"},
{"past_3fd", "اِفْعَالَّتَا"},
{"past_3fp", "اِفْعَالَلْنَ"},
{"past_3fs", "اِفْعَالَّتْ"},
{"past_3md", "اِفْعَالَّا"},
{"past_3mp", "اِفْعَالُّوا"},
{"past_3ms", "اِفْعَالَّ"},
},
},
{
label = "اِجْلَوَّذَ (p.377، افعوّل صحيح سالم)", root = "جلذ", wazn = "افعوّل",
forms = {
{"imp_2d", "اِجْلَوِّذَا"},
{"imp_2fp", "اِجْلَوِّذْنَ"},
{"imp_2fs", "اِجْلَوِّذِي"},
{"imp_2mp", "اِجْلَوِّذُوا"},
{"imp_2ms", "اِجْلَوِّذْ"},
{"ind_1p", "نَجْلَوِّذُ"},
{"ind_1s", "أَجْلَوِّذُ"},
{"ind_2d", "تَجْلَوِّذَانِ"},
{"ind_2fp", "تَجْلَوِّذْنَ"},
{"ind_2fs", "تَجْلَوِّذِينَ"},
{"ind_2mp", "تَجْلَوِّذُونَ"},
{"ind_2ms", "تَجْلَوِّذُ"},
{"ind_3fd", "تَجْلَوِّذَانِ"},
{"ind_3fp", "يَجْلَوِّذْنَ"},
{"ind_3fs", "تَجْلَوِّذُ"},
{"ind_3md", "يَجْلَوِّذَانِ"},
{"ind_3mp", "يَجْلَوِّذُونَ"},
{"ind_3ms", "يَجْلَوِّذُ"},
{"past_1p", "اِجْلَوَّذْنَا"},
{"past_1s", "اِجْلَوَّذْتُ"},
{"past_2d", "اِجْلَوَّذْتُمَا"},
{"past_2fp", "اِجْلَوَّذْتُنَّ"},
{"past_2fs", "اِجْلَوَّذْتِ"},
{"past_2mp", "اِجْلَوَّذْتُمْ"},
{"past_2ms", "اِجْلَوَّذْتَ"},
{"past_3fd", "اِجْلَوَّذَتَا"},
{"past_3fp", "اِجْلَوَّذْنَ"},
{"past_3fs", "اِجْلَوَّذَتْ"},
{"past_3md", "اِجْلَوَّذَا"},
{"past_3mp", "اِجْلَوَّذُوا"},
{"past_3ms", "اِجْلَوَّذَ"},
},
},
{
label = "اِدْهامَّ (p.379، افعالّ صحيح سالم)", root = "دهم", wazn = "افعالّ",
forms = {
{"imp_2d", "اِدْهَامَّا"},
{"imp_2fp", "اِدْهَامِمْنَ"},
{"imp_2fs", "اِدْهَامِّي"},
{"imp_2mp", "اِدْهَامُّوا"},
{"imp_2ms", "اِدْهَامِمْ"},
{"ind_1p", "نَدْهَامُّ"},
{"ind_1s", "أَدْهَامُّ"},
{"ind_2d", "تَدْهَامَّانِ"},
{"ind_2fp", "تَدْهَامِمْنَ"},
{"ind_2fs", "تَدْهَامِّينَ"},
{"ind_2mp", "تَدْهَامُّونَ"},
{"ind_2ms", "تَدْهَامُّ"},
{"ind_3fd", "تَدْهَامَّانِ"},
{"ind_3fp", "يَدْهَامِمْنَ"},
{"ind_3fs", "تَدْهَامُّ"},
{"ind_3md", "يَدْهَامَّانِ"},
{"ind_3mp", "يَدْهَامُّونَ"},
{"ind_3ms", "يَدْهَامُّ"},
{"past_1p", "اِدْهَامَمْنَا"},
{"past_1s", "اِدْهَامَمْتُ"},
{"past_2d", "اِدْهَامَمْتُمَا"},
{"past_2fp", "اِدْهَامَمْتُنَّ"},
{"past_2fs", "اِدْهَامَمْتِ"},
{"past_2mp", "اِدْهَامَمْتُمْ"},
{"past_2ms", "اِدْهَامَمْتَ"},
{"past_3fd", "اِدْهَامَّتَا"},
{"past_3fp", "اِدْهَامَمْنَ"},
{"past_3fs", "اِدْهَامَّتْ"},
{"past_3md", "اِدْهَامَّا"},
{"past_3mp", "اِدْهَامُّوا"},
{"past_3ms", "اِدْهَامَّ"},
},
},
{
label = "اِحْوَوَّى (p.384، افعوّل لفيف مقرون)", root = "حوي", wazn = "افعوّل",
forms = {
{"imp_2d", "اِحْوَوِّيَا"},
{"imp_2fp", "اِحْوَوِّينَ"},
{"imp_2fs", "اِحْوَوِّي"},
{"imp_2mp", "اِحْوَوُّوا"},
{"imp_2ms", "اِحْوَوِّ"},
{"ind_1p", "نَحْوَوِّي"},
{"ind_1s", "أَحْوَوِّي"},
{"ind_2d", "تَحْوَوِّيَانِ"},
{"ind_2fp", "تَحْوَوِّينَ"},
{"ind_2fs", "تَحْوَوِّينَ"},
{"ind_2mp", "تَحْوَوُّونَ"},
{"ind_2ms", "تَحْوَوِّي"},
{"ind_3fd", "تَحْوَوِّيَانِ"},
{"ind_3fp", "يَحْوَوِّينَ"},
{"ind_3fs", "تَحْوَوِّي"},
{"ind_3md", "يَحْوَوِّيَانِ"},
{"ind_3mp", "يَحْوَوُّونَ"},
{"ind_3ms", "يَحْوَوِّي"},
{"past_1p", "اِحْوَوَّيْنَا"},
{"past_1s", "اِحْوَوَّيْتُ"},
{"past_2d", "اِحْوَوَّيْتُمَا"},
{"past_2fp", "اِحْوَوَّيْتُنَّ"},
{"past_2fs", "اِحْوَوَّيْتِ"},
{"past_2mp", "اِحْوَوَّيْتُمْ"},
{"past_2ms", "اِحْوَوَّيْتَ"},
{"past_3fd", "اِحْوَوَّتَا"},
{"past_3fp", "اِحْوَوَّيْنَ"},
{"past_3fs", "اِحْوَوَّتْ"},
{"past_3md", "اِحْوَوَّيَا"},
{"past_3mp", "اِحْوَوَّوْا"},
{"past_3ms", "اِحْوَوَّى"},
},
},
{
label = "تَفَعْلَلَ (p.399، abstract paradigm)", root = "فعلل", wazn = "تفعلل",
pass = true,
forms = {
{"imp_2d", "تَفَعْلَلَا"},
{"imp_2fp", "تَفَعْلَلْنَ"},
{"imp_2fs", "تَفَعْلَلِي"},
{"imp_2mp", "تَفَعْلَلُوا"},
{"imp_2ms", "تَفَعْلَلْ"},
{"ind_1p", "نَتَفَعْلَلُ"},
{"ind_1s", "أَتَفَعْلَلُ"},
{"ind_2d", "تَتَفَعْلَلَانِ"},
{"ind_2fp", "تَتَفَعْلَلْنَ"},
{"ind_2fs", "تَتَفَعْلَلِينَ"},
{"ind_2mp", "تَتَفَعْلَلُونَ"},
{"ind_2ms", "تَتَفَعْلَلُ"},
{"ind_3fd", "تَتَفَعْلَلَانِ"},
{"ind_3fp", "يَتَفَعْلَلْنَ"},
{"ind_3fs", "تَتَفَعْلَلُ"},
{"ind_3md", "يَتَفَعْلَلَانِ"},
{"ind_3mp", "يَتَفَعْلَلُونَ"},
{"ind_3ms", "يَتَفَعْلَلُ"},
{"ind_pass_1p", "نُتَفَعْلَلُ"},
{"ind_pass_1s", "أُتَفَعْلَلُ"},
{"ind_pass_2d", "تُتَفَعْلَلَانِ"},
{"ind_pass_2fp", "تُتَفَعْلَلْنَ"},
{"ind_pass_2fs", "تُتَفَعْلَلِينَ"},
{"ind_pass_2mp", "تُتَفَعْلَلُونَ"},
{"ind_pass_2ms", "تُتَفَعْلَلُ"},
{"ind_pass_3fd", "تُتَفَعْلَلَانِ"},
{"ind_pass_3fp", "يُتَفَعْلَلْنَ"},
{"ind_pass_3fs", "تُتَفَعْلَلُ"},
{"ind_pass_3md", "يُتَفَعْلَلَانِ"},
{"ind_pass_3mp", "يُتَفَعْلَلُونَ"},
{"ind_pass_3ms", "يُتَفَعْلَلُ"},
{"past_1p", "تَفَعْلَلْنَا"},
{"past_1s", "تَفَعْلَلْتُ"},
{"past_2d", "تَفَعْلَلْتُمَا"},
{"past_2fp", "تَفَعْلَلْتُنَّ"},
{"past_2fs", "تَفَعْلَلْتِ"},
{"past_2mp", "تَفَعْلَلْتُمْ"},
{"past_2ms", "تَفَعْلَلْتَ"},
{"past_3fd", "تَفَعْلَلَتَا"},
{"past_3fp", "تَفَعْلَلْنَ"},
{"past_3fs", "تَفَعْلَلَتْ"},
{"past_3md", "تَفَعْلَلَا"},
{"past_3mp", "تَفَعْلَلُوا"},
{"past_3ms", "تَفَعْلَلَ"},
{"past_pass_1p", "تُفُعْلِلْنَا"},
{"past_pass_1s", "تُفُعْلِلْتُ"},
{"past_pass_2d", "تُفُعْلِلْتُمَا"},
{"past_pass_2fp", "تُفُعْلِلْتُنَّ"},
{"past_pass_2fs", "تُفُعْلِلْتِ"},
{"past_pass_2mp", "تُفُعْلِلْتُمْ"},
{"past_pass_2ms", "تُفُعْلِلْتَ"},
{"past_pass_3fd", "تُفُعْلِلَتَا"},
{"past_pass_3fp", "تُفُعْلِلْنَ"},
{"past_pass_3fs", "تُفُعْلِلَتْ"},
{"past_pass_3md", "تُفُعْلِلَا"},
{"past_pass_3mp", "تُفُعْلِلُوا"},
{"past_pass_3ms", "تُفُعْلِلَ"},
},
},
{
label = "تَفَعْوَلَ (p.401، abstract paradigm)", root = "فعول", wazn = "تفعلل",
pass = true,
forms = {
{"imp_2d", "تَفَعْوَلَا"},
{"imp_2fp", "تَفَعْوَلْنَ"},
{"imp_2fs", "تَفَعْوَلِي"},
{"imp_2mp", "تَفَعْوَلُوا"},
{"imp_2ms", "تَفَعْوَلْ"},
{"ind_1p", "نَتَفَعْوَلُ"},
{"ind_1s", "أَتَفَعْوَلُ"},
{"ind_2d", "تَتَفَعْوَلَانِ"},
{"ind_2fp", "تَتَفَعْوَلْنَ"},
{"ind_2fs", "تَتَفَعْوَلِينَ"},
{"ind_2mp", "تَتَفَعْوَلُونَ"},
{"ind_2ms", "تَتَفَعْوَلُ"},
{"ind_3fd", "تَتَفَعْوَلَانِ"},
{"ind_3fp", "يَتَفَعْوَلْنَ"},
{"ind_3fs", "تَتَفَعْوَلُ"},
{"ind_3md", "يَتَفَعْوَلَانِ"},
{"ind_3mp", "يَتَفَعْوَلُونَ"},
{"ind_3ms", "يَتَفَعْوَلُ"},
{"ind_pass_1p", "نُتَفَعْوَلُ"},
{"ind_pass_1s", "أُتَفَعْوَلُ"},
{"ind_pass_2d", "تُتَفَعْوَلَانِ"},
{"ind_pass_2fp", "تُتَفَعْوَلْنَ"},
{"ind_pass_2fs", "تُتَفَعْوَلِينَ"},
{"ind_pass_2mp", "تُتَفَعْوَلُونَ"},
{"ind_pass_2ms", "تُتَفَعْوَلُ"},
{"ind_pass_3fd", "تُتَفَعْوَلَانِ"},
{"ind_pass_3fp", "يُتَفَعْوَلْنَ"},
{"ind_pass_3fs", "تُتَفَعْوَلُ"},
{"ind_pass_3md", "يُتَفَعْوَلَانِ"},
{"ind_pass_3mp", "يُتَفَعْوَلُونَ"},
{"ind_pass_3ms", "يُتَفَعْوَلُ"},
{"past_1p", "تَفَعْوَلْنَا"},
{"past_1s", "تَفَعْوَلْتُ"},
{"past_2d", "تَفَعْوَلْتُمَا"},
{"past_2fp", "تَفَعْوَلْتُنَّ"},
{"past_2fs", "تَفَعْوَلْتِ"},
{"past_2mp", "تَفَعْوَلْتُمْ"},
{"past_2ms", "تَفَعْوَلْتَ"},
{"past_3fd", "تَفَعْوَلَتَا"},
{"past_3fp", "تَفَعْوَلْنَ"},
{"past_3fs", "تَفَعْوَلَتْ"},
{"past_3md", "تَفَعْوَلَا"},
{"past_3mp", "تَفَعْوَلُوا"},
{"past_3ms", "تَفَعْوَلَ"},
{"past_pass_1p", "تُفُعْوِلْنَا"},
{"past_pass_1s", "تُفُعْوِلْتُ"},
{"past_pass_2d", "تُفُعْوِلْتُمَا"},
{"past_pass_2fp", "تُفُعْوِلْتُنَّ"},
{"past_pass_2fs", "تُفُعْوِلْتِ"},
{"past_pass_2mp", "تُفُعْوِلْتُمْ"},
{"past_pass_2ms", "تُفُعْوِلْتَ"},
{"past_pass_3fd", "تُفُعْوِلَتَا"},
{"past_pass_3fp", "تُفُعْوِلْنَ"},
{"past_pass_3fs", "تُفُعْوِلَتْ"},
{"past_pass_3md", "تُفُعْوِلَا"},
{"past_pass_3mp", "تُفُعْوِلُوا"},
{"past_pass_3ms", "تُفُعْوِلَ"},
},
},
{
label = "تَفَعْيَلَ (p.402، abstract paradigm)", root = "فعيل", wazn = "تفعلل",
pass = true,
forms = {
{"imp_2d", "تَفَعْيَلَا"},
{"imp_2fp", "تَفَعْيَلْنَ"},
{"imp_2fs", "تَفَعْيَلِي"},
{"imp_2mp", "تَفَعْيَلُوا"},
{"imp_2ms", "تَفَعْيَلْ"},
{"ind_1p", "نَتَفَعْيَلُ"},
{"ind_1s", "أَتَفَعْيَلُ"},
{"ind_2d", "تَتَفَعْيَلَانِ"},
{"ind_2fp", "تَتَفَعْيَلْنَ"},
{"ind_2fs", "تَتَفَعْيَلِينَ"},
{"ind_2mp", "تَتَفَعْيَلُونَ"},
{"ind_2ms", "تَتَفَعْيَلُ"},
{"ind_3fd", "تَتَفَعْيَلَانِ"},
{"ind_3fp", "يَتَفَعْيَلْنَ"},
{"ind_3fs", "تَتَفَعْيَلُ"},
{"ind_3md", "يَتَفَعْيَلَانِ"},
{"ind_3mp", "يَتَفَعْيَلُونَ"},
{"ind_3ms", "يَتَفَعْيَلُ"},
{"ind_pass_1p", "نُتَفَعْيَلُ"},
{"ind_pass_1s", "أُتَفَعْيَلُ"},
{"ind_pass_2d", "تُتَفَعْيَلَانِ"},
{"ind_pass_2fp", "تُتَفَعْيَلْنَ"},
{"ind_pass_2fs", "تُتَفَعْيَلِينَ"},
{"ind_pass_2mp", "تُتَفَعْيَلُونَ"},
{"ind_pass_2ms", "تُتَفَعْيَلُ"},
{"ind_pass_3fd", "تُتَفَعْيَلَانِ"},
{"ind_pass_3fp", "يُتَفَعْيَلْنَ"},
{"ind_pass_3fs", "تُتَفَعْيَلُ"},
{"ind_pass_3md", "يُتَفَعْيَلَانِ"},
{"ind_pass_3mp", "يُتَفَعْيَلُونَ"},
{"ind_pass_3ms", "يُتَفَعْيَلُ"},
{"past_1p", "تَفَعْيَلْنَا"},
{"past_1s", "تَفَعْيَلْتُ"},
{"past_2d", "تَفَعْيَلْتُمَا"},
{"past_2fp", "تَفَعْيَلْتُنَّ"},
{"past_2fs", "تَفَعْيَلْتِ"},
{"past_2mp", "تَفَعْيَلْتُمْ"},
{"past_2ms", "تَفَعْيَلْتَ"},
{"past_3fd", "تَفَعْيَلَتَا"},
{"past_3fp", "تَفَعْيَلْنَ"},
{"past_3fs", "تَفَعْيَلَتْ"},
{"past_3md", "تَفَعْيَلَا"},
{"past_3mp", "تَفَعْيَلُوا"},
{"past_3ms", "تَفَعْيَلَ"},
{"past_pass_1p", "تُفُعْيِلْنَا"},
{"past_pass_1s", "تُفُعْيِلْتُ"},
{"past_pass_2d", "تُفُعْيِلْتُمَا"},
{"past_pass_2fp", "تُفُعْيِلْتُنَّ"},
{"past_pass_2fs", "تُفُعْيِلْتِ"},
{"past_pass_2mp", "تُفُعْيِلْتُمْ"},
{"past_pass_2ms", "تُفُعْيِلْتَ"},
{"past_pass_3fd", "تُفُعْيِلَتَا"},
{"past_pass_3fp", "تُفُعْيِلْنَ"},
{"past_pass_3fs", "تُفُعْيِلَتْ"},
{"past_pass_3md", "تُفُعْيِلَا"},
{"past_pass_3mp", "تُفُعْيِلُوا"},
{"past_pass_3ms", "تُفُعْيِلَ"},
},
},
{
label = "اِفْعَنْلَلَ (p.411، abstract paradigm)", root = "فعلل", wazn = "افعنلل",
forms = {
{"imp_2d", "اِفْعَنْلِلَا"},
{"imp_2fp", "اِفْعَنْلِلْنَ"},
{"imp_2fs", "اِفْعَنْلِلِي"},
{"imp_2mp", "اِفْعَنْلِلُوا"},
{"imp_2ms", "اِفْعَنْلِلْ"},
{"ind_1p", "نَفْعَنْلِلُ"},
{"ind_1s", "أَفْعَنْلِلُ"},
{"ind_2d", "تَفْعَنْلِلَانِ"},
{"ind_2fp", "تَفْعَنْلِلْنَ"},
{"ind_2fs", "تَفْعَنْلِلِينَ"},
{"ind_2mp", "تَفْعَنْلِلُونَ"},
{"ind_2ms", "تَفْعَنْلِلُ"},
{"ind_3fd", "تَفْعَنْلِلَانِ"},
{"ind_3fp", "يَفْعَنْلِلْنَ"},
{"ind_3fs", "تَفْعَنْلِلُ"},
{"ind_3md", "يَفْعَنْلِلَانِ"},
{"ind_3mp", "يَفْعَنْلِلُونَ"},
{"ind_3ms", "يَفْعَنْلِلُ"},
{"past_1p", "اِفْعَنْلَلْنَا"},
{"past_1s", "اِفْعَنْلَلْتُ"},
{"past_2d", "اِفْعَنْلَلْتُمَا"},
{"past_2fp", "اِفْعَنْلَلْتُنَّ"},
{"past_2fs", "اِفْعَنْلَلْتِ"},
{"past_2mp", "اِفْعَنْلَلْتُمْ"},
{"past_2ms", "اِفْعَنْلَلْتَ"},
{"past_3fd", "اِفْعَنْلَلَتَا"},
{"past_3fp", "اِفْعَنْلَلْنَ"},
{"past_3fs", "اِفْعَنْلَلَتْ"},
{"past_3md", "اِفْعَنْلَلَا"},
{"past_3mp", "اِفْعَنْلَلُوا"},
{"past_3ms", "اِفْعَنْلَلَ"},
},
},
{
label = "اِنْقاضَّ (p.380، افعالّ)", root = "نقض", wazn = "افعالّ",
forms = {
{"imp_2d", "اِنْقَاضَّا"},
{"imp_2fp", "اِنْقَاضِضْنَ"},
{"imp_2fs", "اِنْقَاضِّي"},
{"imp_2mp", "اِنْقَاضُّوا"},
{"imp_2ms", "اِنْقَاضِضْ"},
{"ind_1p", "نَنْقَاضُّ"},
{"ind_1s", "أَنْقَاضُّ"},
{"ind_2d", "تَنْقَاضَّانِ"},
{"ind_2fp", "تَنْقَاضِضْنَ"},
{"ind_2fs", "تَنْقَاضِّينَ"},
{"ind_2mp", "تَنْقَاضُّونَ"},
{"ind_2ms", "تَنْقَاضُّ"},
{"ind_3fd", "تَنْقَاضَّانِ"},
{"ind_3fp", "يَنْقَاضِضْنَ"},
{"ind_3fs", "تَنْقَاضُّ"},
{"ind_3md", "يَنْقَاضَّانِ"},
{"ind_3mp", "يَنْقَاضُّونَ"},
{"ind_3ms", "يَنْقَاضُّ"},
{"past_1p", "اِنْقَاضَضْنَا"},
{"past_1s", "اِنْقَاضَضْتُ"},
{"past_2d", "اِنْقَاضَضْتُمَا"},
{"past_2fp", "اِنْقَاضَضْتُنَّ"},
{"past_2fs", "اِنْقَاضَضْتِ"},
{"past_2mp", "اِنْقَاضَضْتُمْ"},
{"past_2ms", "اِنْقَاضَضْتَ"},
{"past_3fd", "اِنْقَاضَّتَا"},
{"past_3fp", "اِنْقَاضَضْنَ"},
{"past_3fs", "اِنْقَاضَّتْ"},
{"past_3md", "اِنْقَاضَّا"},
{"past_3mp", "اِنْقَاضُّوا"},
{"past_3ms", "اِنْقَاضَّ"},
},
},
{
label = "اِفْعَلَلَّ (p.416، abstract paradigm)", root = "فعلل", wazn = "افعللّ",
forms = {
{"imp_2d", "اِفْعَلِلَّا"},
{"imp_2fp", "اِفْعَلِّلْنَ"},
{"imp_2fs", "اِفْعَلِلِّي"},
{"imp_2mp", "اِفْعَلِلُّوا"},
{"imp_2ms", "اِفْعَلِلَّ"},
{"ind_1p", "نَفْعَلِلُّ"},
{"ind_1s", "أَفْعَلِلُّ"},
{"ind_2d", "تَفْعَلِلَّانِ"},
{"ind_2fp", "تَفْعَلِّلْنَ"},
{"ind_2fs", "تَفْعَلِلِّينَ"},
{"ind_2mp", "تَفْعَلِلُّونَ"},
{"ind_2ms", "تَفْعَلِلُّ"},
{"ind_3fd", "تَفْعَلِلَّانِ"},
{"ind_3fp", "يَفْعَلِّلْنَ"},
{"ind_3fs", "تَفْعَلِلُّ"},
{"ind_3md", "يَفْعَلِلَّانِ"},
{"ind_3mp", "يَفْعَلِلُّونَ"},
{"ind_3ms", "يَفْعَلِلُّ"},
{"past_1p", "اِفْعَلَّلْنَا"},
{"past_1s", "اِفْعَلَّلْتُ"},
{"past_2d", "اِفْعَلَّلْتُمَا"},
{"past_2fp", "اِفْعَلَّلْتُنَّ"},
{"past_2fs", "اِفْعَلَّلْتِ"},
{"past_2mp", "اِفْعَلَّلْتُمْ"},
{"past_2ms", "اِفْعَلَّلْتَ"},
{"past_3fd", "اِفْعَلَلَّتَا"},
{"past_3fp", "اِفْعَلَّلْنَ"},
{"past_3fs", "اِفْعَلَلَّتْ"},
{"past_3md", "اِفْعَلَلَّا"},
{"past_3mp", "اِفْعَلَلُّوا"},
{"past_3ms", "اِفْعَلَلَّ"},
},
},
{
label = "اِهْوَأَنَّ (p.420، افعللّ معتل العين)", root = "هوأن", wazn = "افعللّ",
forms = {
{"imp_2d", "اِهْوَئِنَّا"},
{"imp_2fp", "اِهْوَأْنِنَّ"},
{"imp_2fs", "اِهْوَئِنِّي"},
{"imp_2mp", "اِهْوَئِنُّوا"},
{"imp_2ms", "اِهْوَأْنِنْ"},
{"ind_1p", "نَهْوَئِنُّ"},
{"ind_1s", "أَهْوَئِنُّ"},
{"ind_2d", "تَهْوَئِنَّانِ"},
{"ind_2fp", "تَهْوَأْنِنَّ"},
{"ind_2fs", "تَهْوَئِنِّينَ"},
{"ind_2mp", "تَهْوَئِنُّونَ"},
{"ind_2ms", "تَهْوَئِنُّ"},
{"ind_3fd", "تَهْوَئِنَّانِ"},
{"ind_3fp", "يَهْوَأْنِنَّ"},
{"ind_3fs", "تَهْوَئِنُّ"},
{"ind_3md", "يَهْوَئِنَّانِ"},
{"ind_3mp", "يَهْوَئِنُّونَ"},
{"ind_3ms", "يَهْوَئِنُّ"},
{"past_1p", "اِهْوَأْنَنَّا"},
{"past_1s", "اِهْوَأْنَنْتُ"},
{"past_2d", "اِهْوَأْنَنْتُمَا"},
{"past_2fp", "اِهْوَأْنَنْتُنَّ"},
{"past_2fs", "اِهْوَأْنَنْتِ"},
{"past_2mp", "اِهْوَأْنَنْتُمْ"},
{"past_2ms", "اِهْوَأْنَنْتَ"},
{"past_3fd", "اِهْوَأَنَّتَا"},
{"past_3fp", "اِهْوَأْنَنَّ"},
{"past_3fs", "اِهْوَأَنَّتْ"},
{"past_3md", "اِهْوَأَنَّا"},
{"past_3mp", "اِهْوَأَنُّوا"},
{"past_3ms", "اِهْوَأَنَّ"},
},
},
{
label = "كَتَبَ ـُ (p.126، صحيح سالم)", root = "كتب", wazn = "فعَل يفعُل",
pass = true,
forms = {
{"imp_2d", "اُكْتُبَا"},
{"imp_2fp", "اُكْتُبْنَ"},
{"imp_2fs", "اُكْتُبِي"},
{"imp_2mp", "اُكْتُبُوا"},
{"imp_2ms", "اُكْتُبْ"},
{"ind_1p", "نَكْتُبُ"},
{"ind_1s", "أَكْتُبُ"},
{"ind_2d", "تَكْتُبَانِ"},
{"ind_2fp", "تَكْتُبْنَ"},
{"ind_2fs", "تَكْتُبِينَ"},
{"ind_2mp", "تَكْتُبُونَ"},
{"ind_2ms", "تَكْتُبُ"},
{"ind_3fd", "تَكْتُبَانِ"},
{"ind_3fp", "يَكْتُبْنَ"},
{"ind_3fs", "تَكْتُبُ"},
{"ind_3md", "يَكْتُبَانِ"},
{"ind_3mp", "يَكْتُبُونَ"},
{"ind_3ms", "يَكْتُبُ"},
{"ind_pass_1p", "نُكْتَبُ"},
{"ind_pass_1s", "أُكْتَبُ"},
{"ind_pass_2d", "تُكْتَبَانِ"},
{"ind_pass_2fp", "تُكْتَبْنَ"},
{"ind_pass_2fs", "تُكْتَبِينَ"},
{"ind_pass_2mp", "تُكْتَبُونَ"},
{"ind_pass_2ms", "تُكْتَبُ"},
{"ind_pass_3fd", "تُكْتَبَانِ"},
{"ind_pass_3fp", "يُكْتَبْنَ"},
{"ind_pass_3fs", "تُكْتَبُ"},
{"ind_pass_3md", "يُكْتَبَانِ"},
{"ind_pass_3mp", "يُكْتَبُونَ"},
{"ind_pass_3ms", "يُكْتَبُ"},
{"past_1p", "كَتَبْنَا"},
{"past_1s", "كَتَبْتُ"},
{"past_2d", "كَتَبْتُمَا"},
{"past_2fp", "كَتَبْتُنَّ"},
{"past_2fs", "كَتَبْتِ"},
{"past_2mp", "كَتَبْتُمْ"},
{"past_2ms", "كَتَبْتَ"},
{"past_3fd", "كَتَبَتَا"},
{"past_3fp", "كَتَبْنَ"},
{"past_3fs", "كَتَبَتْ"},
{"past_3md", "كَتَبَا"},
{"past_3mp", "كَتَبُوا"},
{"past_3ms", "كَتَبَ"},
{"past_pass_1p", "كُتِبْنَا"},
{"past_pass_1s", "كُتِبْتُ"},
{"past_pass_2d", "كُتِبْتُمَا"},
{"past_pass_2fp", "كُتِبْتُنَّ"},
{"past_pass_2fs", "كُتِبْتِ"},
{"past_pass_2mp", "كُتِبْتُمْ"},
{"past_pass_2ms", "كُتِبْتَ"},
{"past_pass_3fd", "كُتِبَتَا"},
{"past_pass_3fp", "كُتِبْنَ"},
{"past_pass_3fs", "كُتِبَتْ"},
{"past_pass_3md", "كُتِبَا"},
{"past_pass_3mp", "كُتِبُوا"},
{"past_pass_3ms", "كُتِبَ"},
},
},
{
label = "فَتَحَ ـَ (p.170، صحيح سالم)", root = "فتح", wazn = "فعَل يفعَل",
pass = true,
forms = {
{"imp_2d", "اِفْتَحَا"},
{"imp_2fp", "اِفْتَحْنَ"},
{"imp_2fs", "اِفْتَحِي"},
{"imp_2mp", "اِفْتَحُوا"},
{"imp_2ms", "اِفْتَحْ"},
{"ind_1p", "نَفْتَحُ"},
{"ind_1s", "أَفْتَحُ"},
{"ind_2d", "تَفْتَحَانِ"},
{"ind_2fp", "تَفْتَحْنَ"},
{"ind_2fs", "تَفْتَحِينَ"},
{"ind_2mp", "تَفْتَحُونَ"},
{"ind_2ms", "تَفْتَحُ"},
{"ind_3fd", "تَفْتَحَانِ"},
{"ind_3fp", "يَفْتَحْنَ"},
{"ind_3fs", "تَفْتَحُ"},
{"ind_3md", "يَفْتَحَانِ"},
{"ind_3mp", "يَفْتَحُونَ"},
{"ind_3ms", "يَفْتَحُ"},
{"ind_pass_1p", "نُفْتَحُ"},
{"ind_pass_1s", "أُفْتَحُ"},
{"ind_pass_2d", "تُفْتَحَانِ"},
{"ind_pass_2fp", "تُفْتَحْنَ"},
{"ind_pass_2fs", "تُفْتَحِينَ"},
{"ind_pass_2mp", "تُفْتَحُونَ"},
{"ind_pass_2ms", "تُفْتَحُ"},
{"ind_pass_3fd", "تُفْتَحَانِ"},
{"ind_pass_3fp", "يُفْتَحْنَ"},
{"ind_pass_3fs", "تُفْتَحُ"},
{"ind_pass_3md", "يُفْتَحَانِ"},
{"ind_pass_3mp", "يُفْتَحُونَ"},
{"ind_pass_3ms", "يُفْتَحُ"},
{"past_1p", "فَتَحْنَا"},
{"past_1s", "فَتَحْتُ"},
{"past_2d", "فَتَحْتُمَا"},
{"past_2fp", "فَتَحْتُنَّ"},
{"past_2fs", "فَتَحْتِ"},
{"past_2mp", "فَتَحْتُمْ"},
{"past_2ms", "فَتَحْتَ"},
{"past_3fd", "فَتَحَتَا"},
{"past_3fp", "فَتَحْنَ"},
{"past_3fs", "فَتَحَتْ"},
{"past_3md", "فَتَحَا"},
{"past_3mp", "فَتَحُوا"},
{"past_3ms", "فَتَحَ"},
{"past_pass_1p", "فُتِحْنَا"},
{"past_pass_1s", "فُتِحْتُ"},
{"past_pass_2d", "فُتِحْتُمَا"},
{"past_pass_2fp", "فُتِحْتُنَّ"},
{"past_pass_2fs", "فُتِحْتِ"},
{"past_pass_2mp", "فُتِحْتُمْ"},
{"past_pass_2ms", "فُتِحْتَ"},
{"past_pass_3fd", "فُتِحَتَا"},
{"past_pass_3fp", "فُتِحْنَ"},
{"past_pass_3fs", "فُتِحَتْ"},
{"past_pass_3md", "فُتِحَا"},
{"past_pass_3mp", "فُتِحُوا"},
{"past_pass_3ms", "فُتِحَ"},
},
},
{
label = "نَعِمَ ـِ (p.235، صحيح سالم)", root = "نعم", wazn = "فعِل يفعِل",
pass = true,
forms = {
{"imp_2d", "اِنْعِمَا"},
{"imp_2fp", "اِنْعِمْنَ"},
{"imp_2fs", "اِنْعِمِي"},
{"imp_2mp", "اِنْعِمُوا"},
{"imp_2ms", "اِنْعِمْ"},
{"ind_1p", "نَنْعِمُ"},
{"ind_1s", "أَنْعِمُ"},
{"ind_2d", "تَنْعِمَانِ"},
{"ind_2fp", "تَنْعِمْنَ"},
{"ind_2fs", "تَنْعِمِينَ"},
{"ind_2mp", "تَنْعِمُونَ"},
{"ind_2ms", "تَنْعِمُ"},
{"ind_3fd", "تَنْعِمَانِ"},
{"ind_3fp", "يَنْعِمْنَ"},
{"ind_3fs", "تَنْعِمُ"},
{"ind_3md", "يَنْعِمَانِ"},
{"ind_3mp", "يَنْعِمُونَ"},
{"ind_3ms", "يَنْعِمُ"},
{"ind_pass_1p", "نُنْعَمُ"},
{"ind_pass_1s", "أُنْعَمُ"},
{"ind_pass_2d", "تُنْعَمَانِ"},
{"ind_pass_2fp", "تُنْعَمْنَ"},
{"ind_pass_2fs", "تُنْعَمِينَ"},
{"ind_pass_2mp", "تُنْعَمُونَ"},
{"ind_pass_2ms", "تُنْعَمُ"},
{"ind_pass_3fd", "تُنْعَمَانِ"},
{"ind_pass_3fp", "يُنْعَمْنَ"},
{"ind_pass_3fs", "تُنْعَمُ"},
{"ind_pass_3md", "يُنْعَمَانِ"},
{"ind_pass_3mp", "يُنْعَمُونَ"},
{"ind_pass_3ms", "يُنْعَمُ"},
{"past_1p", "نَعِمْنَا"},
{"past_1s", "نَعِمْتُ"},
{"past_2d", "نَعِمْتُمَا"},
{"past_2fp", "نَعِمْتُنَّ"},
{"past_2fs", "نَعِمْتِ"},
{"past_2mp", "نَعِمْتُمْ"},
{"past_2ms", "نَعِمْتَ"},
{"past_3fd", "نَعِمَتَا"},
{"past_3fp", "نَعِمْنَ"},
{"past_3fs", "نَعِمَتْ"},
{"past_3md", "نَعِمَا"},
{"past_3mp", "نَعِمُوا"},
{"past_3ms", "نَعِمَ"},
{"past_pass_1p", "نُعِمْنَا"},
{"past_pass_1s", "نُعِمْتُ"},
{"past_pass_2d", "نُعِمْتُمَا"},
{"past_pass_2fp", "نُعِمْتُنَّ"},
{"past_pass_2fs", "نُعِمْتِ"},
{"past_pass_2mp", "نُعِمْتُمْ"},
{"past_pass_2ms", "نُعِمْتَ"},
{"past_pass_3fd", "نُعِمَتَا"},
{"past_pass_3fp", "نُعِمْنَ"},
{"past_pass_3fs", "نُعِمَتْ"},
{"past_pass_3md", "نُعِمَا"},
{"past_pass_3mp", "نُعِمُوا"},
{"past_pass_3ms", "نُعِمَ"},
},
},
{
label = "وَرِيَ ـِ (p.237، لفيف مفروق)", root = "وري", wazn = "فعِل يفعِل",
forms = {
{"imp_2d", "رِيَا"},
{"imp_2fp", "رِينَ"},
{"imp_2fs", "رِي"},
{"imp_2mp", "رُوا"},
{"imp_2ms", "رِ"},
{"ind_1p", "نَرِي"},
{"ind_1s", "أَرِي"},
{"ind_2d", "تَرِيَانِ"},
{"ind_2fp", "تَرِينَ"},
{"ind_2fs", "تَرِينَ"},
{"ind_2mp", "تَرُونَ"},
{"ind_2ms", "تَرِي"},
{"ind_3fd", "تَرِيَانِ"},
{"ind_3fp", "يَرِينَ"},
{"ind_3fs", "تَرِي"},
{"ind_3md", "يَرِيَانِ"},
{"ind_3mp", "يَرُونَ"},
{"ind_3ms", "يَرِي"},
{"past_1p", "وَرِينَا"},
{"past_1s", "وَرِيتُ"},
{"past_2d", "وَرِيتُمَا"},
{"past_2fp", "وَرِيتُنَّ"},
{"past_2fs", "وَرِيتِ"},
{"past_2mp", "وَرِيتُمْ"},
{"past_2ms", "وَرِيتَ"},
{"past_3fd", "وَرِيَتَا"},
{"past_3fp", "وَرِينَ"},
{"past_3fs", "وَرِيَتْ"},
{"past_3md", "وَرِيَا"},
{"past_3mp", "وَرُوا"},
{"past_3ms", "وَرِيَ"},
},
},
{
label = "تَفَعَّلَ (p.285، abstract paradigm)", root = "فعل", wazn = "تفعّل",
pass = true,
forms = {
{"imp_2d", "تَفَعَّلَا"},
{"imp_2fp", "تَفَعَّلْنَ"},
{"imp_2fs", "تَفَعَّلِي"},
{"imp_2mp", "تَفَعَّلُوا"},
{"imp_2ms", "تَفَعَّلْ"},
{"ind_1p", "نَتَفَعَّلُ"},
{"ind_1s", "أَتَفَعَّلُ"},
{"ind_2d", "تَتَفَعَّلَانِ"},
{"ind_2fp", "تَتَفَعَّلْنَ"},
{"ind_2fs", "تَتَفَعَّلِينَ"},
{"ind_2mp", "تَتَفَعَّلُونَ"},
{"ind_2ms", "تَتَفَعَّلُ"},
{"ind_3fd", "تَتَفَعَّلَانِ"},
{"ind_3fp", "يَتَفَعَّلْنَ"},
{"ind_3fs", "تَتَفَعَّلُ"},
{"ind_3md", "يَتَفَعَّلَانِ"},
{"ind_3mp", "يَتَفَعَّلُونَ"},
{"ind_3ms", "يَتَفَعَّلُ"},
{"ind_pass_1p", "نُتَفَعَّلُ"},
{"ind_pass_1s", "أُتَفَعَّلُ"},
{"ind_pass_2d", "تُتَفَعَّلَانِ"},
{"ind_pass_2fp", "تُتَفَعَّلْنَ"},
{"ind_pass_2fs", "تُتَفَعَّلِينَ"},
{"ind_pass_2mp", "تُتَفَعَّلُونَ"},
{"ind_pass_2ms", "تُتَفَعَّلُ"},
{"ind_pass_3fd", "تُتَفَعَّلَانِ"},
{"ind_pass_3fp", "يُتَفَعَّلْنَ"},
{"ind_pass_3fs", "تُتَفَعَّلُ"},
{"ind_pass_3md", "يُتَفَعَّلَانِ"},
{"ind_pass_3mp", "يُتَفَعَّلُونَ"},
{"ind_pass_3ms", "يُتَفَعَّلُ"},
{"past_1p", "تَفَعَّلْنَا"},
{"past_1s", "تَفَعَّلْتُ"},
{"past_2d", "تَفَعَّلْتُمَا"},
{"past_2fp", "تَفَعَّلْتُنَّ"},
{"past_2fs", "تَفَعَّلْتِ"},
{"past_2mp", "تَفَعَّلْتُمْ"},
{"past_2ms", "تَفَعَّلْتَ"},
{"past_3fd", "تَفَعَّلَتَا"},
{"past_3fp", "تَفَعَّلْنَ"},
{"past_3fs", "تَفَعَّلَتْ"},
{"past_3md", "تَفَعَّلَا"},
{"past_3mp", "تَفَعَّلُوا"},
{"past_3ms", "تَفَعَّلَ"},
{"past_pass_1p", "تُفُعِّلْنَا"},
{"past_pass_1s", "تُفُعِّلْتُ"},
{"past_pass_2d", "تُفُعِّلْتُمَا"},
{"past_pass_2fp", "تُفُعِّلْتُنَّ"},
{"past_pass_2fs", "تُفُعِّلْتِ"},
{"past_pass_2mp", "تُفُعِّلْتُمْ"},
{"past_pass_2ms", "تُفُعِّلْتَ"},
{"past_pass_3fd", "تُفُعِّلَتَا"},
{"past_pass_3fp", "تُفُعِّلْنَ"},
{"past_pass_3fs", "تُفُعِّلَتْ"},
{"past_pass_3md", "تُفُعِّلَا"},
{"past_pass_3mp", "تُفُعِّلُوا"},
{"past_pass_3ms", "تُفُعِّلَ"},
},
},
{
label = "نَصَرَ ـُ (p.127)", root = "نصر", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "اُنْصُرَا"},
{"imp_2fp", "اُنْصُرْنَ"},
{"imp_2fs", "اُنْصُرِي"},
{"imp_2mp", "اُنْصُرُوا"},
{"imp_2ms", "اُنْصُرْ"},
{"ind_1p", "نَنْصُرُ"},
{"ind_1s", "أَنْصُرُ"},
{"ind_2d", "تَنْصُرَانِ"},
{"ind_2fp", "تَنْصُرْنَ"},
{"ind_2fs", "تَنْصُرِينَ"},
{"ind_2mp", "تَنْصُرُونَ"},
{"ind_2ms", "تَنْصُرُ"},
{"ind_3fd", "تَنْصُرَانِ"},
{"ind_3fp", "يَنْصُرْنَ"},
{"ind_3fs", "تَنْصُرُ"},
{"ind_3md", "يَنْصُرَانِ"},
{"ind_3mp", "يَنْصُرُونَ"},
{"ind_3ms", "يَنْصُرُ"},
{"past_1p", "نَصَرْنَا"},
{"past_1s", "نَصَرْتُ"},
{"past_2d", "نَصَرْتُمَا"},
{"past_2fp", "نَصَرْتُنَّ"},
{"past_2fs", "نَصَرْتِ"},
{"past_2mp", "نَصَرْتُمْ"},
{"past_2ms", "نَصَرْتَ"},
{"past_3fd", "نَصَرَتَا"},
{"past_3fp", "نَصَرْنَ"},
{"past_3fs", "نَصَرَتْ"},
{"past_3md", "نَصَرَا"},
{"past_3mp", "نَصَرُوا"},
{"past_3ms", "نَصَرَ"},
},
},
{
label = "حَدَثَ ـُ (p.127)", root = "حدث", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "اُحْدُثَا"},
{"imp_2fp", "اُحْدُثْنَ"},
{"imp_2fs", "اُحْدُثِي"},
{"imp_2mp", "اُحْدُثُوا"},
{"imp_2ms", "اُحْدُثْ"},
{"ind_1p", "نَحْدُثُ"},
{"ind_1s", "أَحْدُثُ"},
{"ind_2d", "تَحْدُثَانِ"},
{"ind_2fp", "تَحْدُثْنَ"},
{"ind_2fs", "تَحْدُثِينَ"},
{"ind_2mp", "تَحْدُثُونَ"},
{"ind_2ms", "تَحْدُثُ"},
{"ind_3fd", "تَحْدُثَانِ"},
{"ind_3fp", "يَحْدُثْنَ"},
{"ind_3fs", "تَحْدُثُ"},
{"ind_3md", "يَحْدُثَانِ"},
{"ind_3mp", "يَحْدُثُونَ"},
{"ind_3ms", "يَحْدُثُ"},
{"past_1p", "حَدَثْنَا"},
{"past_1s", "حَدَثْتُ"},
{"past_2d", "حَدَثْتُمَا"},
{"past_2fp", "حَدَثْتُنَّ"},
{"past_2fs", "حَدَثْتِ"},
{"past_2mp", "حَدَثْتُمْ"},
{"past_2ms", "حَدَثْتَ"},
{"past_3fd", "حَدَثَتَا"},
{"past_3fp", "حَدَثْنَ"},
{"past_3fs", "حَدَثَتْ"},
{"past_3md", "حَدَثَا"},
{"past_3mp", "حَدَثُوا"},
{"past_3ms", "حَدَثَ"},
},
},
{
label = "وَحَّدَ (p.266)", root = "وحد", wazn = "فعّل",
forms = {
{"imp_2d", "وَحِّدَا"},
{"imp_2fp", "وَحِّدْنَ"},
{"imp_2fs", "وَحِّدِي"},
{"imp_2mp", "وَحِّدُوا"},
{"imp_2ms", "وَحِّدْ"},
{"ind_1p", "نُوَحِّدُ"},
{"ind_1s", "أُوَحِّدُ"},
{"ind_2d", "تُوَحِّدَانِ"},
{"ind_2fp", "تُوَحِّدْنَ"},
{"ind_2fs", "تُوَحِّدِينَ"},
{"ind_2mp", "تُوَحِّدُونَ"},
{"ind_2ms", "تُوَحِّدُ"},
{"ind_3fd", "تُوَحِّدَانِ"},
{"ind_3fp", "يُوَحِّدْنَ"},
{"ind_3fs", "تُوَحِّدُ"},
{"ind_3md", "يُوَحِّدَانِ"},
{"ind_3mp", "يُوَحِّدُونَ"},
{"ind_3ms", "يُوَحِّدُ"},
{"past_1p", "وَحَّدْنَا"},
{"past_1s", "وَحَّدْتُ"},
{"past_2d", "وَحَّدْتُمَا"},
{"past_2fp", "وَحَّدْتُنَّ"},
{"past_2fs", "وَحَّدْتِ"},
{"past_2mp", "وَحَّدْتُمْ"},
{"past_2ms", "وَحَّدْتَ"},
{"past_3fd", "وَحَّدَتَا"},
{"past_3fp", "وَحَّدْنَ"},
{"past_3fs", "وَحَّدَتْ"},
{"past_3md", "وَحَّدَا"},
{"past_3mp", "وَحَّدُوا"},
{"past_3ms", "وَحَّدَ"},
},
},
{
label = "يَبَّسَ (p.266)", root = "يبس", wazn = "فعّل",
forms = {
{"imp_2d", "يَبِّسَا"},
{"imp_2fp", "يَبِّسْنَ"},
{"imp_2fs", "يَبِّسِي"},
{"imp_2mp", "يَبِّسُوا"},
{"imp_2ms", "يَبِّسْ"},
{"ind_1p", "نُيَبِّسُ"},
{"ind_1s", "أُيَبِّسُ"},
{"ind_2d", "تُيَبِّسَانِ"},
{"ind_2fp", "تُيَبِّسْنَ"},
{"ind_2fs", "تُيَبِّسِينَ"},
{"ind_2mp", "تُيَبِّسُونَ"},
{"ind_2ms", "تُيَبِّسُ"},
{"ind_3fd", "تُيَبِّسَانِ"},
{"ind_3fp", "يُيَبِّسْنَ"},
{"ind_3fs", "تُيَبِّسُ"},
{"ind_3md", "يُيَبِّسَانِ"},
{"ind_3mp", "يُيَبِّسُونَ"},
{"ind_3ms", "يُيَبِّسُ"},
{"past_1p", "يَبَّسْنَا"},
{"past_1s", "يَبَّسْتُ"},
{"past_2d", "يَبَّسْتُمَا"},
{"past_2fp", "يَبَّسْتُنَّ"},
{"past_2fs", "يَبَّسْتِ"},
{"past_2mp", "يَبَّسْتُمْ"},
{"past_2ms", "يَبَّسْتَ"},
{"past_3fd", "يَبَّسَتَا"},
{"past_3fp", "يَبَّسْنَ"},
{"past_3fs", "يَبَّسَتْ"},
{"past_3md", "يَبَّسَا"},
{"past_3mp", "يَبَّسُوا"},
{"past_3ms", "يَبَّسَ"},
},
},
{
label = "نَوَّرَ (p.267)", root = "نور", wazn = "فعّل",
forms = {
{"imp_2d", "نَوِّرَا"},
{"imp_2fp", "نَوِّرْنَ"},
{"imp_2fs", "نَوِّرِي"},
{"imp_2mp", "نَوِّرُوا"},
{"imp_2ms", "نَوِّرْ"},
{"ind_1p", "نُنَوِّرُ"},
{"ind_1s", "أُنَوِّرُ"},
{"ind_2d", "تُنَوِّرَانِ"},
{"ind_2fp", "تُنَوِّرْنَ"},
{"ind_2fs", "تُنَوِّرِينَ"},
{"ind_2mp", "تُنَوِّرُونَ"},
{"ind_2ms", "تُنَوِّرُ"},
{"ind_3fd", "تُنَوِّرَانِ"},
{"ind_3fp", "يُنَوِّرْنَ"},
{"ind_3fs", "تُنَوِّرُ"},
{"ind_3md", "يُنَوِّرَانِ"},
{"ind_3mp", "يُنَوِّرُونَ"},
{"ind_3ms", "يُنَوِّرُ"},
{"past_1p", "نَوَّرْنَا"},
{"past_1s", "نَوَّرْتُ"},
{"past_2d", "نَوَّرْتُمَا"},
{"past_2fp", "نَوَّرْتُنَّ"},
{"past_2fs", "نَوَّرْتِ"},
{"past_2mp", "نَوَّرْتُمْ"},
{"past_2ms", "نَوَّرْتَ"},
{"past_3fd", "نَوَّرَتَا"},
{"past_3fp", "نَوَّرْنَ"},
{"past_3fs", "نَوَّرَتْ"},
{"past_3md", "نَوَّرَا"},
{"past_3mp", "نَوَّرُوا"},
{"past_3ms", "نَوَّرَ"},
},
},
{
label = "بَيَّضَ (p.267)", root = "بيض", wazn = "فعّل",
forms = {
{"imp_2d", "بَيِّضَا"},
{"imp_2fp", "بَيِّضْنَ"},
{"imp_2fs", "بَيِّضِي"},
{"imp_2mp", "بَيِّضُوا"},
{"imp_2ms", "بَيِّضْ"},
{"ind_1p", "نُبَيِّضُ"},
{"ind_1s", "أُبَيِّضُ"},
{"ind_2d", "تُبَيِّضَانِ"},
{"ind_2fp", "تُبَيِّضْنَ"},
{"ind_2fs", "تُبَيِّضِينَ"},
{"ind_2mp", "تُبَيِّضُونَ"},
{"ind_2ms", "تُبَيِّضُ"},
{"ind_3fd", "تُبَيِّضَانِ"},
{"ind_3fp", "يُبَيِّضْنَ"},
{"ind_3fs", "تُبَيِّضُ"},
{"ind_3md", "يُبَيِّضَانِ"},
{"ind_3mp", "يُبَيِّضُونَ"},
{"ind_3ms", "يُبَيِّضُ"},
{"past_1p", "بَيَّضْنَا"},
{"past_1s", "بَيَّضْتُ"},
{"past_2d", "بَيَّضْتُمَا"},
{"past_2fp", "بَيَّضْتُنَّ"},
{"past_2fs", "بَيَّضْتِ"},
{"past_2mp", "بَيَّضْتُمْ"},
{"past_2ms", "بَيَّضْتَ"},
{"past_3fd", "بَيَّضَتَا"},
{"past_3fp", "بَيَّضْنَ"},
{"past_3fs", "بَيَّضَتْ"},
{"past_3md", "بَيَّضَا"},
{"past_3mp", "بَيَّضُوا"},
{"past_3ms", "بَيَّضَ"},
},
},
{
label = "بَكَّى (p.270)", root = "بكي", wazn = "فعّل",
forms = {
{"imp_2d", "بَكِّيَا"},
{"imp_2fp", "بَكِّينَ"},
{"imp_2fs", "بَكِّي"},
{"imp_2mp", "بَكُّوا"},
{"imp_2ms", "بَكِّ"},
{"ind_1p", "نُبَكِّي"},
{"ind_1s", "أُبَكِّي"},
{"ind_2d", "تُبَكِّيَانِ"},
{"ind_2fp", "تُبَكِّينَ"},
{"ind_2fs", "تُبَكِّينَ"},
{"ind_2mp", "تُبَكُّونَ"},
{"ind_2ms", "تُبَكِّي"},
{"ind_3fd", "تُبَكِّيَانِ"},
{"ind_3fp", "يُبَكِّينَ"},
{"ind_3fs", "تُبَكِّي"},
{"ind_3md", "يُبَكِّيَانِ"},
{"ind_3mp", "يُبَكُّونَ"},
{"ind_3ms", "يُبَكِّي"},
{"past_1p", "بَكَّيْنَا"},
{"past_1s", "بَكَّيْتُ"},
{"past_2d", "بَكَّيْتُمَا"},
{"past_2fp", "بَكَّيْتُنَّ"},
{"past_2fs", "بَكَّيْتِ"},
{"past_2mp", "بَكَّيْتُمْ"},
{"past_2ms", "بَكَّيْتَ"},
{"past_3fd", "بَكَّتَا"},
{"past_3fp", "بَكَّيْنَ"},
{"past_3fs", "بَكَّتْ"},
{"past_3md", "بَكَّيَا"},
{"past_3mp", "بَكَّوْا"},
{"past_3ms", "بَكَّى"},
},
},
}
ec7n7o7txplfdl149f1172b6cd7k4x3
وحدة:ar-verb/testcases/3
828
241793
1159008
1158876
2026-09-10T12:39:17Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159008
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 3 من 15. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/3")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_3()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
rqgl9sx95kvyea8htg3620oih88povp
1159066
1159008
2026-09-10T19:33:48Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159066
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 3 من 16. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/3")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_3()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
tbkpxtzpghjbxfeu7d9yxpjh9gw2vfl
وحدة:ar-verb/testcases/بيانات/4
828
241794
1159010
1158878
2026-09-10T12:39:19Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159010
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 4 من 15.
return {
{
label = "مَسَّى (p.270)", root = "مسو", wazn = "فعّل",
forms = {
{"imp_2d", "مَسِّيَا"},
{"imp_2fp", "مَسِّينَ"},
{"imp_2fs", "مَسِّي"},
{"imp_2mp", "مَسُّوا"},
{"imp_2ms", "مَسِّ"},
{"ind_1p", "نُمَسِّي"},
{"ind_1s", "أُمَسِّي"},
{"ind_2d", "تُمَسِّيَانِ"},
{"ind_2fp", "تُمَسِّينَ"},
{"ind_2fs", "تُمَسِّينَ"},
{"ind_2mp", "تُمَسُّونَ"},
{"ind_2ms", "تُمَسِّي"},
{"ind_3fd", "تُمَسِّيَانِ"},
{"ind_3fp", "يُمَسِّينَ"},
{"ind_3fs", "تُمَسِّي"},
{"ind_3md", "يُمَسِّيَانِ"},
{"ind_3mp", "يُمَسُّونَ"},
{"ind_3ms", "يُمَسِّي"},
{"past_1p", "مَسَّيْنَا"},
{"past_1s", "مَسَّيْتُ"},
{"past_2d", "مَسَّيْتُمَا"},
{"past_2fp", "مَسَّيْتُنَّ"},
{"past_2fs", "مَسَّيْتِ"},
{"past_2mp", "مَسَّيْتُمْ"},
{"past_2ms", "مَسَّيْتَ"},
{"past_3fd", "مَسَّتَا"},
{"past_3fp", "مَسَّيْنَ"},
{"past_3fs", "مَسَّتْ"},
{"past_3md", "مَسَّيَا"},
{"past_3mp", "مَسَّوْا"},
{"past_3ms", "مَسَّى"},
},
},
{
label = "لَوَّى (p.273)", root = "لوي", wazn = "فعّل",
forms = {
{"imp_2d", "لَوِّيَا"},
{"imp_2fp", "لَوِّينَ"},
{"imp_2fs", "لَوِّي"},
{"imp_2mp", "لَوُّوا"},
{"imp_2ms", "لَوِّ"},
{"ind_1p", "نُلَوِّي"},
{"ind_1s", "أُلَوِّي"},
{"ind_2d", "تُلَوِّيَانِ"},
{"ind_2fp", "تُلَوِّينَ"},
{"ind_2fs", "تُلَوِّينَ"},
{"ind_2mp", "تُلَوُّونَ"},
{"ind_2ms", "تُلَوِّي"},
{"ind_3fd", "تُلَوِّيَانِ"},
{"ind_3fp", "يُلَوِّينَ"},
{"ind_3fs", "تُلَوِّي"},
{"ind_3md", "يُلَوِّيَانِ"},
{"ind_3mp", "يُلَوُّونَ"},
{"ind_3ms", "يُلَوِّي"},
{"past_1p", "لَوَّيْنَا"},
{"past_1s", "لَوَّيْتُ"},
{"past_2d", "لَوَّيْتُمَا"},
{"past_2fp", "لَوَّيْتُنَّ"},
{"past_2fs", "لَوَّيْتِ"},
{"past_2mp", "لَوَّيْتُمْ"},
{"past_2ms", "لَوَّيْتَ"},
{"past_3fd", "لَوَّتَا"},
{"past_3fp", "لَوَّيْنَ"},
{"past_3fs", "لَوَّتْ"},
{"past_3md", "لَوَّيَا"},
{"past_3mp", "لَوَّوْا"},
{"past_3ms", "لَوَّى"},
},
},
{
label = "حَيَّا (p.273)", root = "حيي", wazn = "فعّل",
forms = {
{"imp_2d", "حَيِّيَا"},
{"imp_2fp", "حَيِّينَ"},
{"imp_2fs", "حَيِّي"},
{"imp_2mp", "حَيُّوا"},
{"imp_2ms", "حَيِّ"},
{"ind_1p", "نُحَيِّي"},
{"ind_1s", "أُحَيِّي"},
{"ind_2d", "تُحَيِّيَانِ"},
{"ind_2fp", "تُحَيِّينَ"},
{"ind_2fs", "تُحَيِّينَ"},
{"ind_2mp", "تُحَيُّونَ"},
{"ind_2ms", "تُحَيِّي"},
{"ind_3fd", "تُحَيِّيَانِ"},
{"ind_3fp", "يُحَيِّينَ"},
{"ind_3fs", "تُحَيِّي"},
{"ind_3md", "يُحَيِّيَانِ"},
{"ind_3mp", "يُحَيُّونَ"},
{"ind_3ms", "يُحَيِّي"},
{"past_1p", "حَيَّيْنَا"},
{"past_1s", "حَيَّيْتُ"},
{"past_2d", "حَيَّيْتُمَا"},
{"past_2fp", "حَيَّيْتُنَّ"},
{"past_2fs", "حَيَّيْتِ"},
{"past_2mp", "حَيَّيْتُمْ"},
{"past_2ms", "حَيَّيْتَ"},
{"past_3fd", "حَيَّتَا"},
{"past_3fp", "حَيَّيْنَ"},
{"past_3fs", "حَيَّتْ"},
{"past_3md", "حَيَّيَا"},
{"past_3mp", "حَيَّوْا"},
{"past_3ms", "حَيَّا"},
},
},
{
label = "قَرَّرَ (p.261)", root = "قرر", wazn = "فعّل",
forms = {
{"imp_2d", "قَرِّرَا"},
{"imp_2fp", "قَرِّرْنَ"},
{"imp_2fs", "قَرِّرِي"},
{"imp_2mp", "قَرِّرُوا"},
{"imp_2ms", "قَرِّرْ"},
{"ind_1p", "نُقَرِّرُ"},
{"ind_1s", "أُقَرِّرُ"},
{"ind_2d", "تُقَرِّرَانِ"},
{"ind_2fp", "تُقَرِّرْنَ"},
{"ind_2fs", "تُقَرِّرِينَ"},
{"ind_2mp", "تُقَرِّرُونَ"},
{"ind_2ms", "تُقَرِّرُ"},
{"ind_3fd", "تُقَرِّرَانِ"},
{"ind_3fp", "يُقَرِّرْنَ"},
{"ind_3fs", "تُقَرِّرُ"},
{"ind_3md", "يُقَرِّرَانِ"},
{"ind_3mp", "يُقَرِّرُونَ"},
{"ind_3ms", "يُقَرِّرُ"},
{"past_1p", "قَرَّرْنَا"},
{"past_1s", "قَرَّرْتُ"},
{"past_2d", "قَرَّرْتُمَا"},
{"past_2fp", "قَرَّرْتُنَّ"},
{"past_2fs", "قَرَّرْتِ"},
{"past_2mp", "قَرَّرْتُمْ"},
{"past_2ms", "قَرَّرْتَ"},
{"past_3fd", "قَرَّرَتَا"},
{"past_3fp", "قَرَّرْنَ"},
{"past_3fs", "قَرَّرَتْ"},
{"past_3md", "قَرَّرَا"},
{"past_3mp", "قَرَّرُوا"},
{"past_3ms", "قَرَّرَ"},
},
},
{
label = "سَبَّبَ (p.261)", root = "سبب", wazn = "فعّل",
forms = {
{"imp_2d", "سَبِّبَا"},
{"imp_2fp", "سَبِّبْنَ"},
{"imp_2fs", "سَبِّبِي"},
{"imp_2mp", "سَبِّبُوا"},
{"imp_2ms", "سَبِّبْ"},
{"ind_1p", "نُسَبِّبُ"},
{"ind_1s", "أُسَبِّبُ"},
{"ind_2d", "تُسَبِّبَانِ"},
{"ind_2fp", "تُسَبِّبْنَ"},
{"ind_2fs", "تُسَبِّبِينَ"},
{"ind_2mp", "تُسَبِّبُونَ"},
{"ind_2ms", "تُسَبِّبُ"},
{"ind_3fd", "تُسَبِّبَانِ"},
{"ind_3fp", "يُسَبِّبْنَ"},
{"ind_3fs", "تُسَبِّبُ"},
{"ind_3md", "يُسَبِّبَانِ"},
{"ind_3mp", "يُسَبِّبُونَ"},
{"ind_3ms", "يُسَبِّبُ"},
{"past_1p", "سَبَّبْنَا"},
{"past_1s", "سَبَّبْتُ"},
{"past_2d", "سَبَّبْتُمَا"},
{"past_2fp", "سَبَّبْتُنَّ"},
{"past_2fs", "سَبَّبْتِ"},
{"past_2mp", "سَبَّبْتُمْ"},
{"past_2ms", "سَبَّبْتَ"},
{"past_3fd", "سَبَّبَتَا"},
{"past_3fp", "سَبَّبْنَ"},
{"past_3fs", "سَبَّبَتْ"},
{"past_3md", "سَبَّبَا"},
{"past_3mp", "سَبَّبُوا"},
{"past_3ms", "سَبَّبَ"},
},
},
{
label = "أَمَّنَ (p.263)", root = "أمن", wazn = "فعّل",
forms = {
{"imp_2d", "أَمِّنَا"},
{"imp_2fp", "أَمِّنَّ"},
{"imp_2fs", "أَمِّنِي"},
{"imp_2mp", "أَمِّنُوا"},
{"imp_2ms", "أَمِّنْ"},
{"ind_1p", "نُؤَمِّنُ"},
{"ind_1s", "أُؤَمِّنُ"},
{"ind_2d", "تُؤَمِّنَانِ"},
{"ind_2fp", "تُؤَمِّنَّ"},
{"ind_2fs", "تُؤَمِّنِينَ"},
{"ind_2mp", "تُؤَمِّنُونَ"},
{"ind_2ms", "تُؤَمِّنُ"},
{"ind_3fd", "تُؤَمِّنَانِ"},
{"ind_3fp", "يُؤَمِّنَّ"},
{"ind_3fs", "تُؤَمِّنُ"},
{"ind_3md", "يُؤَمِّنَانِ"},
{"ind_3mp", "يُؤَمِّنُونَ"},
{"ind_3ms", "يُؤَمِّنُ"},
{"past_1p", "أَمَّنَّا"},
{"past_1s", "أَمَّنْتُ"},
{"past_2d", "أَمَّنْتُمَا"},
{"past_2fp", "أَمَّنْتُنَّ"},
{"past_2fs", "أَمَّنْتِ"},
{"past_2mp", "أَمَّنْتُمْ"},
{"past_2ms", "أَمَّنْتَ"},
{"past_3fd", "أَمَّنَتَا"},
{"past_3fp", "أَمَّنَّ"},
{"past_3fs", "أَمَّنَتْ"},
{"past_3md", "أَمَّنَا"},
{"past_3mp", "أَمَّنُوا"},
{"past_3ms", "أَمَّنَ"},
},
},
{
label = "أَجَّلَ (p.263)", root = "أجل", wazn = "فعّل",
forms = {
{"imp_2d", "أَجِّلَا"},
{"imp_2fp", "أَجِّلْنَ"},
{"imp_2fs", "أَجِّلِي"},
{"imp_2mp", "أَجِّلُوا"},
{"imp_2ms", "أَجِّلْ"},
{"ind_1p", "نُؤَجِّلُ"},
{"ind_1s", "أُؤَجِّلُ"},
{"ind_2d", "تُؤَجِّلَانِ"},
{"ind_2fp", "تُؤَجِّلْنَ"},
{"ind_2fs", "تُؤَجِّلِينَ"},
{"ind_2mp", "تُؤَجِّلُونَ"},
{"ind_2ms", "تُؤَجِّلُ"},
{"ind_3fd", "تُؤَجِّلَانِ"},
{"ind_3fp", "يُؤَجِّلْنَ"},
{"ind_3fs", "تُؤَجِّلُ"},
{"ind_3md", "يُؤَجِّلَانِ"},
{"ind_3mp", "يُؤَجِّلُونَ"},
{"ind_3ms", "يُؤَجِّلُ"},
{"past_1p", "أَجَّلْنَا"},
{"past_1s", "أَجَّلْتُ"},
{"past_2d", "أَجَّلْتُمَا"},
{"past_2fp", "أَجَّلْتُنَّ"},
{"past_2fs", "أَجَّلْتِ"},
{"past_2mp", "أَجَّلْتُمْ"},
{"past_2ms", "أَجَّلْتَ"},
{"past_3fd", "أَجَّلَتَا"},
{"past_3fp", "أَجَّلْنَ"},
{"past_3fs", "أَجَّلَتْ"},
{"past_3md", "أَجَّلَا"},
{"past_3mp", "أَجَّلُوا"},
{"past_3ms", "أَجَّلَ"},
},
},
{
label = "رَأَّسَ (p.264)", root = "رأس", wazn = "فعّل",
forms = {
{"imp_2d", "رَئِّسَا"},
{"imp_2fp", "رَئِّسْنَ"},
{"imp_2fs", "رَئِّسِي"},
{"imp_2mp", "رَئِّسُوا"},
{"imp_2ms", "رَئِّسْ"},
{"ind_1p", "نُرَئِّسُ"},
{"ind_1s", "أُرَئِّسُ"},
{"ind_2d", "تُرَئِّسَانِ"},
{"ind_2fp", "تُرَئِّسْنَ"},
{"ind_2fs", "تُرَئِّسِينَ"},
{"ind_2mp", "تُرَئِّسُونَ"},
{"ind_2ms", "تُرَئِّسُ"},
{"ind_3fd", "تُرَئِّسَانِ"},
{"ind_3fp", "يُرَئِّسْنَ"},
{"ind_3fs", "تُرَئِّسُ"},
{"ind_3md", "يُرَئِّسَانِ"},
{"ind_3mp", "يُرَئِّسُونَ"},
{"ind_3ms", "يُرَئِّسُ"},
{"past_1p", "رَأَّسْنَا"},
{"past_1s", "رَأَّسْتُ"},
{"past_2d", "رَأَّسْتُمَا"},
{"past_2fp", "رَأَّسْتُنَّ"},
{"past_2fs", "رَأَّسْتِ"},
{"past_2mp", "رَأَّسْتُمْ"},
{"past_2ms", "رَأَّسْتَ"},
{"past_3fd", "رَأَّسَتَا"},
{"past_3fp", "رَأَّسْنَ"},
{"past_3fs", "رَأَّسَتْ"},
{"past_3md", "رَأَّسَا"},
{"past_3mp", "رَأَّسُوا"},
{"past_3ms", "رَأَّسَ"},
},
},
{
label = "شَأَّمَ (p.264)", root = "شأم", wazn = "فعّل",
forms = {
{"imp_2d", "شَئِّمَا"},
{"imp_2fp", "شَئِّمْنَ"},
{"imp_2fs", "شَئِّمِي"},
{"imp_2mp", "شَئِّمُوا"},
{"imp_2ms", "شَئِّمْ"},
{"ind_1p", "نُشَئِّمُ"},
{"ind_1s", "أُشَئِّمُ"},
{"ind_2d", "تُشَئِّمَانِ"},
{"ind_2fp", "تُشَئِّمْنَ"},
{"ind_2fs", "تُشَئِّمِينَ"},
{"ind_2mp", "تُشَئِّمُونَ"},
{"ind_2ms", "تُشَئِّمُ"},
{"ind_3fd", "تُشَئِّمَانِ"},
{"ind_3fp", "يُشَئِّمْنَ"},
{"ind_3fs", "تُشَئِّمُ"},
{"ind_3md", "يُشَئِّمَانِ"},
{"ind_3mp", "يُشَئِّمُونَ"},
{"ind_3ms", "يُشَئِّمُ"},
{"past_1p", "شَأَّمْنَا"},
{"past_1s", "شَأَّمْتُ"},
{"past_2d", "شَأَّمْتُمَا"},
{"past_2fp", "شَأَّمْتُنَّ"},
{"past_2fs", "شَأَّمْتِ"},
{"past_2mp", "شَأَّمْتُمْ"},
{"past_2ms", "شَأَّمْتَ"},
{"past_3fd", "شَأَّمَتَا"},
{"past_3fp", "شَأَّمْنَ"},
{"past_3fs", "شَأَّمَتْ"},
{"past_3md", "شَأَّمَا"},
{"past_3mp", "شَأَّمُوا"},
{"past_3ms", "شَأَّمَ"},
},
},
{
label = "جَزَّأَ (p.265)", root = "جزأ", wazn = "فعّل",
forms = {
{"imp_2d", "جَزِّئَا"},
{"imp_2fp", "جَزِّئْنَ"},
{"imp_2fs", "جَزِّئِي"},
{"imp_2mp", "جَزِّئُوا"},
{"imp_2ms", "جَزِّئْ"},
{"ind_1p", "نُجَزِّئُ"},
{"ind_1s", "أُجَزِّئُ"},
{"ind_2d", "تُجَزِّئَانِ"},
{"ind_2fp", "تُجَزِّئْنَ"},
{"ind_2fs", "تُجَزِّئِينَ"},
{"ind_2mp", "تُجَزِّئُونَ"},
{"ind_2ms", "تُجَزِّئُ"},
{"ind_3fd", "تُجَزِّئَانِ"},
{"ind_3fp", "يُجَزِّئْنَ"},
{"ind_3fs", "تُجَزِّئُ"},
{"ind_3md", "يُجَزِّئَانِ"},
{"ind_3mp", "يُجَزِّئُونَ"},
{"ind_3ms", "يُجَزِّئُ"},
{"past_1p", "جَزَّأْنَا"},
{"past_1s", "جَزَّأْتُ"},
{"past_2d", "جَزَّأْتُمَا"},
{"past_2fp", "جَزَّأْتُنَّ"},
{"past_2fs", "جَزَّأْتِ"},
{"past_2mp", "جَزَّأْتُمْ"},
{"past_2ms", "جَزَّأْتَ"},
{"past_3fd", "جَزَّأَتَا"},
{"past_3fp", "جَزَّأْنَ"},
{"past_3fs", "جَزَّأَتْ"},
{"past_3md", "جَزَّآ"},
{"past_3mp", "جَزَّؤُوا"},
{"past_3ms", "جَزَّأَ"},
},
},
{
label = "هَنَّأَ (p.265)", root = "هنأ", wazn = "فعّل",
forms = {
{"imp_2d", "هَنِّئَا"},
{"imp_2fp", "هَنِّئْنَ"},
{"imp_2fs", "هَنِّئِي"},
{"imp_2mp", "هَنِّئُوا"},
{"imp_2ms", "هَنِّئْ"},
{"ind_1p", "نُهَنِّئُ"},
{"ind_1s", "أُهَنِّئُ"},
{"ind_2d", "تُهَنِّئَانِ"},
{"ind_2fp", "تُهَنِّئْنَ"},
{"ind_2fs", "تُهَنِّئِينَ"},
{"ind_2mp", "تُهَنِّئُونَ"},
{"ind_2ms", "تُهَنِّئُ"},
{"ind_3fd", "تُهَنِّئَانِ"},
{"ind_3fp", "يُهَنِّئْنَ"},
{"ind_3fs", "تُهَنِّئُ"},
{"ind_3md", "يُهَنِّئَانِ"},
{"ind_3mp", "يُهَنِّئُونَ"},
{"ind_3ms", "يُهَنِّئُ"},
{"past_1p", "هَنَّأْنَا"},
{"past_1s", "هَنَّأْتُ"},
{"past_2d", "هَنَّأْتُمَا"},
{"past_2fp", "هَنَّأْتُنَّ"},
{"past_2fs", "هَنَّأْتِ"},
{"past_2mp", "هَنَّأْتُمْ"},
{"past_2ms", "هَنَّأْتَ"},
{"past_3fd", "هَنَّأَتَا"},
{"past_3fp", "هَنَّأْنَ"},
{"past_3fs", "هَنَّأَتْ"},
{"past_3md", "هَنَّآ"},
{"past_3mp", "هَنَّؤُوا"},
{"past_3ms", "هَنَّأَ"},
},
},
{
label = "وَدَّى (p.272)", root = "ودي", wazn = "فعّل",
forms = {
{"imp_2d", "وَدِّيَا"},
{"imp_2fp", "وَدِّينَ"},
{"imp_2fs", "وَدِّي"},
{"imp_2mp", "وَدُّوا"},
{"imp_2ms", "وَدِّ"},
{"ind_1p", "نُوَدِّي"},
{"ind_1s", "أُوَدِّي"},
{"ind_2d", "تُوَدِّيَانِ"},
{"ind_2fp", "تُوَدِّينَ"},
{"ind_2fs", "تُوَدِّينَ"},
{"ind_2mp", "تُوَدُّونَ"},
{"ind_2ms", "تُوَدِّي"},
{"ind_3fd", "تُوَدِّيَانِ"},
{"ind_3fp", "يُوَدِّينَ"},
{"ind_3fs", "تُوَدِّي"},
{"ind_3md", "يُوَدِّيَانِ"},
{"ind_3mp", "يُوَدُّونَ"},
{"ind_3ms", "يُوَدِّي"},
{"past_1p", "وَدَّيْنَا"},
{"past_1s", "وَدَّيْتُ"},
{"past_2d", "وَدَّيْتُمَا"},
{"past_2fp", "وَدَّيْتُنَّ"},
{"past_2fs", "وَدَّيْتِ"},
{"past_2mp", "وَدَّيْتُمْ"},
{"past_2ms", "وَدَّيْتَ"},
{"past_3fd", "وَدَّتَا"},
{"past_3fp", "وَدَّيْنَ"},
{"past_3fs", "وَدَّتْ"},
{"past_3md", "وَدَّيَا"},
{"past_3mp", "وَدَّوْا"},
{"past_3ms", "وَدَّى"},
},
},
{
label = "وَحَّى (p.272)", root = "وحي", wazn = "فعّل",
forms = {
{"imp_2d", "وَحِّيَا"},
{"imp_2fp", "وَحِّينَ"},
{"imp_2fs", "وَحِّي"},
{"imp_2mp", "وَحُّوا"},
{"imp_2ms", "وَحِّ"},
{"ind_1p", "نُوَحِّي"},
{"ind_1s", "أُوَحِّي"},
{"ind_2d", "تُوَحِّيَانِ"},
{"ind_2fp", "تُوَحِّينَ"},
{"ind_2fs", "تُوَحِّينَ"},
{"ind_2mp", "تُوَحُّونَ"},
{"ind_2ms", "تُوَحِّي"},
{"ind_3fd", "تُوَحِّيَانِ"},
{"ind_3fp", "يُوَحِّينَ"},
{"ind_3fs", "تُوَحِّي"},
{"ind_3md", "يُوَحِّيَانِ"},
{"ind_3mp", "يُوَحُّونَ"},
{"ind_3ms", "يُوَحِّي"},
{"past_1p", "وَحَّيْنَا"},
{"past_1s", "وَحَّيْتُ"},
{"past_2d", "وَحَّيْتُمَا"},
{"past_2fp", "وَحَّيْتُنَّ"},
{"past_2fs", "وَحَّيْتِ"},
{"past_2mp", "وَحَّيْتُمْ"},
{"past_2ms", "وَحَّيْتَ"},
{"past_3fd", "وَحَّتَا"},
{"past_3fp", "وَحَّيْنَ"},
{"past_3fs", "وَحَّتْ"},
{"past_3md", "وَحَّيَا"},
{"past_3mp", "وَحَّوْا"},
{"past_3ms", "وَحَّى"},
},
},
{
label = "تَجَرَّدَ (p.304)", root = "جرد", wazn = "تفعّل",
forms = {
{"imp_2d", "تَجَرَّدَا"},
{"imp_2fp", "تَجَرَّدْنَ"},
{"imp_2fs", "تَجَرَّدِي"},
{"imp_2mp", "تَجَرَّدُوا"},
{"imp_2ms", "تَجَرَّدْ"},
{"ind_1p", "نَتَجَرَّدُ"},
{"ind_1s", "أَتَجَرَّدُ"},
{"ind_2d", "تَتَجَرَّدَانِ"},
{"ind_2fp", "تَتَجَرَّدْنَ"},
{"ind_2fs", "تَتَجَرَّدِينَ"},
{"ind_2mp", "تَتَجَرَّدُونَ"},
{"ind_2ms", "تَتَجَرَّدُ"},
{"ind_3fd", "تَتَجَرَّدَانِ"},
{"ind_3fp", "يَتَجَرَّدْنَ"},
{"ind_3fs", "تَتَجَرَّدُ"},
{"ind_3md", "يَتَجَرَّدَانِ"},
{"ind_3mp", "يَتَجَرَّدُونَ"},
{"ind_3ms", "يَتَجَرَّدُ"},
{"past_1p", "تَجَرَّدْنَا"},
{"past_1s", "تَجَرَّدْتُ"},
{"past_2d", "تَجَرَّدْتُمَا"},
{"past_2fp", "تَجَرَّدْتُنَّ"},
{"past_2fs", "تَجَرَّدْتِ"},
{"past_2mp", "تَجَرَّدْتُمْ"},
{"past_2ms", "تَجَرَّدْتَ"},
{"past_3fd", "تَجَرَّدَتَا"},
{"past_3fp", "تَجَرَّدْنَ"},
{"past_3fs", "تَجَرَّدَتْ"},
{"past_3md", "تَجَرَّدَا"},
{"past_3mp", "تَجَرَّدُوا"},
{"past_3ms", "تَجَرَّدَ"},
},
},
{
label = "تَزَعَّمَ (p.304)", root = "زعم", wazn = "تفعّل",
forms = {
{"imp_2d", "تَزَعَّمَا"},
{"imp_2fp", "تَزَعَّمْنَ"},
{"imp_2fs", "تَزَعَّمِي"},
{"imp_2mp", "تَزَعَّمُوا"},
{"imp_2ms", "تَزَعَّمْ"},
{"ind_1p", "نَتَزَعَّمُ"},
{"ind_1s", "أَتَزَعَّمُ"},
{"ind_2d", "تَتَزَعَّمَانِ"},
{"ind_2fp", "تَتَزَعَّمْنَ"},
{"ind_2fs", "تَتَزَعَّمِينَ"},
{"ind_2mp", "تَتَزَعَّمُونَ"},
{"ind_2ms", "تَتَزَعَّمُ"},
{"ind_3fd", "تَتَزَعَّمَانِ"},
{"ind_3fp", "يَتَزَعَّمْنَ"},
{"ind_3fs", "تَتَزَعَّمُ"},
{"ind_3md", "يَتَزَعَّمَانِ"},
{"ind_3mp", "يَتَزَعَّمُونَ"},
{"ind_3ms", "يَتَزَعَّمُ"},
{"past_1p", "تَزَعَّمْنَا"},
{"past_1s", "تَزَعَّمْتُ"},
{"past_2d", "تَزَعَّمْتُمَا"},
{"past_2fp", "تَزَعَّمْتُنَّ"},
{"past_2fs", "تَزَعَّمْتِ"},
{"past_2mp", "تَزَعَّمْتُمْ"},
{"past_2ms", "تَزَعَّمْتَ"},
{"past_3fd", "تَزَعَّمَتَا"},
{"past_3fp", "تَزَعَّمْنَ"},
{"past_3fs", "تَزَعَّمَتْ"},
{"past_3md", "تَزَعَّمَا"},
{"past_3mp", "تَزَعَّمُوا"},
{"past_3ms", "تَزَعَّمَ"},
},
},
{
label = "تَخَفَّفَ (p.306)", root = "خفف", wazn = "تفعّل",
forms = {
{"imp_2d", "تَخَفَّفَا"},
{"imp_2fp", "تَخَفَّفْنَ"},
{"imp_2fs", "تَخَفَّفِي"},
{"imp_2mp", "تَخَفَّفُوا"},
{"imp_2ms", "تَخَفَّفْ"},
{"ind_1p", "نَتَخَفَّفُ"},
{"ind_1s", "أَتَخَفَّفُ"},
{"ind_2d", "تَتَخَفَّفَانِ"},
{"ind_2fp", "تَتَخَفَّفْنَ"},
{"ind_2fs", "تَتَخَفَّفِينَ"},
{"ind_2mp", "تَتَخَفَّفُونَ"},
{"ind_2ms", "تَتَخَفَّفُ"},
{"ind_3fd", "تَتَخَفَّفَانِ"},
{"ind_3fp", "يَتَخَفَّفْنَ"},
{"ind_3fs", "تَتَخَفَّفُ"},
{"ind_3md", "يَتَخَفَّفَانِ"},
{"ind_3mp", "يَتَخَفَّفُونَ"},
{"ind_3ms", "يَتَخَفَّفُ"},
{"past_1p", "تَخَفَّفْنَا"},
{"past_1s", "تَخَفَّفْتُ"},
{"past_2d", "تَخَفَّفْتُمَا"},
{"past_2fp", "تَخَفَّفْتُنَّ"},
{"past_2fs", "تَخَفَّفْتِ"},
{"past_2mp", "تَخَفَّفْتُمْ"},
{"past_2ms", "تَخَفَّفْتَ"},
{"past_3fd", "تَخَفَّفَتَا"},
{"past_3fp", "تَخَفَّفْنَ"},
{"past_3fs", "تَخَفَّفَتْ"},
{"past_3md", "تَخَفَّفَا"},
{"past_3mp", "تَخَفَّفُوا"},
{"past_3ms", "تَخَفَّفَ"},
},
},
{
label = "تَحَدَّدَ (p.306)", root = "حدد", wazn = "تفعّل",
forms = {
{"imp_2d", "تَحَدَّدَا"},
{"imp_2fp", "تَحَدَّدْنَ"},
{"imp_2fs", "تَحَدَّدِي"},
{"imp_2mp", "تَحَدَّدُوا"},
{"imp_2ms", "تَحَدَّدْ"},
{"ind_1p", "نَتَحَدَّدُ"},
{"ind_1s", "أَتَحَدَّدُ"},
{"ind_2d", "تَتَحَدَّدَانِ"},
{"ind_2fp", "تَتَحَدَّدْنَ"},
{"ind_2fs", "تَتَحَدَّدِينَ"},
{"ind_2mp", "تَتَحَدَّدُونَ"},
{"ind_2ms", "تَتَحَدَّدُ"},
{"ind_3fd", "تَتَحَدَّدَانِ"},
{"ind_3fp", "يَتَحَدَّدْنَ"},
{"ind_3fs", "تَتَحَدَّدُ"},
{"ind_3md", "يَتَحَدَّدَانِ"},
{"ind_3mp", "يَتَحَدَّدُونَ"},
{"ind_3ms", "يَتَحَدَّدُ"},
{"past_1p", "تَحَدَّدْنَا"},
{"past_1s", "تَحَدَّدْتُ"},
{"past_2d", "تَحَدَّدْتُمَا"},
{"past_2fp", "تَحَدَّدْتُنَّ"},
{"past_2fs", "تَحَدَّدْتِ"},
{"past_2mp", "تَحَدَّدْتُمْ"},
{"past_2ms", "تَحَدَّدْتَ"},
{"past_3fd", "تَحَدَّدَتَا"},
{"past_3fp", "تَحَدَّدْنَ"},
{"past_3fs", "تَحَدَّدَتْ"},
{"past_3md", "تَحَدَّدَا"},
{"past_3mp", "تَحَدَّدُوا"},
{"past_3ms", "تَحَدَّدَ"},
},
},
{
label = "تَأَهَّلَ (p.307)", root = "أهل", wazn = "تفعّل",
forms = {
{"imp_2d", "تَأَهَّلَا"},
{"imp_2fp", "تَأَهَّلْنَ"},
{"imp_2fs", "تَأَهَّلِي"},
{"imp_2mp", "تَأَهَّلُوا"},
{"imp_2ms", "تَأَهَّلْ"},
{"ind_1p", "نَتَأَهَّلُ"},
{"ind_1s", "أَتَأَهَّلُ"},
{"ind_2d", "تَتَأَهَّلَانِ"},
{"ind_2fp", "تَتَأَهَّلْنَ"},
{"ind_2fs", "تَتَأَهَّلِينَ"},
{"ind_2mp", "تَتَأَهَّلُونَ"},
{"ind_2ms", "تَتَأَهَّلُ"},
{"ind_3fd", "تَتَأَهَّلَانِ"},
{"ind_3fp", "يَتَأَهَّلْنَ"},
{"ind_3fs", "تَتَأَهَّلُ"},
{"ind_3md", "يَتَأَهَّلَانِ"},
{"ind_3mp", "يَتَأَهَّلُونَ"},
{"ind_3ms", "يَتَأَهَّلُ"},
{"past_1p", "تَأَهَّلْنَا"},
{"past_1s", "تَأَهَّلْتُ"},
{"past_2d", "تَأَهَّلْتُمَا"},
{"past_2fp", "تَأَهَّلْتُنَّ"},
{"past_2fs", "تَأَهَّلْتِ"},
{"past_2mp", "تَأَهَّلْتُمْ"},
{"past_2ms", "تَأَهَّلْتَ"},
{"past_3fd", "تَأَهَّلَتَا"},
{"past_3fp", "تَأَهَّلْنَ"},
{"past_3fs", "تَأَهَّلَتْ"},
{"past_3md", "تَأَهَّلَا"},
{"past_3mp", "تَأَهَّلُوا"},
{"past_3ms", "تَأَهَّلَ"},
},
},
{
label = "تَأَبَّطَ (p.307)", root = "أبط", wazn = "تفعّل",
forms = {
{"imp_2d", "تَأَبَّطَا"},
{"imp_2fp", "تَأَبَّطْنَ"},
{"imp_2fs", "تَأَبَّطِي"},
{"imp_2mp", "تَأَبَّطُوا"},
{"imp_2ms", "تَأَبَّطْ"},
{"ind_1p", "نَتَأَبَّطُ"},
{"ind_1s", "أَتَأَبَّطُ"},
{"ind_2d", "تَتَأَبَّطَانِ"},
{"ind_2fp", "تَتَأَبَّطْنَ"},
{"ind_2fs", "تَتَأَبَّطِينَ"},
{"ind_2mp", "تَتَأَبَّطُونَ"},
{"ind_2ms", "تَتَأَبَّطُ"},
{"ind_3fd", "تَتَأَبَّطَانِ"},
{"ind_3fp", "يَتَأَبَّطْنَ"},
{"ind_3fs", "تَتَأَبَّطُ"},
{"ind_3md", "يَتَأَبَّطَانِ"},
{"ind_3mp", "يَتَأَبَّطُونَ"},
{"ind_3ms", "يَتَأَبَّطُ"},
{"past_1p", "تَأَبَّطْنَا"},
{"past_1s", "تَأَبَّطْتُ"},
{"past_2d", "تَأَبَّطْتُمَا"},
{"past_2fp", "تَأَبَّطْتُنَّ"},
{"past_2fs", "تَأَبَّطْتِ"},
{"past_2mp", "تَأَبَّطْتُمْ"},
{"past_2ms", "تَأَبَّطْتَ"},
{"past_3fd", "تَأَبَّطَتَا"},
{"past_3fp", "تَأَبَّطْنَ"},
{"past_3fs", "تَأَبَّطَتْ"},
{"past_3md", "تَأَبَّطَا"},
{"past_3mp", "تَأَبَّطُوا"},
{"past_3ms", "تَأَبَّطَ"},
},
},
{
label = "تَرَأَّفَ (p.308)", root = "رأف", wazn = "تفعّل",
forms = {
{"imp_2d", "تَرَأَّفَا"},
{"imp_2fp", "تَرَأَّفْنَ"},
{"imp_2fs", "تَرَأَّفِي"},
{"imp_2mp", "تَرَأَّفُوا"},
{"imp_2ms", "تَرَأَّفْ"},
{"ind_1p", "نَتَرَأَّفُ"},
{"ind_1s", "أَتَرَأَّفُ"},
{"ind_2d", "تَتَرَأَّفَانِ"},
{"ind_2fp", "تَتَرَأَّفْنَ"},
{"ind_2fs", "تَتَرَأَّفِينَ"},
{"ind_2mp", "تَتَرَأَّفُونَ"},
{"ind_2ms", "تَتَرَأَّفُ"},
{"ind_3fd", "تَتَرَأَّفَانِ"},
{"ind_3fp", "يَتَرَأَّفْنَ"},
{"ind_3fs", "تَتَرَأَّفُ"},
{"ind_3md", "يَتَرَأَّفَانِ"},
{"ind_3mp", "يَتَرَأَّفُونَ"},
{"ind_3ms", "يَتَرَأَّفُ"},
{"past_1p", "تَرَأَّفْنَا"},
{"past_1s", "تَرَأَّفْتُ"},
{"past_2d", "تَرَأَّفْتُمَا"},
{"past_2fp", "تَرَأَّفْتُنَّ"},
{"past_2fs", "تَرَأَّفْتِ"},
{"past_2mp", "تَرَأَّفْتُمْ"},
{"past_2ms", "تَرَأَّفْتَ"},
{"past_3fd", "تَرَأَّفَتَا"},
{"past_3fp", "تَرَأَّفْنَ"},
{"past_3fs", "تَرَأَّفَتْ"},
{"past_3md", "تَرَأَّفَا"},
{"past_3mp", "تَرَأَّفُوا"},
{"past_3ms", "تَرَأَّفَ"},
},
},
{
label = "تَذَأَّبَ (p.308)", root = "ذأب", wazn = "تفعّل",
forms = {
{"imp_2d", "تَذَأَّبَا"},
{"imp_2fp", "تَذَأَّبْنَ"},
{"imp_2fs", "تَذَأَّبِي"},
{"imp_2mp", "تَذَأَّبُوا"},
{"imp_2ms", "تَذَأَّبْ"},
{"ind_1p", "نَتَذَأَّبُ"},
{"ind_1s", "أَتَذَأَّبُ"},
{"ind_2d", "تَتَذَأَّبَانِ"},
{"ind_2fp", "تَتَذَأَّبْنَ"},
{"ind_2fs", "تَتَذَأَّبِينَ"},
{"ind_2mp", "تَتَذَأَّبُونَ"},
{"ind_2ms", "تَتَذَأَّبُ"},
{"ind_3fd", "تَتَذَأَّبَانِ"},
{"ind_3fp", "يَتَذَأَّبْنَ"},
{"ind_3fs", "تَتَذَأَّبُ"},
{"ind_3md", "يَتَذَأَّبَانِ"},
{"ind_3mp", "يَتَذَأَّبُونَ"},
{"ind_3ms", "يَتَذَأَّبُ"},
{"past_1p", "تَذَأَّبْنَا"},
{"past_1s", "تَذَأَّبْتُ"},
{"past_2d", "تَذَأَّبْتُمَا"},
{"past_2fp", "تَذَأَّبْتُنَّ"},
{"past_2fs", "تَذَأَّبْتِ"},
{"past_2mp", "تَذَأَّبْتُمْ"},
{"past_2ms", "تَذَأَّبْتَ"},
{"past_3fd", "تَذَأَّبَتَا"},
{"past_3fp", "تَذَأَّبْنَ"},
{"past_3fs", "تَذَأَّبَتْ"},
{"past_3md", "تَذَأَّبَا"},
{"past_3mp", "تَذَأَّبُوا"},
{"past_3ms", "تَذَأَّبَ"},
},
},
{
label = "تَبَرَّأَ (p.310)", root = "برأ", wazn = "تفعّل",
forms = {
{"imp_2d", "تَبَرَّآ"},
{"imp_2fp", "تَبَرَّأْنَ"},
{"imp_2fs", "تَبَرَّئِي"},
{"imp_2mp", "تَبَرَّؤُوا"},
{"imp_2ms", "تَبَرَّأْ"},
{"ind_1p", "نَتَبَرَّأُ"},
{"ind_1s", "أَتَبَرَّأُ"},
{"ind_2d", "تَتَبَرَّآنِ"},
{"ind_2fp", "تَتَبَرَّأْنَ"},
{"ind_2fs", "تَتَبَرَّئِينَ"},
{"ind_2mp", "تَتَبَرَّؤُونَ"},
{"ind_2ms", "تَتَبَرَّأُ"},
{"ind_3fd", "تَتَبَرَّآنِ"},
{"ind_3fp", "يَتَبَرَّأْنَ"},
{"ind_3fs", "تَتَبَرَّأُ"},
{"ind_3md", "يَتَبَرَّآنِ"},
{"ind_3mp", "يَتَبَرَّؤُونَ"},
{"ind_3ms", "يَتَبَرَّأُ"},
{"past_1p", "تَبَرَّأْنَا"},
{"past_1s", "تَبَرَّأْتُ"},
{"past_2d", "تَبَرَّأْتُمَا"},
{"past_2fp", "تَبَرَّأْتُنَّ"},
{"past_2fs", "تَبَرَّأْتِ"},
{"past_2mp", "تَبَرَّأْتُمْ"},
{"past_2ms", "تَبَرَّأْتَ"},
{"past_3fd", "تَبَرَّأَتَا"},
{"past_3fp", "تَبَرَّأْنَ"},
{"past_3fs", "تَبَرَّأَتْ"},
{"past_3md", "تَبَرَّآ"},
{"past_3mp", "تَبَرَّؤُوا"},
{"past_3ms", "تَبَرَّأَ"},
},
},
{
label = "تَنَشَّأَ (p.310)", root = "نشأ", wazn = "تفعّل",
forms = {
{"imp_2d", "تَنَشَّآ"},
{"imp_2fp", "تَنَشَّأْنَ"},
{"imp_2fs", "تَنَشَّئِي"},
{"imp_2mp", "تَنَشَّؤُوا"},
{"imp_2ms", "تَنَشَّأْ"},
{"ind_1p", "نَتَنَشَّأُ"},
{"ind_1s", "أَتَنَشَّأُ"},
{"ind_2d", "تَتَنَشَّآنِ"},
{"ind_2fp", "تَتَنَشَّأْنَ"},
{"ind_2fs", "تَتَنَشَّئِينَ"},
{"ind_2mp", "تَتَنَشَّؤُونَ"},
{"ind_2ms", "تَتَنَشَّأُ"},
{"ind_3fd", "تَتَنَشَّآنِ"},
{"ind_3fp", "يَتَنَشَّأْنَ"},
{"ind_3fs", "تَتَنَشَّأُ"},
{"ind_3md", "يَتَنَشَّآنِ"},
{"ind_3mp", "يَتَنَشَّؤُونَ"},
{"ind_3ms", "يَتَنَشَّأُ"},
{"past_1p", "تَنَشَّأْنَا"},
{"past_1s", "تَنَشَّأْتُ"},
{"past_2d", "تَنَشَّأْتُمَا"},
{"past_2fp", "تَنَشَّأْتُنَّ"},
{"past_2fs", "تَنَشَّأْتِ"},
{"past_2mp", "تَنَشَّأْتُمْ"},
{"past_2ms", "تَنَشَّأْتَ"},
{"past_3fd", "تَنَشَّأَتَا"},
{"past_3fp", "تَنَشَّأْنَ"},
{"past_3fs", "تَنَشَّأَتْ"},
{"past_3md", "تَنَشَّآ"},
{"past_3mp", "تَنَشَّؤُوا"},
{"past_3ms", "تَنَشَّأَ"},
},
},
{
label = "تَوَجَّهَ (p.311)", root = "وجه", wazn = "تفعّل",
forms = {
{"imp_2d", "تَوَجَّهَا"},
{"imp_2fp", "تَوَجَّهْنَ"},
{"imp_2fs", "تَوَجَّهِي"},
{"imp_2mp", "تَوَجَّهُوا"},
{"imp_2ms", "تَوَجَّهْ"},
{"ind_1p", "نَتَوَجَّهُ"},
{"ind_1s", "أَتَوَجَّهُ"},
{"ind_2d", "تَتَوَجَّهَانِ"},
{"ind_2fp", "تَتَوَجَّهْنَ"},
{"ind_2fs", "تَتَوَجَّهِينَ"},
{"ind_2mp", "تَتَوَجَّهُونَ"},
{"ind_2ms", "تَتَوَجَّهُ"},
{"ind_3fd", "تَتَوَجَّهَانِ"},
{"ind_3fp", "يَتَوَجَّهْنَ"},
{"ind_3fs", "تَتَوَجَّهُ"},
{"ind_3md", "يَتَوَجَّهَانِ"},
{"ind_3mp", "يَتَوَجَّهُونَ"},
{"ind_3ms", "يَتَوَجَّهُ"},
{"past_1p", "تَوَجَّهْنَا"},
{"past_1s", "تَوَجَّهْتُ"},
{"past_2d", "تَوَجَّهْتُمَا"},
{"past_2fp", "تَوَجَّهْتُنَّ"},
{"past_2fs", "تَوَجَّهْتِ"},
{"past_2mp", "تَوَجَّهْتُمْ"},
{"past_2ms", "تَوَجَّهْتَ"},
{"past_3fd", "تَوَجَّهَتَا"},
{"past_3fp", "تَوَجَّهْنَ"},
{"past_3fs", "تَوَجَّهَتْ"},
{"past_3md", "تَوَجَّهَا"},
{"past_3mp", "تَوَجَّهُوا"},
{"past_3ms", "تَوَجَّهَ"},
},
},
{
label = "تَيَتَّمَ (p.311)", root = "يتم", wazn = "تفعّل",
forms = {
{"imp_2d", "تَيَتَّمَا"},
{"imp_2fp", "تَيَتَّمْنَ"},
{"imp_2fs", "تَيَتَّمِي"},
{"imp_2mp", "تَيَتَّمُوا"},
{"imp_2ms", "تَيَتَّمْ"},
{"ind_1p", "نَتَيَتَّمُ"},
{"ind_1s", "أَتَيَتَّمُ"},
{"ind_2d", "تَتَيَتَّمَانِ"},
{"ind_2fp", "تَتَيَتَّمْنَ"},
{"ind_2fs", "تَتَيَتَّمِينَ"},
{"ind_2mp", "تَتَيَتَّمُونَ"},
{"ind_2ms", "تَتَيَتَّمُ"},
{"ind_3fd", "تَتَيَتَّمَانِ"},
{"ind_3fp", "يَتَيَتَّمْنَ"},
{"ind_3fs", "تَتَيَتَّمُ"},
{"ind_3md", "يَتَيَتَّمَانِ"},
{"ind_3mp", "يَتَيَتَّمُونَ"},
{"ind_3ms", "يَتَيَتَّمُ"},
{"past_1p", "تَيَتَّمْنَا"},
{"past_1s", "تَيَتَّمْتُ"},
{"past_2d", "تَيَتَّمْتُمَا"},
{"past_2fp", "تَيَتَّمْتُنَّ"},
{"past_2fs", "تَيَتَّمْتِ"},
{"past_2mp", "تَيَتَّمْتُمْ"},
{"past_2ms", "تَيَتَّمْتَ"},
{"past_3fd", "تَيَتَّمَتَا"},
{"past_3fp", "تَيَتَّمْنَ"},
{"past_3fs", "تَيَتَّمَتْ"},
{"past_3md", "تَيَتَّمَا"},
{"past_3mp", "تَيَتَّمُوا"},
{"past_3ms", "تَيَتَّمَ"},
},
},
{
label = "تَوَدَّدَ (p.312)", root = "ودد", wazn = "تفعّل",
forms = {
{"imp_2d", "تَوَدَّدَا"},
{"imp_2fp", "تَوَدَّدْنَ"},
{"imp_2fs", "تَوَدَّدِي"},
{"imp_2mp", "تَوَدَّدُوا"},
{"imp_2ms", "تَوَدَّدْ"},
{"ind_1p", "نَتَوَدَّدُ"},
{"ind_1s", "أَتَوَدَّدُ"},
{"ind_2d", "تَتَوَدَّدَانِ"},
{"ind_2fp", "تَتَوَدَّدْنَ"},
{"ind_2fs", "تَتَوَدَّدِينَ"},
{"ind_2mp", "تَتَوَدَّدُونَ"},
{"ind_2ms", "تَتَوَدَّدُ"},
{"ind_3fd", "تَتَوَدَّدَانِ"},
{"ind_3fp", "يَتَوَدَّدْنَ"},
{"ind_3fs", "تَتَوَدَّدُ"},
{"ind_3md", "يَتَوَدَّدَانِ"},
{"ind_3mp", "يَتَوَدَّدُونَ"},
{"ind_3ms", "يَتَوَدَّدُ"},
{"past_1p", "تَوَدَّدْنَا"},
{"past_1s", "تَوَدَّدْتُ"},
{"past_2d", "تَوَدَّدْتُمَا"},
{"past_2fp", "تَوَدَّدْتُنَّ"},
{"past_2fs", "تَوَدَّدْتِ"},
{"past_2mp", "تَوَدَّدْتُمْ"},
{"past_2ms", "تَوَدَّدْتَ"},
{"past_3fd", "تَوَدَّدَتَا"},
{"past_3fp", "تَوَدَّدْنَ"},
{"past_3fs", "تَوَدَّدَتْ"},
{"past_3md", "تَوَدَّدَا"},
{"past_3mp", "تَوَدَّدُوا"},
{"past_3ms", "تَوَدَّدَ"},
},
},
{
label = "تَيَمَّمَ (p.312)", root = "يمم", wazn = "تفعّل",
forms = {
{"imp_2d", "تَيَمَّمَا"},
{"imp_2fp", "تَيَمَّمْنَ"},
{"imp_2fs", "تَيَمَّمِي"},
{"imp_2mp", "تَيَمَّمُوا"},
{"imp_2ms", "تَيَمَّمْ"},
{"ind_1p", "نَتَيَمَّمُ"},
{"ind_1s", "أَتَيَمَّمُ"},
{"ind_2d", "تَتَيَمَّمَانِ"},
{"ind_2fp", "تَتَيَمَّمْنَ"},
{"ind_2fs", "تَتَيَمَّمِينَ"},
{"ind_2mp", "تَتَيَمَّمُونَ"},
{"ind_2ms", "تَتَيَمَّمُ"},
{"ind_3fd", "تَتَيَمَّمَانِ"},
{"ind_3fp", "يَتَيَمَّمْنَ"},
{"ind_3fs", "تَتَيَمَّمُ"},
{"ind_3md", "يَتَيَمَّمَانِ"},
{"ind_3mp", "يَتَيَمَّمُونَ"},
{"ind_3ms", "يَتَيَمَّمُ"},
{"past_1p", "تَيَمَّمْنَا"},
{"past_1s", "تَيَمَّمْتُ"},
{"past_2d", "تَيَمَّمْتُمَا"},
{"past_2fp", "تَيَمَّمْتُنَّ"},
{"past_2fs", "تَيَمَّمْتِ"},
{"past_2mp", "تَيَمَّمْتُمْ"},
{"past_2ms", "تَيَمَّمْتَ"},
{"past_3fd", "تَيَمَّمَتَا"},
{"past_3fp", "تَيَمَّمْنَ"},
{"past_3fs", "تَيَمَّمَتْ"},
{"past_3md", "تَيَمَّمَا"},
{"past_3mp", "تَيَمَّمُوا"},
{"past_3ms", "تَيَمَّمَ"},
},
},
{
label = "تَخَوَّفَ (p.313)", root = "خوف", wazn = "تفعّل",
forms = {
{"imp_2d", "تَخَوَّفَا"},
{"imp_2fp", "تَخَوَّفْنَ"},
{"imp_2fs", "تَخَوَّفِي"},
{"imp_2mp", "تَخَوَّفُوا"},
{"imp_2ms", "تَخَوَّفْ"},
{"ind_1p", "نَتَخَوَّفُ"},
{"ind_1s", "أَتَخَوَّفُ"},
{"ind_2d", "تَتَخَوَّفَانِ"},
{"ind_2fp", "تَتَخَوَّفْنَ"},
{"ind_2fs", "تَتَخَوَّفِينَ"},
{"ind_2mp", "تَتَخَوَّفُونَ"},
{"ind_2ms", "تَتَخَوَّفُ"},
{"ind_3fd", "تَتَخَوَّفَانِ"},
{"ind_3fp", "يَتَخَوَّفْنَ"},
{"ind_3fs", "تَتَخَوَّفُ"},
{"ind_3md", "يَتَخَوَّفَانِ"},
{"ind_3mp", "يَتَخَوَّفُونَ"},
{"ind_3ms", "يَتَخَوَّفُ"},
{"past_1p", "تَخَوَّفْنَا"},
{"past_1s", "تَخَوَّفْتُ"},
{"past_2d", "تَخَوَّفْتُمَا"},
{"past_2fp", "تَخَوَّفْتُنَّ"},
{"past_2fs", "تَخَوَّفْتِ"},
{"past_2mp", "تَخَوَّفْتُمْ"},
{"past_2ms", "تَخَوَّفْتَ"},
{"past_3fd", "تَخَوَّفَتَا"},
{"past_3fp", "تَخَوَّفْنَ"},
{"past_3fs", "تَخَوَّفَتْ"},
{"past_3md", "تَخَوَّفَا"},
{"past_3mp", "تَخَوَّفُوا"},
{"past_3ms", "تَخَوَّفَ"},
},
},
{
label = "تَمَيَّزَ (p.313)", root = "ميز", wazn = "تفعّل",
forms = {
{"imp_2d", "تَمَيَّزَا"},
{"imp_2fp", "تَمَيَّزْنَ"},
{"imp_2fs", "تَمَيَّزِي"},
{"imp_2mp", "تَمَيَّزُوا"},
{"imp_2ms", "تَمَيَّزْ"},
{"ind_1p", "نَتَمَيَّزُ"},
{"ind_1s", "أَتَمَيَّزُ"},
{"ind_2d", "تَتَمَيَّزَانِ"},
{"ind_2fp", "تَتَمَيَّزْنَ"},
{"ind_2fs", "تَتَمَيَّزِينَ"},
{"ind_2mp", "تَتَمَيَّزُونَ"},
{"ind_2ms", "تَتَمَيَّزُ"},
{"ind_3fd", "تَتَمَيَّزَانِ"},
{"ind_3fp", "يَتَمَيَّزْنَ"},
{"ind_3fs", "تَتَمَيَّزُ"},
{"ind_3md", "يَتَمَيَّزَانِ"},
{"ind_3mp", "يَتَمَيَّزُونَ"},
{"ind_3ms", "يَتَمَيَّزُ"},
{"past_1p", "تَمَيَّزْنَا"},
{"past_1s", "تَمَيَّزْتُ"},
{"past_2d", "تَمَيَّزْتُمَا"},
{"past_2fp", "تَمَيَّزْتُنَّ"},
{"past_2fs", "تَمَيَّزْتِ"},
{"past_2mp", "تَمَيَّزْتُمْ"},
{"past_2ms", "تَمَيَّزْتَ"},
{"past_3fd", "تَمَيَّزَتَا"},
{"past_3fp", "تَمَيَّزْنَ"},
{"past_3fs", "تَمَيَّزَتْ"},
{"past_3md", "تَمَيَّزَا"},
{"past_3mp", "تَمَيَّزُوا"},
{"past_3ms", "تَمَيَّزَ"},
},
},
{
label = "تَأَوَّهَ (p.314)", root = "أوه", wazn = "تفعّل",
forms = {
{"imp_2d", "تَأَوَّهَا"},
{"imp_2fp", "تَأَوَّهْنَ"},
{"imp_2fs", "تَأَوَّهِي"},
{"imp_2mp", "تَأَوَّهُوا"},
{"imp_2ms", "تَأَوَّهْ"},
{"ind_1p", "نَتَأَوَّهُ"},
{"ind_1s", "أَتَأَوَّهُ"},
{"ind_2d", "تَتَأَوَّهَانِ"},
{"ind_2fp", "تَتَأَوَّهْنَ"},
{"ind_2fs", "تَتَأَوَّهِينَ"},
{"ind_2mp", "تَتَأَوَّهُونَ"},
{"ind_2ms", "تَتَأَوَّهُ"},
{"ind_3fd", "تَتَأَوَّهَانِ"},
{"ind_3fp", "يَتَأَوَّهْنَ"},
{"ind_3fs", "تَتَأَوَّهُ"},
{"ind_3md", "يَتَأَوَّهَانِ"},
{"ind_3mp", "يَتَأَوَّهُونَ"},
{"ind_3ms", "يَتَأَوَّهُ"},
{"past_1p", "تَأَوَّهْنَا"},
{"past_1s", "تَأَوَّهْتُ"},
{"past_2d", "تَأَوَّهْتُمَا"},
{"past_2fp", "تَأَوَّهْتُنَّ"},
{"past_2fs", "تَأَوَّهْتِ"},
{"past_2mp", "تَأَوَّهْتُمْ"},
{"past_2ms", "تَأَوَّهْتَ"},
{"past_3fd", "تَأَوَّهَتَا"},
{"past_3fp", "تَأَوَّهْنَ"},
{"past_3fs", "تَأَوَّهَتْ"},
{"past_3md", "تَأَوَّهَا"},
{"past_3mp", "تَأَوَّهُوا"},
{"past_3ms", "تَأَوَّهَ"},
},
},
}
3u33b3hw6doky98u5u4fsjxu6h9wjzx
1159068
1159010
2026-09-10T19:33:52Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159068
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 4 من 16.
return {
{
label = "مَسَّى (p.270)", root = "مسو", wazn = "فعّل",
forms = {
{"imp_2d", "مَسِّيَا"},
{"imp_2fp", "مَسِّينَ"},
{"imp_2fs", "مَسِّي"},
{"imp_2mp", "مَسُّوا"},
{"imp_2ms", "مَسِّ"},
{"ind_1p", "نُمَسِّي"},
{"ind_1s", "أُمَسِّي"},
{"ind_2d", "تُمَسِّيَانِ"},
{"ind_2fp", "تُمَسِّينَ"},
{"ind_2fs", "تُمَسِّينَ"},
{"ind_2mp", "تُمَسُّونَ"},
{"ind_2ms", "تُمَسِّي"},
{"ind_3fd", "تُمَسِّيَانِ"},
{"ind_3fp", "يُمَسِّينَ"},
{"ind_3fs", "تُمَسِّي"},
{"ind_3md", "يُمَسِّيَانِ"},
{"ind_3mp", "يُمَسُّونَ"},
{"ind_3ms", "يُمَسِّي"},
{"past_1p", "مَسَّيْنَا"},
{"past_1s", "مَسَّيْتُ"},
{"past_2d", "مَسَّيْتُمَا"},
{"past_2fp", "مَسَّيْتُنَّ"},
{"past_2fs", "مَسَّيْتِ"},
{"past_2mp", "مَسَّيْتُمْ"},
{"past_2ms", "مَسَّيْتَ"},
{"past_3fd", "مَسَّتَا"},
{"past_3fp", "مَسَّيْنَ"},
{"past_3fs", "مَسَّتْ"},
{"past_3md", "مَسَّيَا"},
{"past_3mp", "مَسَّوْا"},
{"past_3ms", "مَسَّى"},
},
},
{
label = "لَوَّى (p.273)", root = "لوي", wazn = "فعّل",
forms = {
{"imp_2d", "لَوِّيَا"},
{"imp_2fp", "لَوِّينَ"},
{"imp_2fs", "لَوِّي"},
{"imp_2mp", "لَوُّوا"},
{"imp_2ms", "لَوِّ"},
{"ind_1p", "نُلَوِّي"},
{"ind_1s", "أُلَوِّي"},
{"ind_2d", "تُلَوِّيَانِ"},
{"ind_2fp", "تُلَوِّينَ"},
{"ind_2fs", "تُلَوِّينَ"},
{"ind_2mp", "تُلَوُّونَ"},
{"ind_2ms", "تُلَوِّي"},
{"ind_3fd", "تُلَوِّيَانِ"},
{"ind_3fp", "يُلَوِّينَ"},
{"ind_3fs", "تُلَوِّي"},
{"ind_3md", "يُلَوِّيَانِ"},
{"ind_3mp", "يُلَوُّونَ"},
{"ind_3ms", "يُلَوِّي"},
{"past_1p", "لَوَّيْنَا"},
{"past_1s", "لَوَّيْتُ"},
{"past_2d", "لَوَّيْتُمَا"},
{"past_2fp", "لَوَّيْتُنَّ"},
{"past_2fs", "لَوَّيْتِ"},
{"past_2mp", "لَوَّيْتُمْ"},
{"past_2ms", "لَوَّيْتَ"},
{"past_3fd", "لَوَّتَا"},
{"past_3fp", "لَوَّيْنَ"},
{"past_3fs", "لَوَّتْ"},
{"past_3md", "لَوَّيَا"},
{"past_3mp", "لَوَّوْا"},
{"past_3ms", "لَوَّى"},
},
},
{
label = "حَيَّا (p.273)", root = "حيي", wazn = "فعّل",
forms = {
{"imp_2d", "حَيِّيَا"},
{"imp_2fp", "حَيِّينَ"},
{"imp_2fs", "حَيِّي"},
{"imp_2mp", "حَيُّوا"},
{"imp_2ms", "حَيِّ"},
{"ind_1p", "نُحَيِّي"},
{"ind_1s", "أُحَيِّي"},
{"ind_2d", "تُحَيِّيَانِ"},
{"ind_2fp", "تُحَيِّينَ"},
{"ind_2fs", "تُحَيِّينَ"},
{"ind_2mp", "تُحَيُّونَ"},
{"ind_2ms", "تُحَيِّي"},
{"ind_3fd", "تُحَيِّيَانِ"},
{"ind_3fp", "يُحَيِّينَ"},
{"ind_3fs", "تُحَيِّي"},
{"ind_3md", "يُحَيِّيَانِ"},
{"ind_3mp", "يُحَيُّونَ"},
{"ind_3ms", "يُحَيِّي"},
{"past_1p", "حَيَّيْنَا"},
{"past_1s", "حَيَّيْتُ"},
{"past_2d", "حَيَّيْتُمَا"},
{"past_2fp", "حَيَّيْتُنَّ"},
{"past_2fs", "حَيَّيْتِ"},
{"past_2mp", "حَيَّيْتُمْ"},
{"past_2ms", "حَيَّيْتَ"},
{"past_3fd", "حَيَّتَا"},
{"past_3fp", "حَيَّيْنَ"},
{"past_3fs", "حَيَّتْ"},
{"past_3md", "حَيَّيَا"},
{"past_3mp", "حَيَّوْا"},
{"past_3ms", "حَيَّا"},
},
},
{
label = "قَرَّرَ (p.261)", root = "قرر", wazn = "فعّل",
forms = {
{"imp_2d", "قَرِّرَا"},
{"imp_2fp", "قَرِّرْنَ"},
{"imp_2fs", "قَرِّرِي"},
{"imp_2mp", "قَرِّرُوا"},
{"imp_2ms", "قَرِّرْ"},
{"ind_1p", "نُقَرِّرُ"},
{"ind_1s", "أُقَرِّرُ"},
{"ind_2d", "تُقَرِّرَانِ"},
{"ind_2fp", "تُقَرِّرْنَ"},
{"ind_2fs", "تُقَرِّرِينَ"},
{"ind_2mp", "تُقَرِّرُونَ"},
{"ind_2ms", "تُقَرِّرُ"},
{"ind_3fd", "تُقَرِّرَانِ"},
{"ind_3fp", "يُقَرِّرْنَ"},
{"ind_3fs", "تُقَرِّرُ"},
{"ind_3md", "يُقَرِّرَانِ"},
{"ind_3mp", "يُقَرِّرُونَ"},
{"ind_3ms", "يُقَرِّرُ"},
{"past_1p", "قَرَّرْنَا"},
{"past_1s", "قَرَّرْتُ"},
{"past_2d", "قَرَّرْتُمَا"},
{"past_2fp", "قَرَّرْتُنَّ"},
{"past_2fs", "قَرَّرْتِ"},
{"past_2mp", "قَرَّرْتُمْ"},
{"past_2ms", "قَرَّرْتَ"},
{"past_3fd", "قَرَّرَتَا"},
{"past_3fp", "قَرَّرْنَ"},
{"past_3fs", "قَرَّرَتْ"},
{"past_3md", "قَرَّرَا"},
{"past_3mp", "قَرَّرُوا"},
{"past_3ms", "قَرَّرَ"},
},
},
{
label = "سَبَّبَ (p.261)", root = "سبب", wazn = "فعّل",
forms = {
{"imp_2d", "سَبِّبَا"},
{"imp_2fp", "سَبِّبْنَ"},
{"imp_2fs", "سَبِّبِي"},
{"imp_2mp", "سَبِّبُوا"},
{"imp_2ms", "سَبِّبْ"},
{"ind_1p", "نُسَبِّبُ"},
{"ind_1s", "أُسَبِّبُ"},
{"ind_2d", "تُسَبِّبَانِ"},
{"ind_2fp", "تُسَبِّبْنَ"},
{"ind_2fs", "تُسَبِّبِينَ"},
{"ind_2mp", "تُسَبِّبُونَ"},
{"ind_2ms", "تُسَبِّبُ"},
{"ind_3fd", "تُسَبِّبَانِ"},
{"ind_3fp", "يُسَبِّبْنَ"},
{"ind_3fs", "تُسَبِّبُ"},
{"ind_3md", "يُسَبِّبَانِ"},
{"ind_3mp", "يُسَبِّبُونَ"},
{"ind_3ms", "يُسَبِّبُ"},
{"past_1p", "سَبَّبْنَا"},
{"past_1s", "سَبَّبْتُ"},
{"past_2d", "سَبَّبْتُمَا"},
{"past_2fp", "سَبَّبْتُنَّ"},
{"past_2fs", "سَبَّبْتِ"},
{"past_2mp", "سَبَّبْتُمْ"},
{"past_2ms", "سَبَّبْتَ"},
{"past_3fd", "سَبَّبَتَا"},
{"past_3fp", "سَبَّبْنَ"},
{"past_3fs", "سَبَّبَتْ"},
{"past_3md", "سَبَّبَا"},
{"past_3mp", "سَبَّبُوا"},
{"past_3ms", "سَبَّبَ"},
},
},
{
label = "أَمَّنَ (p.263)", root = "أمن", wazn = "فعّل",
forms = {
{"imp_2d", "أَمِّنَا"},
{"imp_2fp", "أَمِّنَّ"},
{"imp_2fs", "أَمِّنِي"},
{"imp_2mp", "أَمِّنُوا"},
{"imp_2ms", "أَمِّنْ"},
{"ind_1p", "نُؤَمِّنُ"},
{"ind_1s", "أُؤَمِّنُ"},
{"ind_2d", "تُؤَمِّنَانِ"},
{"ind_2fp", "تُؤَمِّنَّ"},
{"ind_2fs", "تُؤَمِّنِينَ"},
{"ind_2mp", "تُؤَمِّنُونَ"},
{"ind_2ms", "تُؤَمِّنُ"},
{"ind_3fd", "تُؤَمِّنَانِ"},
{"ind_3fp", "يُؤَمِّنَّ"},
{"ind_3fs", "تُؤَمِّنُ"},
{"ind_3md", "يُؤَمِّنَانِ"},
{"ind_3mp", "يُؤَمِّنُونَ"},
{"ind_3ms", "يُؤَمِّنُ"},
{"past_1p", "أَمَّنَّا"},
{"past_1s", "أَمَّنْتُ"},
{"past_2d", "أَمَّنْتُمَا"},
{"past_2fp", "أَمَّنْتُنَّ"},
{"past_2fs", "أَمَّنْتِ"},
{"past_2mp", "أَمَّنْتُمْ"},
{"past_2ms", "أَمَّنْتَ"},
{"past_3fd", "أَمَّنَتَا"},
{"past_3fp", "أَمَّنَّ"},
{"past_3fs", "أَمَّنَتْ"},
{"past_3md", "أَمَّنَا"},
{"past_3mp", "أَمَّنُوا"},
{"past_3ms", "أَمَّنَ"},
},
},
{
label = "أَجَّلَ (p.263)", root = "أجل", wazn = "فعّل",
forms = {
{"imp_2d", "أَجِّلَا"},
{"imp_2fp", "أَجِّلْنَ"},
{"imp_2fs", "أَجِّلِي"},
{"imp_2mp", "أَجِّلُوا"},
{"imp_2ms", "أَجِّلْ"},
{"ind_1p", "نُؤَجِّلُ"},
{"ind_1s", "أُؤَجِّلُ"},
{"ind_2d", "تُؤَجِّلَانِ"},
{"ind_2fp", "تُؤَجِّلْنَ"},
{"ind_2fs", "تُؤَجِّلِينَ"},
{"ind_2mp", "تُؤَجِّلُونَ"},
{"ind_2ms", "تُؤَجِّلُ"},
{"ind_3fd", "تُؤَجِّلَانِ"},
{"ind_3fp", "يُؤَجِّلْنَ"},
{"ind_3fs", "تُؤَجِّلُ"},
{"ind_3md", "يُؤَجِّلَانِ"},
{"ind_3mp", "يُؤَجِّلُونَ"},
{"ind_3ms", "يُؤَجِّلُ"},
{"past_1p", "أَجَّلْنَا"},
{"past_1s", "أَجَّلْتُ"},
{"past_2d", "أَجَّلْتُمَا"},
{"past_2fp", "أَجَّلْتُنَّ"},
{"past_2fs", "أَجَّلْتِ"},
{"past_2mp", "أَجَّلْتُمْ"},
{"past_2ms", "أَجَّلْتَ"},
{"past_3fd", "أَجَّلَتَا"},
{"past_3fp", "أَجَّلْنَ"},
{"past_3fs", "أَجَّلَتْ"},
{"past_3md", "أَجَّلَا"},
{"past_3mp", "أَجَّلُوا"},
{"past_3ms", "أَجَّلَ"},
},
},
{
label = "رَأَّسَ (p.264)", root = "رأس", wazn = "فعّل",
forms = {
{"imp_2d", "رَئِّسَا"},
{"imp_2fp", "رَئِّسْنَ"},
{"imp_2fs", "رَئِّسِي"},
{"imp_2mp", "رَئِّسُوا"},
{"imp_2ms", "رَئِّسْ"},
{"ind_1p", "نُرَئِّسُ"},
{"ind_1s", "أُرَئِّسُ"},
{"ind_2d", "تُرَئِّسَانِ"},
{"ind_2fp", "تُرَئِّسْنَ"},
{"ind_2fs", "تُرَئِّسِينَ"},
{"ind_2mp", "تُرَئِّسُونَ"},
{"ind_2ms", "تُرَئِّسُ"},
{"ind_3fd", "تُرَئِّسَانِ"},
{"ind_3fp", "يُرَئِّسْنَ"},
{"ind_3fs", "تُرَئِّسُ"},
{"ind_3md", "يُرَئِّسَانِ"},
{"ind_3mp", "يُرَئِّسُونَ"},
{"ind_3ms", "يُرَئِّسُ"},
{"past_1p", "رَأَّسْنَا"},
{"past_1s", "رَأَّسْتُ"},
{"past_2d", "رَأَّسْتُمَا"},
{"past_2fp", "رَأَّسْتُنَّ"},
{"past_2fs", "رَأَّسْتِ"},
{"past_2mp", "رَأَّسْتُمْ"},
{"past_2ms", "رَأَّسْتَ"},
{"past_3fd", "رَأَّسَتَا"},
{"past_3fp", "رَأَّسْنَ"},
{"past_3fs", "رَأَّسَتْ"},
{"past_3md", "رَأَّسَا"},
{"past_3mp", "رَأَّسُوا"},
{"past_3ms", "رَأَّسَ"},
},
},
{
label = "شَأَّمَ (p.264)", root = "شأم", wazn = "فعّل",
forms = {
{"imp_2d", "شَئِّمَا"},
{"imp_2fp", "شَئِّمْنَ"},
{"imp_2fs", "شَئِّمِي"},
{"imp_2mp", "شَئِّمُوا"},
{"imp_2ms", "شَئِّمْ"},
{"ind_1p", "نُشَئِّمُ"},
{"ind_1s", "أُشَئِّمُ"},
{"ind_2d", "تُشَئِّمَانِ"},
{"ind_2fp", "تُشَئِّمْنَ"},
{"ind_2fs", "تُشَئِّمِينَ"},
{"ind_2mp", "تُشَئِّمُونَ"},
{"ind_2ms", "تُشَئِّمُ"},
{"ind_3fd", "تُشَئِّمَانِ"},
{"ind_3fp", "يُشَئِّمْنَ"},
{"ind_3fs", "تُشَئِّمُ"},
{"ind_3md", "يُشَئِّمَانِ"},
{"ind_3mp", "يُشَئِّمُونَ"},
{"ind_3ms", "يُشَئِّمُ"},
{"past_1p", "شَأَّمْنَا"},
{"past_1s", "شَأَّمْتُ"},
{"past_2d", "شَأَّمْتُمَا"},
{"past_2fp", "شَأَّمْتُنَّ"},
{"past_2fs", "شَأَّمْتِ"},
{"past_2mp", "شَأَّمْتُمْ"},
{"past_2ms", "شَأَّمْتَ"},
{"past_3fd", "شَأَّمَتَا"},
{"past_3fp", "شَأَّمْنَ"},
{"past_3fs", "شَأَّمَتْ"},
{"past_3md", "شَأَّمَا"},
{"past_3mp", "شَأَّمُوا"},
{"past_3ms", "شَأَّمَ"},
},
},
{
label = "جَزَّأَ (p.265)", root = "جزأ", wazn = "فعّل",
forms = {
{"imp_2d", "جَزِّئَا"},
{"imp_2fp", "جَزِّئْنَ"},
{"imp_2fs", "جَزِّئِي"},
{"imp_2mp", "جَزِّئُوا"},
{"imp_2ms", "جَزِّئْ"},
{"ind_1p", "نُجَزِّئُ"},
{"ind_1s", "أُجَزِّئُ"},
{"ind_2d", "تُجَزِّئَانِ"},
{"ind_2fp", "تُجَزِّئْنَ"},
{"ind_2fs", "تُجَزِّئِينَ"},
{"ind_2mp", "تُجَزِّئُونَ"},
{"ind_2ms", "تُجَزِّئُ"},
{"ind_3fd", "تُجَزِّئَانِ"},
{"ind_3fp", "يُجَزِّئْنَ"},
{"ind_3fs", "تُجَزِّئُ"},
{"ind_3md", "يُجَزِّئَانِ"},
{"ind_3mp", "يُجَزِّئُونَ"},
{"ind_3ms", "يُجَزِّئُ"},
{"past_1p", "جَزَّأْنَا"},
{"past_1s", "جَزَّأْتُ"},
{"past_2d", "جَزَّأْتُمَا"},
{"past_2fp", "جَزَّأْتُنَّ"},
{"past_2fs", "جَزَّأْتِ"},
{"past_2mp", "جَزَّأْتُمْ"},
{"past_2ms", "جَزَّأْتَ"},
{"past_3fd", "جَزَّأَتَا"},
{"past_3fp", "جَزَّأْنَ"},
{"past_3fs", "جَزَّأَتْ"},
{"past_3md", "جَزَّآ"},
{"past_3mp", "جَزَّؤُوا"},
{"past_3ms", "جَزَّأَ"},
},
},
{
label = "هَنَّأَ (p.265)", root = "هنأ", wazn = "فعّل",
forms = {
{"imp_2d", "هَنِّئَا"},
{"imp_2fp", "هَنِّئْنَ"},
{"imp_2fs", "هَنِّئِي"},
{"imp_2mp", "هَنِّئُوا"},
{"imp_2ms", "هَنِّئْ"},
{"ind_1p", "نُهَنِّئُ"},
{"ind_1s", "أُهَنِّئُ"},
{"ind_2d", "تُهَنِّئَانِ"},
{"ind_2fp", "تُهَنِّئْنَ"},
{"ind_2fs", "تُهَنِّئِينَ"},
{"ind_2mp", "تُهَنِّئُونَ"},
{"ind_2ms", "تُهَنِّئُ"},
{"ind_3fd", "تُهَنِّئَانِ"},
{"ind_3fp", "يُهَنِّئْنَ"},
{"ind_3fs", "تُهَنِّئُ"},
{"ind_3md", "يُهَنِّئَانِ"},
{"ind_3mp", "يُهَنِّئُونَ"},
{"ind_3ms", "يُهَنِّئُ"},
{"past_1p", "هَنَّأْنَا"},
{"past_1s", "هَنَّأْتُ"},
{"past_2d", "هَنَّأْتُمَا"},
{"past_2fp", "هَنَّأْتُنَّ"},
{"past_2fs", "هَنَّأْتِ"},
{"past_2mp", "هَنَّأْتُمْ"},
{"past_2ms", "هَنَّأْتَ"},
{"past_3fd", "هَنَّأَتَا"},
{"past_3fp", "هَنَّأْنَ"},
{"past_3fs", "هَنَّأَتْ"},
{"past_3md", "هَنَّآ"},
{"past_3mp", "هَنَّؤُوا"},
{"past_3ms", "هَنَّأَ"},
},
},
{
label = "وَدَّى (p.272)", root = "ودي", wazn = "فعّل",
forms = {
{"imp_2d", "وَدِّيَا"},
{"imp_2fp", "وَدِّينَ"},
{"imp_2fs", "وَدِّي"},
{"imp_2mp", "وَدُّوا"},
{"imp_2ms", "وَدِّ"},
{"ind_1p", "نُوَدِّي"},
{"ind_1s", "أُوَدِّي"},
{"ind_2d", "تُوَدِّيَانِ"},
{"ind_2fp", "تُوَدِّينَ"},
{"ind_2fs", "تُوَدِّينَ"},
{"ind_2mp", "تُوَدُّونَ"},
{"ind_2ms", "تُوَدِّي"},
{"ind_3fd", "تُوَدِّيَانِ"},
{"ind_3fp", "يُوَدِّينَ"},
{"ind_3fs", "تُوَدِّي"},
{"ind_3md", "يُوَدِّيَانِ"},
{"ind_3mp", "يُوَدُّونَ"},
{"ind_3ms", "يُوَدِّي"},
{"past_1p", "وَدَّيْنَا"},
{"past_1s", "وَدَّيْتُ"},
{"past_2d", "وَدَّيْتُمَا"},
{"past_2fp", "وَدَّيْتُنَّ"},
{"past_2fs", "وَدَّيْتِ"},
{"past_2mp", "وَدَّيْتُمْ"},
{"past_2ms", "وَدَّيْتَ"},
{"past_3fd", "وَدَّتَا"},
{"past_3fp", "وَدَّيْنَ"},
{"past_3fs", "وَدَّتْ"},
{"past_3md", "وَدَّيَا"},
{"past_3mp", "وَدَّوْا"},
{"past_3ms", "وَدَّى"},
},
},
{
label = "وَحَّى (p.272)", root = "وحي", wazn = "فعّل",
forms = {
{"imp_2d", "وَحِّيَا"},
{"imp_2fp", "وَحِّينَ"},
{"imp_2fs", "وَحِّي"},
{"imp_2mp", "وَحُّوا"},
{"imp_2ms", "وَحِّ"},
{"ind_1p", "نُوَحِّي"},
{"ind_1s", "أُوَحِّي"},
{"ind_2d", "تُوَحِّيَانِ"},
{"ind_2fp", "تُوَحِّينَ"},
{"ind_2fs", "تُوَحِّينَ"},
{"ind_2mp", "تُوَحُّونَ"},
{"ind_2ms", "تُوَحِّي"},
{"ind_3fd", "تُوَحِّيَانِ"},
{"ind_3fp", "يُوَحِّينَ"},
{"ind_3fs", "تُوَحِّي"},
{"ind_3md", "يُوَحِّيَانِ"},
{"ind_3mp", "يُوَحُّونَ"},
{"ind_3ms", "يُوَحِّي"},
{"past_1p", "وَحَّيْنَا"},
{"past_1s", "وَحَّيْتُ"},
{"past_2d", "وَحَّيْتُمَا"},
{"past_2fp", "وَحَّيْتُنَّ"},
{"past_2fs", "وَحَّيْتِ"},
{"past_2mp", "وَحَّيْتُمْ"},
{"past_2ms", "وَحَّيْتَ"},
{"past_3fd", "وَحَّتَا"},
{"past_3fp", "وَحَّيْنَ"},
{"past_3fs", "وَحَّتْ"},
{"past_3md", "وَحَّيَا"},
{"past_3mp", "وَحَّوْا"},
{"past_3ms", "وَحَّى"},
},
},
{
label = "تَجَرَّدَ (p.304)", root = "جرد", wazn = "تفعّل",
forms = {
{"imp_2d", "تَجَرَّدَا"},
{"imp_2fp", "تَجَرَّدْنَ"},
{"imp_2fs", "تَجَرَّدِي"},
{"imp_2mp", "تَجَرَّدُوا"},
{"imp_2ms", "تَجَرَّدْ"},
{"ind_1p", "نَتَجَرَّدُ"},
{"ind_1s", "أَتَجَرَّدُ"},
{"ind_2d", "تَتَجَرَّدَانِ"},
{"ind_2fp", "تَتَجَرَّدْنَ"},
{"ind_2fs", "تَتَجَرَّدِينَ"},
{"ind_2mp", "تَتَجَرَّدُونَ"},
{"ind_2ms", "تَتَجَرَّدُ"},
{"ind_3fd", "تَتَجَرَّدَانِ"},
{"ind_3fp", "يَتَجَرَّدْنَ"},
{"ind_3fs", "تَتَجَرَّدُ"},
{"ind_3md", "يَتَجَرَّدَانِ"},
{"ind_3mp", "يَتَجَرَّدُونَ"},
{"ind_3ms", "يَتَجَرَّدُ"},
{"past_1p", "تَجَرَّدْنَا"},
{"past_1s", "تَجَرَّدْتُ"},
{"past_2d", "تَجَرَّدْتُمَا"},
{"past_2fp", "تَجَرَّدْتُنَّ"},
{"past_2fs", "تَجَرَّدْتِ"},
{"past_2mp", "تَجَرَّدْتُمْ"},
{"past_2ms", "تَجَرَّدْتَ"},
{"past_3fd", "تَجَرَّدَتَا"},
{"past_3fp", "تَجَرَّدْنَ"},
{"past_3fs", "تَجَرَّدَتْ"},
{"past_3md", "تَجَرَّدَا"},
{"past_3mp", "تَجَرَّدُوا"},
{"past_3ms", "تَجَرَّدَ"},
},
},
{
label = "تَزَعَّمَ (p.304)", root = "زعم", wazn = "تفعّل",
forms = {
{"imp_2d", "تَزَعَّمَا"},
{"imp_2fp", "تَزَعَّمْنَ"},
{"imp_2fs", "تَزَعَّمِي"},
{"imp_2mp", "تَزَعَّمُوا"},
{"imp_2ms", "تَزَعَّمْ"},
{"ind_1p", "نَتَزَعَّمُ"},
{"ind_1s", "أَتَزَعَّمُ"},
{"ind_2d", "تَتَزَعَّمَانِ"},
{"ind_2fp", "تَتَزَعَّمْنَ"},
{"ind_2fs", "تَتَزَعَّمِينَ"},
{"ind_2mp", "تَتَزَعَّمُونَ"},
{"ind_2ms", "تَتَزَعَّمُ"},
{"ind_3fd", "تَتَزَعَّمَانِ"},
{"ind_3fp", "يَتَزَعَّمْنَ"},
{"ind_3fs", "تَتَزَعَّمُ"},
{"ind_3md", "يَتَزَعَّمَانِ"},
{"ind_3mp", "يَتَزَعَّمُونَ"},
{"ind_3ms", "يَتَزَعَّمُ"},
{"past_1p", "تَزَعَّمْنَا"},
{"past_1s", "تَزَعَّمْتُ"},
{"past_2d", "تَزَعَّمْتُمَا"},
{"past_2fp", "تَزَعَّمْتُنَّ"},
{"past_2fs", "تَزَعَّمْتِ"},
{"past_2mp", "تَزَعَّمْتُمْ"},
{"past_2ms", "تَزَعَّمْتَ"},
{"past_3fd", "تَزَعَّمَتَا"},
{"past_3fp", "تَزَعَّمْنَ"},
{"past_3fs", "تَزَعَّمَتْ"},
{"past_3md", "تَزَعَّمَا"},
{"past_3mp", "تَزَعَّمُوا"},
{"past_3ms", "تَزَعَّمَ"},
},
},
{
label = "تَخَفَّفَ (p.306)", root = "خفف", wazn = "تفعّل",
forms = {
{"imp_2d", "تَخَفَّفَا"},
{"imp_2fp", "تَخَفَّفْنَ"},
{"imp_2fs", "تَخَفَّفِي"},
{"imp_2mp", "تَخَفَّفُوا"},
{"imp_2ms", "تَخَفَّفْ"},
{"ind_1p", "نَتَخَفَّفُ"},
{"ind_1s", "أَتَخَفَّفُ"},
{"ind_2d", "تَتَخَفَّفَانِ"},
{"ind_2fp", "تَتَخَفَّفْنَ"},
{"ind_2fs", "تَتَخَفَّفِينَ"},
{"ind_2mp", "تَتَخَفَّفُونَ"},
{"ind_2ms", "تَتَخَفَّفُ"},
{"ind_3fd", "تَتَخَفَّفَانِ"},
{"ind_3fp", "يَتَخَفَّفْنَ"},
{"ind_3fs", "تَتَخَفَّفُ"},
{"ind_3md", "يَتَخَفَّفَانِ"},
{"ind_3mp", "يَتَخَفَّفُونَ"},
{"ind_3ms", "يَتَخَفَّفُ"},
{"past_1p", "تَخَفَّفْنَا"},
{"past_1s", "تَخَفَّفْتُ"},
{"past_2d", "تَخَفَّفْتُمَا"},
{"past_2fp", "تَخَفَّفْتُنَّ"},
{"past_2fs", "تَخَفَّفْتِ"},
{"past_2mp", "تَخَفَّفْتُمْ"},
{"past_2ms", "تَخَفَّفْتَ"},
{"past_3fd", "تَخَفَّفَتَا"},
{"past_3fp", "تَخَفَّفْنَ"},
{"past_3fs", "تَخَفَّفَتْ"},
{"past_3md", "تَخَفَّفَا"},
{"past_3mp", "تَخَفَّفُوا"},
{"past_3ms", "تَخَفَّفَ"},
},
},
{
label = "تَحَدَّدَ (p.306)", root = "حدد", wazn = "تفعّل",
forms = {
{"imp_2d", "تَحَدَّدَا"},
{"imp_2fp", "تَحَدَّدْنَ"},
{"imp_2fs", "تَحَدَّدِي"},
{"imp_2mp", "تَحَدَّدُوا"},
{"imp_2ms", "تَحَدَّدْ"},
{"ind_1p", "نَتَحَدَّدُ"},
{"ind_1s", "أَتَحَدَّدُ"},
{"ind_2d", "تَتَحَدَّدَانِ"},
{"ind_2fp", "تَتَحَدَّدْنَ"},
{"ind_2fs", "تَتَحَدَّدِينَ"},
{"ind_2mp", "تَتَحَدَّدُونَ"},
{"ind_2ms", "تَتَحَدَّدُ"},
{"ind_3fd", "تَتَحَدَّدَانِ"},
{"ind_3fp", "يَتَحَدَّدْنَ"},
{"ind_3fs", "تَتَحَدَّدُ"},
{"ind_3md", "يَتَحَدَّدَانِ"},
{"ind_3mp", "يَتَحَدَّدُونَ"},
{"ind_3ms", "يَتَحَدَّدُ"},
{"past_1p", "تَحَدَّدْنَا"},
{"past_1s", "تَحَدَّدْتُ"},
{"past_2d", "تَحَدَّدْتُمَا"},
{"past_2fp", "تَحَدَّدْتُنَّ"},
{"past_2fs", "تَحَدَّدْتِ"},
{"past_2mp", "تَحَدَّدْتُمْ"},
{"past_2ms", "تَحَدَّدْتَ"},
{"past_3fd", "تَحَدَّدَتَا"},
{"past_3fp", "تَحَدَّدْنَ"},
{"past_3fs", "تَحَدَّدَتْ"},
{"past_3md", "تَحَدَّدَا"},
{"past_3mp", "تَحَدَّدُوا"},
{"past_3ms", "تَحَدَّدَ"},
},
},
{
label = "تَأَهَّلَ (p.307)", root = "أهل", wazn = "تفعّل",
forms = {
{"imp_2d", "تَأَهَّلَا"},
{"imp_2fp", "تَأَهَّلْنَ"},
{"imp_2fs", "تَأَهَّلِي"},
{"imp_2mp", "تَأَهَّلُوا"},
{"imp_2ms", "تَأَهَّلْ"},
{"ind_1p", "نَتَأَهَّلُ"},
{"ind_1s", "أَتَأَهَّلُ"},
{"ind_2d", "تَتَأَهَّلَانِ"},
{"ind_2fp", "تَتَأَهَّلْنَ"},
{"ind_2fs", "تَتَأَهَّلِينَ"},
{"ind_2mp", "تَتَأَهَّلُونَ"},
{"ind_2ms", "تَتَأَهَّلُ"},
{"ind_3fd", "تَتَأَهَّلَانِ"},
{"ind_3fp", "يَتَأَهَّلْنَ"},
{"ind_3fs", "تَتَأَهَّلُ"},
{"ind_3md", "يَتَأَهَّلَانِ"},
{"ind_3mp", "يَتَأَهَّلُونَ"},
{"ind_3ms", "يَتَأَهَّلُ"},
{"past_1p", "تَأَهَّلْنَا"},
{"past_1s", "تَأَهَّلْتُ"},
{"past_2d", "تَأَهَّلْتُمَا"},
{"past_2fp", "تَأَهَّلْتُنَّ"},
{"past_2fs", "تَأَهَّلْتِ"},
{"past_2mp", "تَأَهَّلْتُمْ"},
{"past_2ms", "تَأَهَّلْتَ"},
{"past_3fd", "تَأَهَّلَتَا"},
{"past_3fp", "تَأَهَّلْنَ"},
{"past_3fs", "تَأَهَّلَتْ"},
{"past_3md", "تَأَهَّلَا"},
{"past_3mp", "تَأَهَّلُوا"},
{"past_3ms", "تَأَهَّلَ"},
},
},
{
label = "تَأَبَّطَ (p.307)", root = "أبط", wazn = "تفعّل",
forms = {
{"imp_2d", "تَأَبَّطَا"},
{"imp_2fp", "تَأَبَّطْنَ"},
{"imp_2fs", "تَأَبَّطِي"},
{"imp_2mp", "تَأَبَّطُوا"},
{"imp_2ms", "تَأَبَّطْ"},
{"ind_1p", "نَتَأَبَّطُ"},
{"ind_1s", "أَتَأَبَّطُ"},
{"ind_2d", "تَتَأَبَّطَانِ"},
{"ind_2fp", "تَتَأَبَّطْنَ"},
{"ind_2fs", "تَتَأَبَّطِينَ"},
{"ind_2mp", "تَتَأَبَّطُونَ"},
{"ind_2ms", "تَتَأَبَّطُ"},
{"ind_3fd", "تَتَأَبَّطَانِ"},
{"ind_3fp", "يَتَأَبَّطْنَ"},
{"ind_3fs", "تَتَأَبَّطُ"},
{"ind_3md", "يَتَأَبَّطَانِ"},
{"ind_3mp", "يَتَأَبَّطُونَ"},
{"ind_3ms", "يَتَأَبَّطُ"},
{"past_1p", "تَأَبَّطْنَا"},
{"past_1s", "تَأَبَّطْتُ"},
{"past_2d", "تَأَبَّطْتُمَا"},
{"past_2fp", "تَأَبَّطْتُنَّ"},
{"past_2fs", "تَأَبَّطْتِ"},
{"past_2mp", "تَأَبَّطْتُمْ"},
{"past_2ms", "تَأَبَّطْتَ"},
{"past_3fd", "تَأَبَّطَتَا"},
{"past_3fp", "تَأَبَّطْنَ"},
{"past_3fs", "تَأَبَّطَتْ"},
{"past_3md", "تَأَبَّطَا"},
{"past_3mp", "تَأَبَّطُوا"},
{"past_3ms", "تَأَبَّطَ"},
},
},
{
label = "تَرَأَّفَ (p.308)", root = "رأف", wazn = "تفعّل",
forms = {
{"imp_2d", "تَرَأَّفَا"},
{"imp_2fp", "تَرَأَّفْنَ"},
{"imp_2fs", "تَرَأَّفِي"},
{"imp_2mp", "تَرَأَّفُوا"},
{"imp_2ms", "تَرَأَّفْ"},
{"ind_1p", "نَتَرَأَّفُ"},
{"ind_1s", "أَتَرَأَّفُ"},
{"ind_2d", "تَتَرَأَّفَانِ"},
{"ind_2fp", "تَتَرَأَّفْنَ"},
{"ind_2fs", "تَتَرَأَّفِينَ"},
{"ind_2mp", "تَتَرَأَّفُونَ"},
{"ind_2ms", "تَتَرَأَّفُ"},
{"ind_3fd", "تَتَرَأَّفَانِ"},
{"ind_3fp", "يَتَرَأَّفْنَ"},
{"ind_3fs", "تَتَرَأَّفُ"},
{"ind_3md", "يَتَرَأَّفَانِ"},
{"ind_3mp", "يَتَرَأَّفُونَ"},
{"ind_3ms", "يَتَرَأَّفُ"},
{"past_1p", "تَرَأَّفْنَا"},
{"past_1s", "تَرَأَّفْتُ"},
{"past_2d", "تَرَأَّفْتُمَا"},
{"past_2fp", "تَرَأَّفْتُنَّ"},
{"past_2fs", "تَرَأَّفْتِ"},
{"past_2mp", "تَرَأَّفْتُمْ"},
{"past_2ms", "تَرَأَّفْتَ"},
{"past_3fd", "تَرَأَّفَتَا"},
{"past_3fp", "تَرَأَّفْنَ"},
{"past_3fs", "تَرَأَّفَتْ"},
{"past_3md", "تَرَأَّفَا"},
{"past_3mp", "تَرَأَّفُوا"},
{"past_3ms", "تَرَأَّفَ"},
},
},
{
label = "تَذَأَّبَ (p.308)", root = "ذأب", wazn = "تفعّل",
forms = {
{"imp_2d", "تَذَأَّبَا"},
{"imp_2fp", "تَذَأَّبْنَ"},
{"imp_2fs", "تَذَأَّبِي"},
{"imp_2mp", "تَذَأَّبُوا"},
{"imp_2ms", "تَذَأَّبْ"},
{"ind_1p", "نَتَذَأَّبُ"},
{"ind_1s", "أَتَذَأَّبُ"},
{"ind_2d", "تَتَذَأَّبَانِ"},
{"ind_2fp", "تَتَذَأَّبْنَ"},
{"ind_2fs", "تَتَذَأَّبِينَ"},
{"ind_2mp", "تَتَذَأَّبُونَ"},
{"ind_2ms", "تَتَذَأَّبُ"},
{"ind_3fd", "تَتَذَأَّبَانِ"},
{"ind_3fp", "يَتَذَأَّبْنَ"},
{"ind_3fs", "تَتَذَأَّبُ"},
{"ind_3md", "يَتَذَأَّبَانِ"},
{"ind_3mp", "يَتَذَأَّبُونَ"},
{"ind_3ms", "يَتَذَأَّبُ"},
{"past_1p", "تَذَأَّبْنَا"},
{"past_1s", "تَذَأَّبْتُ"},
{"past_2d", "تَذَأَّبْتُمَا"},
{"past_2fp", "تَذَأَّبْتُنَّ"},
{"past_2fs", "تَذَأَّبْتِ"},
{"past_2mp", "تَذَأَّبْتُمْ"},
{"past_2ms", "تَذَأَّبْتَ"},
{"past_3fd", "تَذَأَّبَتَا"},
{"past_3fp", "تَذَأَّبْنَ"},
{"past_3fs", "تَذَأَّبَتْ"},
{"past_3md", "تَذَأَّبَا"},
{"past_3mp", "تَذَأَّبُوا"},
{"past_3ms", "تَذَأَّبَ"},
},
},
{
label = "تَبَرَّأَ (p.310)", root = "برأ", wazn = "تفعّل",
forms = {
{"imp_2d", "تَبَرَّآ"},
{"imp_2fp", "تَبَرَّأْنَ"},
{"imp_2fs", "تَبَرَّئِي"},
{"imp_2mp", "تَبَرَّؤُوا"},
{"imp_2ms", "تَبَرَّأْ"},
{"ind_1p", "نَتَبَرَّأُ"},
{"ind_1s", "أَتَبَرَّأُ"},
{"ind_2d", "تَتَبَرَّآنِ"},
{"ind_2fp", "تَتَبَرَّأْنَ"},
{"ind_2fs", "تَتَبَرَّئِينَ"},
{"ind_2mp", "تَتَبَرَّؤُونَ"},
{"ind_2ms", "تَتَبَرَّأُ"},
{"ind_3fd", "تَتَبَرَّآنِ"},
{"ind_3fp", "يَتَبَرَّأْنَ"},
{"ind_3fs", "تَتَبَرَّأُ"},
{"ind_3md", "يَتَبَرَّآنِ"},
{"ind_3mp", "يَتَبَرَّؤُونَ"},
{"ind_3ms", "يَتَبَرَّأُ"},
{"past_1p", "تَبَرَّأْنَا"},
{"past_1s", "تَبَرَّأْتُ"},
{"past_2d", "تَبَرَّأْتُمَا"},
{"past_2fp", "تَبَرَّأْتُنَّ"},
{"past_2fs", "تَبَرَّأْتِ"},
{"past_2mp", "تَبَرَّأْتُمْ"},
{"past_2ms", "تَبَرَّأْتَ"},
{"past_3fd", "تَبَرَّأَتَا"},
{"past_3fp", "تَبَرَّأْنَ"},
{"past_3fs", "تَبَرَّأَتْ"},
{"past_3md", "تَبَرَّآ"},
{"past_3mp", "تَبَرَّؤُوا"},
{"past_3ms", "تَبَرَّأَ"},
},
},
{
label = "تَنَشَّأَ (p.310)", root = "نشأ", wazn = "تفعّل",
forms = {
{"imp_2d", "تَنَشَّآ"},
{"imp_2fp", "تَنَشَّأْنَ"},
{"imp_2fs", "تَنَشَّئِي"},
{"imp_2mp", "تَنَشَّؤُوا"},
{"imp_2ms", "تَنَشَّأْ"},
{"ind_1p", "نَتَنَشَّأُ"},
{"ind_1s", "أَتَنَشَّأُ"},
{"ind_2d", "تَتَنَشَّآنِ"},
{"ind_2fp", "تَتَنَشَّأْنَ"},
{"ind_2fs", "تَتَنَشَّئِينَ"},
{"ind_2mp", "تَتَنَشَّؤُونَ"},
{"ind_2ms", "تَتَنَشَّأُ"},
{"ind_3fd", "تَتَنَشَّآنِ"},
{"ind_3fp", "يَتَنَشَّأْنَ"},
{"ind_3fs", "تَتَنَشَّأُ"},
{"ind_3md", "يَتَنَشَّآنِ"},
{"ind_3mp", "يَتَنَشَّؤُونَ"},
{"ind_3ms", "يَتَنَشَّأُ"},
{"past_1p", "تَنَشَّأْنَا"},
{"past_1s", "تَنَشَّأْتُ"},
{"past_2d", "تَنَشَّأْتُمَا"},
{"past_2fp", "تَنَشَّأْتُنَّ"},
{"past_2fs", "تَنَشَّأْتِ"},
{"past_2mp", "تَنَشَّأْتُمْ"},
{"past_2ms", "تَنَشَّأْتَ"},
{"past_3fd", "تَنَشَّأَتَا"},
{"past_3fp", "تَنَشَّأْنَ"},
{"past_3fs", "تَنَشَّأَتْ"},
{"past_3md", "تَنَشَّآ"},
{"past_3mp", "تَنَشَّؤُوا"},
{"past_3ms", "تَنَشَّأَ"},
},
},
{
label = "تَوَجَّهَ (p.311)", root = "وجه", wazn = "تفعّل",
forms = {
{"imp_2d", "تَوَجَّهَا"},
{"imp_2fp", "تَوَجَّهْنَ"},
{"imp_2fs", "تَوَجَّهِي"},
{"imp_2mp", "تَوَجَّهُوا"},
{"imp_2ms", "تَوَجَّهْ"},
{"ind_1p", "نَتَوَجَّهُ"},
{"ind_1s", "أَتَوَجَّهُ"},
{"ind_2d", "تَتَوَجَّهَانِ"},
{"ind_2fp", "تَتَوَجَّهْنَ"},
{"ind_2fs", "تَتَوَجَّهِينَ"},
{"ind_2mp", "تَتَوَجَّهُونَ"},
{"ind_2ms", "تَتَوَجَّهُ"},
{"ind_3fd", "تَتَوَجَّهَانِ"},
{"ind_3fp", "يَتَوَجَّهْنَ"},
{"ind_3fs", "تَتَوَجَّهُ"},
{"ind_3md", "يَتَوَجَّهَانِ"},
{"ind_3mp", "يَتَوَجَّهُونَ"},
{"ind_3ms", "يَتَوَجَّهُ"},
{"past_1p", "تَوَجَّهْنَا"},
{"past_1s", "تَوَجَّهْتُ"},
{"past_2d", "تَوَجَّهْتُمَا"},
{"past_2fp", "تَوَجَّهْتُنَّ"},
{"past_2fs", "تَوَجَّهْتِ"},
{"past_2mp", "تَوَجَّهْتُمْ"},
{"past_2ms", "تَوَجَّهْتَ"},
{"past_3fd", "تَوَجَّهَتَا"},
{"past_3fp", "تَوَجَّهْنَ"},
{"past_3fs", "تَوَجَّهَتْ"},
{"past_3md", "تَوَجَّهَا"},
{"past_3mp", "تَوَجَّهُوا"},
{"past_3ms", "تَوَجَّهَ"},
},
},
{
label = "تَيَتَّمَ (p.311)", root = "يتم", wazn = "تفعّل",
forms = {
{"imp_2d", "تَيَتَّمَا"},
{"imp_2fp", "تَيَتَّمْنَ"},
{"imp_2fs", "تَيَتَّمِي"},
{"imp_2mp", "تَيَتَّمُوا"},
{"imp_2ms", "تَيَتَّمْ"},
{"ind_1p", "نَتَيَتَّمُ"},
{"ind_1s", "أَتَيَتَّمُ"},
{"ind_2d", "تَتَيَتَّمَانِ"},
{"ind_2fp", "تَتَيَتَّمْنَ"},
{"ind_2fs", "تَتَيَتَّمِينَ"},
{"ind_2mp", "تَتَيَتَّمُونَ"},
{"ind_2ms", "تَتَيَتَّمُ"},
{"ind_3fd", "تَتَيَتَّمَانِ"},
{"ind_3fp", "يَتَيَتَّمْنَ"},
{"ind_3fs", "تَتَيَتَّمُ"},
{"ind_3md", "يَتَيَتَّمَانِ"},
{"ind_3mp", "يَتَيَتَّمُونَ"},
{"ind_3ms", "يَتَيَتَّمُ"},
{"past_1p", "تَيَتَّمْنَا"},
{"past_1s", "تَيَتَّمْتُ"},
{"past_2d", "تَيَتَّمْتُمَا"},
{"past_2fp", "تَيَتَّمْتُنَّ"},
{"past_2fs", "تَيَتَّمْتِ"},
{"past_2mp", "تَيَتَّمْتُمْ"},
{"past_2ms", "تَيَتَّمْتَ"},
{"past_3fd", "تَيَتَّمَتَا"},
{"past_3fp", "تَيَتَّمْنَ"},
{"past_3fs", "تَيَتَّمَتْ"},
{"past_3md", "تَيَتَّمَا"},
{"past_3mp", "تَيَتَّمُوا"},
{"past_3ms", "تَيَتَّمَ"},
},
},
{
label = "تَوَدَّدَ (p.312)", root = "ودد", wazn = "تفعّل",
forms = {
{"imp_2d", "تَوَدَّدَا"},
{"imp_2fp", "تَوَدَّدْنَ"},
{"imp_2fs", "تَوَدَّدِي"},
{"imp_2mp", "تَوَدَّدُوا"},
{"imp_2ms", "تَوَدَّدْ"},
{"ind_1p", "نَتَوَدَّدُ"},
{"ind_1s", "أَتَوَدَّدُ"},
{"ind_2d", "تَتَوَدَّدَانِ"},
{"ind_2fp", "تَتَوَدَّدْنَ"},
{"ind_2fs", "تَتَوَدَّدِينَ"},
{"ind_2mp", "تَتَوَدَّدُونَ"},
{"ind_2ms", "تَتَوَدَّدُ"},
{"ind_3fd", "تَتَوَدَّدَانِ"},
{"ind_3fp", "يَتَوَدَّدْنَ"},
{"ind_3fs", "تَتَوَدَّدُ"},
{"ind_3md", "يَتَوَدَّدَانِ"},
{"ind_3mp", "يَتَوَدَّدُونَ"},
{"ind_3ms", "يَتَوَدَّدُ"},
{"past_1p", "تَوَدَّدْنَا"},
{"past_1s", "تَوَدَّدْتُ"},
{"past_2d", "تَوَدَّدْتُمَا"},
{"past_2fp", "تَوَدَّدْتُنَّ"},
{"past_2fs", "تَوَدَّدْتِ"},
{"past_2mp", "تَوَدَّدْتُمْ"},
{"past_2ms", "تَوَدَّدْتَ"},
{"past_3fd", "تَوَدَّدَتَا"},
{"past_3fp", "تَوَدَّدْنَ"},
{"past_3fs", "تَوَدَّدَتْ"},
{"past_3md", "تَوَدَّدَا"},
{"past_3mp", "تَوَدَّدُوا"},
{"past_3ms", "تَوَدَّدَ"},
},
},
{
label = "تَيَمَّمَ (p.312)", root = "يمم", wazn = "تفعّل",
forms = {
{"imp_2d", "تَيَمَّمَا"},
{"imp_2fp", "تَيَمَّمْنَ"},
{"imp_2fs", "تَيَمَّمِي"},
{"imp_2mp", "تَيَمَّمُوا"},
{"imp_2ms", "تَيَمَّمْ"},
{"ind_1p", "نَتَيَمَّمُ"},
{"ind_1s", "أَتَيَمَّمُ"},
{"ind_2d", "تَتَيَمَّمَانِ"},
{"ind_2fp", "تَتَيَمَّمْنَ"},
{"ind_2fs", "تَتَيَمَّمِينَ"},
{"ind_2mp", "تَتَيَمَّمُونَ"},
{"ind_2ms", "تَتَيَمَّمُ"},
{"ind_3fd", "تَتَيَمَّمَانِ"},
{"ind_3fp", "يَتَيَمَّمْنَ"},
{"ind_3fs", "تَتَيَمَّمُ"},
{"ind_3md", "يَتَيَمَّمَانِ"},
{"ind_3mp", "يَتَيَمَّمُونَ"},
{"ind_3ms", "يَتَيَمَّمُ"},
{"past_1p", "تَيَمَّمْنَا"},
{"past_1s", "تَيَمَّمْتُ"},
{"past_2d", "تَيَمَّمْتُمَا"},
{"past_2fp", "تَيَمَّمْتُنَّ"},
{"past_2fs", "تَيَمَّمْتِ"},
{"past_2mp", "تَيَمَّمْتُمْ"},
{"past_2ms", "تَيَمَّمْتَ"},
{"past_3fd", "تَيَمَّمَتَا"},
{"past_3fp", "تَيَمَّمْنَ"},
{"past_3fs", "تَيَمَّمَتْ"},
{"past_3md", "تَيَمَّمَا"},
{"past_3mp", "تَيَمَّمُوا"},
{"past_3ms", "تَيَمَّمَ"},
},
},
{
label = "تَخَوَّفَ (p.313)", root = "خوف", wazn = "تفعّل",
forms = {
{"imp_2d", "تَخَوَّفَا"},
{"imp_2fp", "تَخَوَّفْنَ"},
{"imp_2fs", "تَخَوَّفِي"},
{"imp_2mp", "تَخَوَّفُوا"},
{"imp_2ms", "تَخَوَّفْ"},
{"ind_1p", "نَتَخَوَّفُ"},
{"ind_1s", "أَتَخَوَّفُ"},
{"ind_2d", "تَتَخَوَّفَانِ"},
{"ind_2fp", "تَتَخَوَّفْنَ"},
{"ind_2fs", "تَتَخَوَّفِينَ"},
{"ind_2mp", "تَتَخَوَّفُونَ"},
{"ind_2ms", "تَتَخَوَّفُ"},
{"ind_3fd", "تَتَخَوَّفَانِ"},
{"ind_3fp", "يَتَخَوَّفْنَ"},
{"ind_3fs", "تَتَخَوَّفُ"},
{"ind_3md", "يَتَخَوَّفَانِ"},
{"ind_3mp", "يَتَخَوَّفُونَ"},
{"ind_3ms", "يَتَخَوَّفُ"},
{"past_1p", "تَخَوَّفْنَا"},
{"past_1s", "تَخَوَّفْتُ"},
{"past_2d", "تَخَوَّفْتُمَا"},
{"past_2fp", "تَخَوَّفْتُنَّ"},
{"past_2fs", "تَخَوَّفْتِ"},
{"past_2mp", "تَخَوَّفْتُمْ"},
{"past_2ms", "تَخَوَّفْتَ"},
{"past_3fd", "تَخَوَّفَتَا"},
{"past_3fp", "تَخَوَّفْنَ"},
{"past_3fs", "تَخَوَّفَتْ"},
{"past_3md", "تَخَوَّفَا"},
{"past_3mp", "تَخَوَّفُوا"},
{"past_3ms", "تَخَوَّفَ"},
},
},
{
label = "تَمَيَّزَ (p.313)", root = "ميز", wazn = "تفعّل",
forms = {
{"imp_2d", "تَمَيَّزَا"},
{"imp_2fp", "تَمَيَّزْنَ"},
{"imp_2fs", "تَمَيَّزِي"},
{"imp_2mp", "تَمَيَّزُوا"},
{"imp_2ms", "تَمَيَّزْ"},
{"ind_1p", "نَتَمَيَّزُ"},
{"ind_1s", "أَتَمَيَّزُ"},
{"ind_2d", "تَتَمَيَّزَانِ"},
{"ind_2fp", "تَتَمَيَّزْنَ"},
{"ind_2fs", "تَتَمَيَّزِينَ"},
{"ind_2mp", "تَتَمَيَّزُونَ"},
{"ind_2ms", "تَتَمَيَّزُ"},
{"ind_3fd", "تَتَمَيَّزَانِ"},
{"ind_3fp", "يَتَمَيَّزْنَ"},
{"ind_3fs", "تَتَمَيَّزُ"},
{"ind_3md", "يَتَمَيَّزَانِ"},
{"ind_3mp", "يَتَمَيَّزُونَ"},
{"ind_3ms", "يَتَمَيَّزُ"},
{"past_1p", "تَمَيَّزْنَا"},
{"past_1s", "تَمَيَّزْتُ"},
{"past_2d", "تَمَيَّزْتُمَا"},
{"past_2fp", "تَمَيَّزْتُنَّ"},
{"past_2fs", "تَمَيَّزْتِ"},
{"past_2mp", "تَمَيَّزْتُمْ"},
{"past_2ms", "تَمَيَّزْتَ"},
{"past_3fd", "تَمَيَّزَتَا"},
{"past_3fp", "تَمَيَّزْنَ"},
{"past_3fs", "تَمَيَّزَتْ"},
{"past_3md", "تَمَيَّزَا"},
{"past_3mp", "تَمَيَّزُوا"},
{"past_3ms", "تَمَيَّزَ"},
},
},
{
label = "تَأَوَّهَ (p.314)", root = "أوه", wazn = "تفعّل",
forms = {
{"imp_2d", "تَأَوَّهَا"},
{"imp_2fp", "تَأَوَّهْنَ"},
{"imp_2fs", "تَأَوَّهِي"},
{"imp_2mp", "تَأَوَّهُوا"},
{"imp_2ms", "تَأَوَّهْ"},
{"ind_1p", "نَتَأَوَّهُ"},
{"ind_1s", "أَتَأَوَّهُ"},
{"ind_2d", "تَتَأَوَّهَانِ"},
{"ind_2fp", "تَتَأَوَّهْنَ"},
{"ind_2fs", "تَتَأَوَّهِينَ"},
{"ind_2mp", "تَتَأَوَّهُونَ"},
{"ind_2ms", "تَتَأَوَّهُ"},
{"ind_3fd", "تَتَأَوَّهَانِ"},
{"ind_3fp", "يَتَأَوَّهْنَ"},
{"ind_3fs", "تَتَأَوَّهُ"},
{"ind_3md", "يَتَأَوَّهَانِ"},
{"ind_3mp", "يَتَأَوَّهُونَ"},
{"ind_3ms", "يَتَأَوَّهُ"},
{"past_1p", "تَأَوَّهْنَا"},
{"past_1s", "تَأَوَّهْتُ"},
{"past_2d", "تَأَوَّهْتُمَا"},
{"past_2fp", "تَأَوَّهْتُنَّ"},
{"past_2fs", "تَأَوَّهْتِ"},
{"past_2mp", "تَأَوَّهْتُمْ"},
{"past_2ms", "تَأَوَّهْتَ"},
{"past_3fd", "تَأَوَّهَتَا"},
{"past_3fp", "تَأَوَّهْنَ"},
{"past_3fs", "تَأَوَّهَتْ"},
{"past_3md", "تَأَوَّهَا"},
{"past_3mp", "تَأَوَّهُوا"},
{"past_3ms", "تَأَوَّهَ"},
},
},
}
kzbmab5jc1lt97akjdxsp9ho5yjhcqd
وحدة:ar-verb/testcases/4
828
241795
1159011
1158879
2026-09-10T12:39:20Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159011
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 4 من 15. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/4")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_4()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
jfxasaj3hi3wbzklaj1aj2k5d7ell27
1159069
1159011
2026-09-10T19:33:53Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159069
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 4 من 16. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/4")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_4()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
qj0zw0burb8f0anidkbu3mlj9oyk8ct
وحدة:ar-verb/testcases/بيانات/5
828
241796
1159013
1158881
2026-09-10T12:39:23Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159013
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 5 من 15.
return {
{
label = "تَهَيَّأَ (p.314)", root = "هيأ", wazn = "تفعّل",
forms = {
{"imp_2d", "تَهَيَّآ"},
{"imp_2fp", "تَهَيَّأْنَ"},
{"imp_2fs", "تَهَيَّئِي"},
{"imp_2mp", "تَهَيَّؤُوا"},
{"imp_2ms", "تَهَيَّأْ"},
{"ind_1p", "نَتَهَيَّأُ"},
{"ind_1s", "أَتَهَيَّأُ"},
{"ind_2d", "تَتَهَيَّآنِ"},
{"ind_2fp", "تَتَهَيَّأْنَ"},
{"ind_2fs", "تَتَهَيَّئِينَ"},
{"ind_2mp", "تَتَهَيَّؤُونَ"},
{"ind_2ms", "تَتَهَيَّأُ"},
{"ind_3fd", "تَتَهَيَّآنِ"},
{"ind_3fp", "يَتَهَيَّأْنَ"},
{"ind_3fs", "تَتَهَيَّأُ"},
{"ind_3md", "يَتَهَيَّآنِ"},
{"ind_3mp", "يَتَهَيَّؤُونَ"},
{"ind_3ms", "يَتَهَيَّأُ"},
{"past_1p", "تَهَيَّأْنَا"},
{"past_1s", "تَهَيَّأْتُ"},
{"past_2d", "تَهَيَّأْتُمَا"},
{"past_2fp", "تَهَيَّأْتُنَّ"},
{"past_2fs", "تَهَيَّأْتِ"},
{"past_2mp", "تَهَيَّأْتُمْ"},
{"past_2ms", "تَهَيَّأْتَ"},
{"past_3fd", "تَهَيَّأَتَا"},
{"past_3fp", "تَهَيَّأْنَ"},
{"past_3fs", "تَهَيَّأَتْ"},
{"past_3md", "تَهَيَّآ"},
{"past_3mp", "تَهَيَّؤُوا"},
{"past_3ms", "تَهَيَّأَ"},
},
},
{
label = "اِطَّوَّقَ (p.315، تفعّل مدغم)", root = "طوق", wazn = "تفعّل",
reduced = true,
forms = {
{"imp_2d", "اِطَّوَّقَا"},
{"imp_2fp", "اِطَّوَّقْنَ"},
{"imp_2fs", "اِطَّوَّقِي"},
{"imp_2mp", "اِطَّوَّقُوا"},
{"imp_2ms", "اِطَّوَّقْ"},
{"ind_1p", "نَطَّوَّقُ"},
{"ind_1s", "أَطَّوَّقُ"},
{"ind_2d", "تَطَّوَّقَانِ"},
{"ind_2fp", "تَطَّوَّقْنَ"},
{"ind_2fs", "تَطَّوَّقِينَ"},
{"ind_2mp", "تَطَّوَّقُونَ"},
{"ind_2ms", "تَطَّوَّقُ"},
{"ind_3fd", "تَطَّوَّقَانِ"},
{"ind_3fp", "يَطَّوَّقْنَ"},
{"ind_3fs", "تَطَّوَّقُ"},
{"ind_3md", "يَطَّوَّقَانِ"},
{"ind_3mp", "يَطَّوَّقُونَ"},
{"ind_3ms", "يَطَّوَّقُ"},
{"past_1p", "اِطَّوَّقْنَا"},
{"past_1s", "اِطَّوَّقْتُ"},
{"past_2d", "اِطَّوَّقْتُمَا"},
{"past_2fp", "اِطَّوَّقْتُنَّ"},
{"past_2fs", "اِطَّوَّقْتِ"},
{"past_2mp", "اِطَّوَّقْتُمْ"},
{"past_2ms", "اِطَّوَّقْتَ"},
{"past_3fd", "اِطَّوَّقَتَا"},
{"past_3fp", "اِطَّوَّقْنَ"},
{"past_3fs", "اِطَّوَّقَتْ"},
{"past_3md", "اِطَّوَّقَا"},
{"past_3mp", "اِطَّوَّقُوا"},
{"past_3ms", "اِطَّوَّقَ"},
},
},
{
label = "اِطَّيَّرَ (p.315، تفعّل مدغم)", root = "طير", wazn = "تفعّل",
reduced = true,
forms = {
{"imp_2d", "اِطَّيَّرَا"},
{"imp_2fp", "اِطَّيَّرْنَ"},
{"imp_2fs", "اِطَّيَّرِي"},
{"imp_2mp", "اِطَّيَّرُوا"},
{"imp_2ms", "اِطَّيَّرْ"},
{"ind_1p", "نَطَّيَّرُ"},
{"ind_1s", "أَطَّيَّرُ"},
{"ind_2d", "تَطَّيَّرَانِ"},
{"ind_2fp", "تَطَّيَّرْنَ"},
{"ind_2fs", "تَطَّيَّرِينَ"},
{"ind_2mp", "تَطَّيَّرُونَ"},
{"ind_2ms", "تَطَّيَّرُ"},
{"ind_3fd", "تَطَّيَّرَانِ"},
{"ind_3fp", "يَطَّيَّرْنَ"},
{"ind_3fs", "تَطَّيَّرُ"},
{"ind_3md", "يَطَّيَّرَانِ"},
{"ind_3mp", "يَطَّيَّرُونَ"},
{"ind_3ms", "يَطَّيَّرُ"},
{"past_1p", "اِطَّيَّرْنَا"},
{"past_1s", "اِطَّيَّرْتُ"},
{"past_2d", "اِطَّيَّرْتُمَا"},
{"past_2fp", "اِطَّيَّرْتُنَّ"},
{"past_2fs", "اِطَّيَّرْتِ"},
{"past_2mp", "اِطَّيَّرْتُمْ"},
{"past_2ms", "اِطَّيَّرْتَ"},
{"past_3fd", "اِطَّيَّرَتَا"},
{"past_3fp", "اِطَّيَّرْنَ"},
{"past_3fs", "اِطَّيَّرَتْ"},
{"past_3md", "اِطَّيَّرَا"},
{"past_3mp", "اِطَّيَّرُوا"},
{"past_3ms", "اِطَّيَّرَ"},
},
},
{
label = "دَخَلَ ـُ (p145، صحيح سالم)", root = "دخل", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "اُدْخُلَا"},
{"imp_2fp", "اُدْخُلْنَ"},
{"imp_2fs", "اُدْخُلِي"},
{"imp_2mp", "اُدْخُلُوا"},
{"imp_2ms", "اُدْخُلْ"},
{"ind_1p", "نَدْخُلُ"},
{"ind_1s", "أَدْخُلُ"},
{"ind_2d", "تَدْخُلَانِ"},
{"ind_2fp", "تَدْخُلْنَ"},
{"ind_2fs", "تَدْخُلِينَ"},
{"ind_2mp", "تَدْخُلُونَ"},
{"ind_2ms", "تَدْخُلُ"},
{"ind_3fd", "تَدْخُلَانِ"},
{"ind_3fp", "يَدْخُلْنَ"},
{"ind_3fs", "تَدْخُلُ"},
{"ind_3md", "يَدْخُلَانِ"},
{"ind_3mp", "يَدْخُلُونَ"},
{"ind_3ms", "يَدْخُلُ"},
{"past_1p", "دَخَلْنَا"},
{"past_1s", "دَخَلْتُ"},
{"past_2d", "دَخَلْتُمَا"},
{"past_2fp", "دَخَلْتُنَّ"},
{"past_2fs", "دَخَلْتِ"},
{"past_2mp", "دَخَلْتُمْ"},
{"past_2ms", "دَخَلْتَ"},
{"past_3fd", "دَخَلَتَا"},
{"past_3fp", "دَخَلْنَ"},
{"past_3fs", "دَخَلَتْ"},
{"past_3md", "دَخَلَا"},
{"past_3mp", "دَخَلُوا"},
{"past_3ms", "دَخَلَ"},
},
},
{
label = "سَقَطَ ـُ (p145، صحيح سالم)", root = "سقط", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "اُسْقُطَا"},
{"imp_2fp", "اُسْقُطْنَ"},
{"imp_2fs", "اُسْقُطِي"},
{"imp_2mp", "اُسْقُطُوا"},
{"imp_2ms", "اُسْقُطْ"},
{"ind_1p", "نَسْقُطُ"},
{"ind_1s", "أَسْقُطُ"},
{"ind_2d", "تَسْقُطَانِ"},
{"ind_2fp", "تَسْقُطْنَ"},
{"ind_2fs", "تَسْقُطِينَ"},
{"ind_2mp", "تَسْقُطُونَ"},
{"ind_2ms", "تَسْقُطُ"},
{"ind_3fd", "تَسْقُطَانِ"},
{"ind_3fp", "يَسْقُطْنَ"},
{"ind_3fs", "تَسْقُطُ"},
{"ind_3md", "يَسْقُطَانِ"},
{"ind_3mp", "يَسْقُطُونَ"},
{"ind_3ms", "يَسْقُطُ"},
{"past_1p", "سَقَطْنَا"},
{"past_1s", "سَقَطْتُ"},
{"past_2d", "سَقَطْتُمَا"},
{"past_2fp", "سَقَطْتُنَّ"},
{"past_2fs", "سَقَطْتِ"},
{"past_2mp", "سَقَطْتُمْ"},
{"past_2ms", "سَقَطْتَ"},
{"past_3fd", "سَقَطَتَا"},
{"past_3fp", "سَقَطْنَ"},
{"past_3fs", "سَقَطَتْ"},
{"past_3md", "سَقَطَا"},
{"past_3mp", "سَقَطُوا"},
{"past_3ms", "سَقَطَ"},
},
},
{
label = "شَقَّ ـُ (p147، مضاعف)", root = "شقق", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "شُقَّا"},
{"imp_2fp", "اُشْقُقْنَ"},
{"imp_2fs", "شُقِّي"},
{"imp_2mp", "شُقُّوا"},
{"imp_2ms", "شُقَّ"},
{"ind_1p", "نَشُقُّ"},
{"ind_1s", "أَشُقُّ"},
{"ind_2d", "تَشُقَّانِ"},
{"ind_2fp", "تَشْقُقْنَ"},
{"ind_2fs", "تَشُقِّينَ"},
{"ind_2mp", "تَشُقُّونَ"},
{"ind_2ms", "تَشُقُّ"},
{"ind_3fd", "تَشُقَّانِ"},
{"ind_3fp", "يَشْقُقْنَ"},
{"ind_3fs", "تَشُقُّ"},
{"ind_3md", "يَشُقَّانِ"},
{"ind_3mp", "يَشُقُّونَ"},
{"ind_3ms", "يَشُقُّ"},
{"past_1p", "شَقَقْنَا"},
{"past_1s", "شَقَقْتُ"},
{"past_2d", "شَقَقْتُمَا"},
{"past_2fp", "شَقَقْتُنَّ"},
{"past_2fs", "شَقَقْتِ"},
{"past_2mp", "شَقَقْتُمْ"},
{"past_2ms", "شَقَقْتَ"},
{"past_3fd", "شَقَّتَا"},
{"past_3fp", "شَقَقْنَ"},
{"past_3fs", "شَقَّتْ"},
{"past_3md", "شَقَّا"},
{"past_3mp", "شَقُّوا"},
{"past_3ms", "شَقَّ"},
},
},
{
label = "ظَنَّ ـُ (p147، مضاعف)", root = "ظنن", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "ظُنَّا"},
{"imp_2fp", "اُظْنُنَّ"},
{"imp_2fs", "ظُنِّي"},
{"imp_2mp", "ظُنُّوا"},
{"imp_2ms", "ظُنَّ"},
{"ind_1p", "نَظُنُّ"},
{"ind_1s", "أَظُنُّ"},
{"ind_2d", "تَظُنَّانِ"},
{"ind_2fp", "تَظْنُنَّ"},
{"ind_2fs", "تَظُنِّينَ"},
{"ind_2mp", "تَظُنُّونَ"},
{"ind_2ms", "تَظُنُّ"},
{"ind_3fd", "تَظُنَّانِ"},
{"ind_3fp", "يَظْنُنَّ"},
{"ind_3fs", "تَظُنُّ"},
{"ind_3md", "يَظُنَّانِ"},
{"ind_3mp", "يَظُنُّونَ"},
{"ind_3ms", "يَظُنُّ"},
{"past_1p", "ظَنَنَّا"},
{"past_1s", "ظَنَنْتُ"},
{"past_2d", "ظَنَنْتُمَا"},
{"past_2fp", "ظَنَنْتُنَّ"},
{"past_2fs", "ظَنَنْتِ"},
{"past_2mp", "ظَنَنْتُمْ"},
{"past_2ms", "ظَنَنْتَ"},
{"past_3fd", "ظَنَّتَا"},
{"past_3fp", "ظَنَنَّ"},
{"past_3fs", "ظَنَّتْ"},
{"past_3md", "ظَنَّا"},
{"past_3mp", "ظَنُّوا"},
{"past_3ms", "ظَنَّ"},
},
},
{
label = "أَخَذَ ـُ (p151، مهموز الفاء)", root = "أخذ", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "خُذَا"},
{"imp_2fp", "خُذْنَ"},
{"imp_2fs", "خُذِي"},
{"imp_2mp", "خُذُوا"},
{"imp_2ms", "خُذْ"},
{"ind_1p", "نَأْخُذُ"},
{"ind_1s", "آخُذُ"},
{"ind_2d", "تَأْخُذَانِ"},
{"ind_2fp", "تَأْخُذْنَ"},
{"ind_2fs", "تَأْخُذِينَ"},
{"ind_2mp", "تَأْخُذُونَ"},
{"ind_2ms", "تَأْخُذُ"},
{"ind_3fd", "تَأْخُذَانِ"},
{"ind_3fp", "يَأْخُذْنَ"},
{"ind_3fs", "تَأْخُذُ"},
{"ind_3md", "يَأْخُذَانِ"},
{"ind_3mp", "يَأْخُذُونَ"},
{"ind_3ms", "يَأْخُذُ"},
{"past_1p", "أَخَذْنَا"},
{"past_1s", "أَخَذْتُ"},
{"past_2d", "أَخَذْتُمَا"},
{"past_2fp", "أَخَذْتُنَّ"},
{"past_2fs", "أَخَذْتِ"},
{"past_2mp", "أَخَذْتُمْ"},
{"past_2ms", "أَخَذْتَ"},
{"past_3fd", "أَخَذَتَا"},
{"past_3fp", "أَخَذْنَ"},
{"past_3fs", "أَخَذَتْ"},
{"past_3md", "أَخَذَا"},
{"past_3mp", "أَخَذُوا"},
{"past_3ms", "أَخَذَ"},
},
},
{
label = "أَمَرَ ـُ (p151، مهموز الفاء)", root = "أمر", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "مُرَا"},
{"imp_2fp", "مُرْنَ"},
{"imp_2fs", "مُرِي"},
{"imp_2mp", "مُرُوا"},
{"imp_2ms", "مُرْ"},
{"ind_1p", "نَأْمُرُ"},
{"ind_1s", "آمُرُ"},
{"ind_2d", "تَأْمُرَانِ"},
{"ind_2fp", "تَأْمُرْنَ"},
{"ind_2fs", "تَأْمُرِينَ"},
{"ind_2mp", "تَأْمُرُونَ"},
{"ind_2ms", "تَأْمُرُ"},
{"ind_3fd", "تَأْمُرَانِ"},
{"ind_3fp", "يَأْمُرْنَ"},
{"ind_3fs", "تَأْمُرُ"},
{"ind_3md", "يَأْمُرَانِ"},
{"ind_3mp", "يَأْمُرُونَ"},
{"ind_3ms", "يَأْمُرُ"},
{"past_1p", "أَمَرْنَا"},
{"past_1s", "أَمَرْتُ"},
{"past_2d", "أَمَرْتُمَا"},
{"past_2fp", "أَمَرْتُنَّ"},
{"past_2fs", "أَمَرْتِ"},
{"past_2mp", "أَمَرْتُمْ"},
{"past_2ms", "أَمَرْتَ"},
{"past_3fd", "أَمَرَتَا"},
{"past_3fp", "أَمَرْنَ"},
{"past_3fs", "أَمَرَتْ"},
{"past_3md", "أَمَرَا"},
{"past_3mp", "أَمَرُوا"},
{"past_3ms", "أَمَرَ"},
},
},
{
label = "عادَ ـُ (p156، أجوف واوي)", root = "عود", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "عُودَا"},
{"imp_2fp", "عُدْنَ"},
{"imp_2fs", "عُودِي"},
{"imp_2mp", "عُودُوا"},
{"imp_2ms", "عُدْ"},
{"ind_1p", "نَعُودُ"},
{"ind_1s", "أَعُودُ"},
{"ind_2d", "تَعُودَانِ"},
{"ind_2fp", "تَعُدْنَ"},
{"ind_2fs", "تَعُودِينَ"},
{"ind_2mp", "تَعُودُونَ"},
{"ind_2ms", "تَعُودُ"},
{"ind_3fd", "تَعُودَانِ"},
{"ind_3fp", "يَعُدْنَ"},
{"ind_3fs", "تَعُودُ"},
{"ind_3md", "يَعُودَانِ"},
{"ind_3mp", "يَعُودُونَ"},
{"ind_3ms", "يَعُودُ"},
{"past_1p", "عُدْنَا"},
{"past_1s", "عُدْتُ"},
{"past_2d", "عُدْتُمَا"},
{"past_2fp", "عُدْتُنَّ"},
{"past_2fs", "عُدْتِ"},
{"past_2mp", "عُدْتُمْ"},
{"past_2ms", "عُدْتَ"},
{"past_3fd", "عَادَتَا"},
{"past_3fp", "عُدْنَ"},
{"past_3fs", "عَادَتْ"},
{"past_3md", "عَادَا"},
{"past_3mp", "عَادُوا"},
{"past_3ms", "عَادَ"},
},
},
{
label = "كانَ ـُ (p156، أجوف واوي)", root = "كون", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "كُونَا"},
{"imp_2fp", "كُنَّ"},
{"imp_2fs", "كُونِي"},
{"imp_2mp", "كُونُوا"},
{"imp_2ms", "كُنْ"},
{"ind_1p", "نَكُونُ"},
{"ind_1s", "أَكُونُ"},
{"ind_2d", "تَكُونَانِ"},
{"ind_2fp", "تَكُنَّ"},
{"ind_2fs", "تَكُونِينَ"},
{"ind_2mp", "تَكُونُونَ"},
{"ind_2ms", "تَكُونُ"},
{"ind_3fd", "تَكُونَانِ"},
{"ind_3fp", "يَكُنَّ"},
{"ind_3fs", "تَكُونُ"},
{"ind_3md", "يَكُونَانِ"},
{"ind_3mp", "يَكُونُونَ"},
{"ind_3ms", "يَكُونُ"},
{"past_1p", "كُنَّا"},
{"past_1s", "كُنْتُ"},
{"past_2d", "كُنْتُمَا"},
{"past_2fp", "كُنْتُنَّ"},
{"past_2fs", "كُنْتِ"},
{"past_2mp", "كُنْتُمْ"},
{"past_2ms", "كُنْتَ"},
{"past_3fd", "كَانَتَا"},
{"past_3fp", "كُنَّ"},
{"past_3fs", "كَانَتْ"},
{"past_3md", "كَانَا"},
{"past_3mp", "كَانُوا"},
{"past_3ms", "كَانَ"},
},
},
{
label = "عَلا ـُ (p159، ناقص واوي)", root = "علو", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "اُعْلُوَا"},
{"imp_2fp", "اُعْلُونَ"},
{"imp_2fs", "اُعْلِي"},
{"imp_2mp", "اُعْلُوا"},
{"imp_2ms", "اُعْلُ"},
{"ind_1p", "نَعْلُو"},
{"ind_1s", "أَعْلُو"},
{"ind_2d", "تَعْلُوَانِ"},
{"ind_2fp", "تَعْلُونَ"},
{"ind_2fs", "تَعْلِينَ"},
{"ind_2mp", "تَعْلُونَ"},
{"ind_2ms", "تَعْلُو"},
{"ind_3fd", "تَعْلُوَانِ"},
{"ind_3fp", "يَعْلُونَ"},
{"ind_3fs", "تَعْلُو"},
{"ind_3md", "يَعْلُوَانِ"},
{"ind_3mp", "يَعْلُونَ"},
{"ind_3ms", "يَعْلُو"},
{"past_1p", "عَلَوْنَا"},
{"past_1s", "عَلَوْتُ"},
{"past_2d", "عَلَوْتُمَا"},
{"past_2fp", "عَلَوْتُنَّ"},
{"past_2fs", "عَلَوْتِ"},
{"past_2mp", "عَلَوْتُمْ"},
{"past_2ms", "عَلَوْتَ"},
{"past_3fd", "عَلَتَا"},
{"past_3fp", "عَلَوْنَ"},
{"past_3fs", "عَلَتْ"},
{"past_3md", "عَلَوَا"},
{"past_3mp", "عَلَوْا"},
{"past_3ms", "عَلَا"},
},
},
{
label = "غَزا ـُ (p159، ناقص واوي)", root = "غزو", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "اُغْزُوَا"},
{"imp_2fp", "اُغْزُونَ"},
{"imp_2fs", "اُغْزِي"},
{"imp_2mp", "اُغْزُوا"},
{"imp_2ms", "اُغْزُ"},
{"ind_1p", "نَغْزُو"},
{"ind_1s", "أَغْزُو"},
{"ind_2d", "تَغْزُوَانِ"},
{"ind_2fp", "تَغْزُونَ"},
{"ind_2fs", "تَغْزِينَ"},
{"ind_2mp", "تَغْزُونَ"},
{"ind_2ms", "تَغْزُو"},
{"ind_3fd", "تَغْزُوَانِ"},
{"ind_3fp", "يَغْزُونَ"},
{"ind_3fs", "تَغْزُو"},
{"ind_3md", "يَغْزُوَانِ"},
{"ind_3mp", "يَغْزُونَ"},
{"ind_3ms", "يَغْزُو"},
{"past_1p", "غَزَوْنَا"},
{"past_1s", "غَزَوْتُ"},
{"past_2d", "غَزَوْتُمَا"},
{"past_2fp", "غَزَوْتُنَّ"},
{"past_2fs", "غَزَوْتِ"},
{"past_2mp", "غَزَوْتُمْ"},
{"past_2ms", "غَزَوْتَ"},
{"past_3fd", "غَزَتَا"},
{"past_3fp", "غَزَوْنَ"},
{"past_3fs", "غَزَتْ"},
{"past_3md", "غَزَوَا"},
{"past_3mp", "غَزَوْا"},
{"past_3ms", "غَزَا"},
},
},
{
label = "تَثَنَّى (p316، ناقص يائي)", root = "ثني", wazn = "تفعّل",
forms = {
{"imp_2d", "تَثَنَّيَا"},
{"imp_2fp", "تَثَنَّيْنَ"},
{"imp_2fs", "تَثَنَّيْ"},
{"imp_2mp", "تَثَنَّوْا"},
{"imp_2ms", "تَثَنَّ"},
{"ind_1p", "نَتَثَنَّى"},
{"ind_1s", "أَتَثَنَّى"},
{"ind_2d", "تَتَثَنَّيَانِ"},
{"ind_2fp", "تَتَثَنَّيْنَ"},
{"ind_2fs", "تَتَثَنَّيْنَ"},
{"ind_2mp", "تَتَثَنَّوْنَ"},
{"ind_2ms", "تَتَثَنَّى"},
{"ind_3fd", "تَتَثَنَّيَانِ"},
{"ind_3fp", "يَتَثَنَّيْنَ"},
{"ind_3fs", "تَتَثَنَّى"},
{"ind_3md", "يَتَثَنَّيَانِ"},
{"ind_3mp", "يَتَثَنَّوْنَ"},
{"ind_3ms", "يَتَثَنَّى"},
{"past_1p", "تَثَنَّيْنَا"},
{"past_1s", "تَثَنَّيْتُ"},
{"past_2d", "تَثَنَّيْتُمَا"},
{"past_2fp", "تَثَنَّيْتُنَّ"},
{"past_2fs", "تَثَنَّيْتِ"},
{"past_2mp", "تَثَنَّيْتُمْ"},
{"past_2ms", "تَثَنَّيْتَ"},
{"past_3fd", "تَثَنَّتَا"},
{"past_3fp", "تَثَنَّيْنَ"},
{"past_3fs", "تَثَنَّتْ"},
{"past_3md", "تَثَنَّيَا"},
{"past_3mp", "تَثَنَّوْا"},
{"past_3ms", "تَثَنَّى"},
},
},
{
label = "تَرَدَّى (p316، ناقص يائي)", root = "ردي", wazn = "تفعّل",
forms = {
{"imp_2d", "تَرَدَّيَا"},
{"imp_2fp", "تَرَدَّيْنَ"},
{"imp_2fs", "تَرَدَّيْ"},
{"imp_2mp", "تَرَدَّوْا"},
{"imp_2ms", "تَرَدَّ"},
{"ind_1p", "نَتَرَدَّى"},
{"ind_1s", "أَتَرَدَّى"},
{"ind_2d", "تَتَرَدَّيَانِ"},
{"ind_2fp", "تَتَرَدَّيْنَ"},
{"ind_2fs", "تَتَرَدَّيْنَ"},
{"ind_2mp", "تَتَرَدَّوْنَ"},
{"ind_2ms", "تَتَرَدَّى"},
{"ind_3fd", "تَتَرَدَّيَانِ"},
{"ind_3fp", "يَتَرَدَّيْنَ"},
{"ind_3fs", "تَتَرَدَّى"},
{"ind_3md", "يَتَرَدَّيَانِ"},
{"ind_3mp", "يَتَرَدَّوْنَ"},
{"ind_3ms", "يَتَرَدَّى"},
{"past_1p", "تَرَدَّيْنَا"},
{"past_1s", "تَرَدَّيْتُ"},
{"past_2d", "تَرَدَّيْتُمَا"},
{"past_2fp", "تَرَدَّيْتُنَّ"},
{"past_2fs", "تَرَدَّيْتِ"},
{"past_2mp", "تَرَدَّيْتُمْ"},
{"past_2ms", "تَرَدَّيْتَ"},
{"past_3fd", "تَرَدَّتَا"},
{"past_3fp", "تَرَدَّيْنَ"},
{"past_3fs", "تَرَدَّتْ"},
{"past_3md", "تَرَدَّيَا"},
{"past_3mp", "تَرَدَّوْا"},
{"past_3ms", "تَرَدَّى"},
},
},
{
label = "تَأَتَّى (p317، ناقص مهموز الفاء)", root = "أتي", wazn = "تفعّل",
forms = {
{"imp_2d", "تَأَتَّيَا"},
{"imp_2fp", "تَأَتَّيْنَ"},
{"imp_2fs", "تَأَتَّيْ"},
{"imp_2mp", "تَأَتَّوْا"},
{"imp_2ms", "تَأَتَّ"},
{"ind_1p", "نَتَأَتَّى"},
{"ind_1s", "أَتَأَتَّى"},
{"ind_2d", "تَتَأَتَّيَانِ"},
{"ind_2fp", "تَتَأَتَّيْنَ"},
{"ind_2fs", "تَتَأَتَّيْنَ"},
{"ind_2mp", "تَتَأَتَّوْنَ"},
{"ind_2ms", "تَتَأَتَّى"},
{"ind_3fd", "تَتَأَتَّيَانِ"},
{"ind_3fp", "يَتَأَتَّيْنَ"},
{"ind_3fs", "تَتَأَتَّى"},
{"ind_3md", "يَتَأَتَّيَانِ"},
{"ind_3mp", "يَتَأَتَّوْنَ"},
{"ind_3ms", "يَتَأَتَّى"},
{"past_1p", "تَأَتَّيْنَا"},
{"past_1s", "تَأَتَّيْتُ"},
{"past_2d", "تَأَتَّيْتُمَا"},
{"past_2fp", "تَأَتَّيْتُنَّ"},
{"past_2fs", "تَأَتَّيْتِ"},
{"past_2mp", "تَأَتَّيْتُمْ"},
{"past_2ms", "تَأَتَّيْتَ"},
{"past_3fd", "تَأَتَّتَا"},
{"past_3fp", "تَأَتَّيْنَ"},
{"past_3fs", "تَأَتَّتْ"},
{"past_3md", "تَأَتَّيَا"},
{"past_3mp", "تَأَتَّوْا"},
{"past_3ms", "تَأَتَّى"},
},
},
{
label = "تَوَخَّى (p317، ناقص يائي)", root = "وخي", wazn = "تفعّل",
forms = {
{"imp_2d", "تَوَخَّيَا"},
{"imp_2fp", "تَوَخَّيْنَ"},
{"imp_2fs", "تَوَخَّيْ"},
{"imp_2mp", "تَوَخَّوْا"},
{"imp_2ms", "تَوَخَّ"},
{"ind_1p", "نَتَوَخَّى"},
{"ind_1s", "أَتَوَخَّى"},
{"ind_2d", "تَتَوَخَّيَانِ"},
{"ind_2fp", "تَتَوَخَّيْنَ"},
{"ind_2fs", "تَتَوَخَّيْنَ"},
{"ind_2mp", "تَتَوَخَّوْنَ"},
{"ind_2ms", "تَتَوَخَّى"},
{"ind_3fd", "تَتَوَخَّيَانِ"},
{"ind_3fp", "يَتَوَخَّيْنَ"},
{"ind_3fs", "تَتَوَخَّى"},
{"ind_3md", "يَتَوَخَّيَانِ"},
{"ind_3mp", "يَتَوَخَّوْنَ"},
{"ind_3ms", "يَتَوَخَّى"},
{"past_1p", "تَوَخَّيْنَا"},
{"past_1s", "تَوَخَّيْتُ"},
{"past_2d", "تَوَخَّيْتُمَا"},
{"past_2fp", "تَوَخَّيْتُنَّ"},
{"past_2fs", "تَوَخَّيْتِ"},
{"past_2mp", "تَوَخَّيْتُمْ"},
{"past_2ms", "تَوَخَّيْتَ"},
{"past_3fd", "تَوَخَّتَا"},
{"past_3fp", "تَوَخَّيْنَ"},
{"past_3fs", "تَوَخَّتْ"},
{"past_3md", "تَوَخَّيَا"},
{"past_3mp", "تَوَخَّوْا"},
{"past_3ms", "تَوَخَّى"},
},
},
{
label = "تَوَعَّى (p318، لفيف مفروق)", root = "وعي", wazn = "تفعّل",
forms = {
{"imp_2d", "تَوَعَّيَا"},
{"imp_2fp", "تَوَعَّيْنَ"},
{"imp_2fs", "تَوَعَّيْ"},
{"imp_2mp", "تَوَعَّوْا"},
{"imp_2ms", "تَوَعَّ"},
{"ind_1p", "نَتَوَعَّى"},
{"ind_1s", "أَتَوَعَّى"},
{"ind_2d", "تَتَوَعَّيَانِ"},
{"ind_2fp", "تَتَوَعَّيْنَ"},
{"ind_2fs", "تَتَوَعَّيْنَ"},
{"ind_2mp", "تَتَوَعَّوْنَ"},
{"ind_2ms", "تَتَوَعَّى"},
{"ind_3fd", "تَتَوَعَّيَانِ"},
{"ind_3fp", "يَتَوَعَّيْنَ"},
{"ind_3fs", "تَتَوَعَّى"},
{"ind_3md", "يَتَوَعَّيَانِ"},
{"ind_3mp", "يَتَوَعَّوْنَ"},
{"ind_3ms", "يَتَوَعَّى"},
{"past_1p", "تَوَعَّيْنَا"},
{"past_1s", "تَوَعَّيْتُ"},
{"past_2d", "تَوَعَّيْتُمَا"},
{"past_2fp", "تَوَعَّيْتُنَّ"},
{"past_2fs", "تَوَعَّيْتِ"},
{"past_2mp", "تَوَعَّيْتُمْ"},
{"past_2ms", "تَوَعَّيْتَ"},
{"past_3fd", "تَوَعَّتَا"},
{"past_3fp", "تَوَعَّيْنَ"},
{"past_3fs", "تَوَعَّتْ"},
{"past_3md", "تَوَعَّيَا"},
{"past_3mp", "تَوَعَّوْا"},
{"past_3ms", "تَوَعَّى"},
},
},
{
label = "تَوَفَّى (p318، لفيف مفروق)", root = "وفي", wazn = "تفعّل",
forms = {
{"imp_2d", "تَوَفَّيَا"},
{"imp_2fp", "تَوَفَّيْنَ"},
{"imp_2fs", "تَوَفَّيْ"},
{"imp_2mp", "تَوَفَّوْا"},
{"imp_2ms", "تَوَفَّ"},
{"ind_1p", "نَتَوَفَّى"},
{"ind_1s", "أَتَوَفَّى"},
{"ind_2d", "تَتَوَفَّيَانِ"},
{"ind_2fp", "تَتَوَفَّيْنَ"},
{"ind_2fs", "تَتَوَفَّيْنَ"},
{"ind_2mp", "تَتَوَفَّوْنَ"},
{"ind_2ms", "تَتَوَفَّى"},
{"ind_3fd", "تَتَوَفَّيَانِ"},
{"ind_3fp", "يَتَوَفَّيْنَ"},
{"ind_3fs", "تَتَوَفَّى"},
{"ind_3md", "يَتَوَفَّيَانِ"},
{"ind_3mp", "يَتَوَفَّوْنَ"},
{"ind_3ms", "يَتَوَفَّى"},
{"past_1p", "تَوَفَّيْنَا"},
{"past_1s", "تَوَفَّيْتُ"},
{"past_2d", "تَوَفَّيْتُمَا"},
{"past_2fp", "تَوَفَّيْتُنَّ"},
{"past_2fs", "تَوَفَّيْتِ"},
{"past_2mp", "تَوَفَّيْتُمْ"},
{"past_2ms", "تَوَفَّيْتَ"},
{"past_3fd", "تَوَفَّتَا"},
{"past_3fp", "تَوَفَّيْنَ"},
{"past_3fs", "تَوَفَّتْ"},
{"past_3md", "تَوَفَّيَا"},
{"past_3mp", "تَوَفَّوْا"},
{"past_3ms", "تَوَفَّى"},
},
},
{
label = "تَنَوَّى (p319، لفيف مقرون)", root = "نوي", wazn = "تفعّل",
forms = {
{"imp_2d", "تَنَوَّيَا"},
{"imp_2fp", "تَنَوَّيْنَ"},
{"imp_2fs", "تَنَوَّيْ"},
{"imp_2mp", "تَنَوَّوْا"},
{"imp_2ms", "تَنَوَّ"},
{"ind_1p", "نَتَنَوَّى"},
{"ind_1s", "أَتَنَوَّى"},
{"ind_2d", "تَتَنَوَّيَانِ"},
{"ind_2fp", "تَتَنَوَّيْنَ"},
{"ind_2fs", "تَتَنَوَّيْنَ"},
{"ind_2mp", "تَتَنَوَّوْنَ"},
{"ind_2ms", "تَتَنَوَّى"},
{"ind_3fd", "تَتَنَوَّيَانِ"},
{"ind_3fp", "يَتَنَوَّيْنَ"},
{"ind_3fs", "تَتَنَوَّى"},
{"ind_3md", "يَتَنَوَّيَانِ"},
{"ind_3mp", "يَتَنَوَّوْنَ"},
{"ind_3ms", "يَتَنَوَّى"},
{"past_1p", "تَنَوَّيْنَا"},
{"past_1s", "تَنَوَّيْتُ"},
{"past_2d", "تَنَوَّيْتُمَا"},
{"past_2fp", "تَنَوَّيْتُنَّ"},
{"past_2fs", "تَنَوَّيْتِ"},
{"past_2mp", "تَنَوَّيْتُمْ"},
{"past_2ms", "تَنَوَّيْتَ"},
{"past_3fd", "تَنَوَّتَا"},
{"past_3fp", "تَنَوَّيْنَ"},
{"past_3fs", "تَنَوَّتْ"},
{"past_3md", "تَنَوَّيَا"},
{"past_3mp", "تَنَوَّوْا"},
{"past_3ms", "تَنَوَّى"},
},
},
{
label = "تَرَوَّى (p319، لفيف مقرون)", root = "روي", wazn = "تفعّل",
forms = {
{"imp_2d", "تَرَوَّيَا"},
{"imp_2fp", "تَرَوَّيْنَ"},
{"imp_2fs", "تَرَوَّيْ"},
{"imp_2mp", "تَرَوَّوْا"},
{"imp_2ms", "تَرَوَّ"},
{"ind_1p", "نَتَرَوَّى"},
{"ind_1s", "أَتَرَوَّى"},
{"ind_2d", "تَتَرَوَّيَانِ"},
{"ind_2fp", "تَتَرَوَّيْنَ"},
{"ind_2fs", "تَتَرَوَّيْنَ"},
{"ind_2mp", "تَتَرَوَّوْنَ"},
{"ind_2ms", "تَتَرَوَّى"},
{"ind_3fd", "تَتَرَوَّيَانِ"},
{"ind_3fp", "يَتَرَوَّيْنَ"},
{"ind_3fs", "تَتَرَوَّى"},
{"ind_3md", "يَتَرَوَّيَانِ"},
{"ind_3mp", "يَتَرَوَّوْنَ"},
{"ind_3ms", "يَتَرَوَّى"},
{"past_1p", "تَرَوَّيْنَا"},
{"past_1s", "تَرَوَّيْتُ"},
{"past_2d", "تَرَوَّيْتُمَا"},
{"past_2fp", "تَرَوَّيْتُنَّ"},
{"past_2fs", "تَرَوَّيْتِ"},
{"past_2mp", "تَرَوَّيْتُمْ"},
{"past_2ms", "تَرَوَّيْتَ"},
{"past_3fd", "تَرَوَّتَا"},
{"past_3fp", "تَرَوَّيْنَ"},
{"past_3fs", "تَرَوَّتْ"},
{"past_3md", "تَرَوَّيَا"},
{"past_3mp", "تَرَوَّوْا"},
{"past_3ms", "تَرَوَّى"},
},
},
{
label = "تَقاعَدَ (p321، صحيح سالم)", root = "قعد", wazn = "تفاعل",
forms = {
{"imp_2d", "تَقَاعَدَا"},
{"imp_2fp", "تَقَاعَدْنَ"},
{"imp_2fs", "تَقَاعَدِي"},
{"imp_2mp", "تَقَاعَدُوا"},
{"imp_2ms", "تَقَاعَدْ"},
{"ind_1p", "نَتَقَاعَدُ"},
{"ind_1s", "أَتَقَاعَدُ"},
{"ind_2d", "تَتَقَاعَدَانِ"},
{"ind_2fp", "تَتَقَاعَدْنَ"},
{"ind_2fs", "تَتَقَاعَدِينَ"},
{"ind_2mp", "تَتَقَاعَدُونَ"},
{"ind_2ms", "تَتَقَاعَدُ"},
{"ind_3fd", "تَتَقَاعَدَانِ"},
{"ind_3fp", "يَتَقَاعَدْنَ"},
{"ind_3fs", "تَتَقَاعَدُ"},
{"ind_3md", "يَتَقَاعَدَانِ"},
{"ind_3mp", "يَتَقَاعَدُونَ"},
{"ind_3ms", "يَتَقَاعَدُ"},
{"past_1p", "تَقَاعَدْنَا"},
{"past_1s", "تَقَاعَدْتُ"},
{"past_2d", "تَقَاعَدْتُمَا"},
{"past_2fp", "تَقَاعَدْتُنَّ"},
{"past_2fs", "تَقَاعَدْتِ"},
{"past_2mp", "تَقَاعَدْتُمْ"},
{"past_2ms", "تَقَاعَدْتَ"},
{"past_3fd", "تَقَاعَدَتَا"},
{"past_3fp", "تَقَاعَدْنَ"},
{"past_3fs", "تَقَاعَدَتْ"},
{"past_3md", "تَقَاعَدَا"},
{"past_3mp", "تَقَاعَدُوا"},
{"past_3ms", "تَقَاعَدَ"},
},
},
{
label = "تَنازَلَ (p321، صحيح سالم)", root = "نزل", wazn = "تفاعل",
forms = {
{"imp_2d", "تَنَازَلَا"},
{"imp_2fp", "تَنَازَلْنَ"},
{"imp_2fs", "تَنَازَلِي"},
{"imp_2mp", "تَنَازَلُوا"},
{"imp_2ms", "تَنَازَلْ"},
{"ind_1p", "نَتَنَازَلُ"},
{"ind_1s", "أَتَنَازَلُ"},
{"ind_2d", "تَتَنَازَلَانِ"},
{"ind_2fp", "تَتَنَازَلْنَ"},
{"ind_2fs", "تَتَنَازَلِينَ"},
{"ind_2mp", "تَتَنَازَلُونَ"},
{"ind_2ms", "تَتَنَازَلُ"},
{"ind_3fd", "تَتَنَازَلَانِ"},
{"ind_3fp", "يَتَنَازَلْنَ"},
{"ind_3fs", "تَتَنَازَلُ"},
{"ind_3md", "يَتَنَازَلَانِ"},
{"ind_3mp", "يَتَنَازَلُونَ"},
{"ind_3ms", "يَتَنَازَلُ"},
{"past_1p", "تَنَازَلْنَا"},
{"past_1s", "تَنَازَلْتُ"},
{"past_2d", "تَنَازَلْتُمَا"},
{"past_2fp", "تَنَازَلْتُنَّ"},
{"past_2fs", "تَنَازَلْتِ"},
{"past_2mp", "تَنَازَلْتُمْ"},
{"past_2ms", "تَنَازَلْتَ"},
{"past_3fd", "تَنَازَلَتَا"},
{"past_3fp", "تَنَازَلْنَ"},
{"past_3fs", "تَنَازَلَتْ"},
{"past_3md", "تَنَازَلَا"},
{"past_3mp", "تَنَازَلُوا"},
{"past_3ms", "تَنَازَلَ"},
},
},
{
label = "ضَمَّ (p148)", root = "ضمم", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "ضُمَّا"},
{"imp_2fp", "اُضْمُمْنَ"},
{"imp_2fs", "ضُمِّي"},
{"imp_2mp", "ضُمُّوا"},
{"imp_2ms", "ضُمَّ"},
{"ind_1p", "نَضُمُّ"},
{"ind_1s", "أَضُمُّ"},
{"ind_2d", "تَضُمَّانِ"},
{"ind_2fp", "تَضْمُمْنَ"},
{"ind_2fs", "تَضُمِّينَ"},
{"ind_2mp", "تَضُمُّونَ"},
{"ind_2ms", "تَضُمُّ"},
{"ind_3fd", "تَضُمَّانِ"},
{"ind_3fp", "يَضْمُمْنَ"},
{"ind_3fs", "تَضُمُّ"},
{"ind_3md", "يَضُمَّانِ"},
{"ind_3mp", "يَضُمُّونَ"},
{"ind_3ms", "يَضُمُّ"},
{"past_1p", "ضَمَمْنَا"},
{"past_1s", "ضَمَمْتُ"},
{"past_2d", "ضَمَمْتُمَا"},
{"past_2fp", "ضَمَمْتُنَّ"},
{"past_2fs", "ضَمَمْتِ"},
{"past_2mp", "ضَمَمْتُمْ"},
{"past_2ms", "ضَمَمْتَ"},
{"past_3fd", "ضَمَّتَا"},
{"past_3fp", "ضَمَمْنَ"},
{"past_3fs", "ضَمَّتْ"},
{"past_3md", "ضَمَّا"},
{"past_3mp", "ضَمُّوا"},
{"past_3ms", "ضَمَّ"},
},
},
{
label = "كَبَّ (p148)", root = "كبب", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "كُبَّا"},
{"imp_2fp", "اُكْبُبْنَ"},
{"imp_2fs", "كُبِّي"},
{"imp_2mp", "كُبُّوا"},
{"imp_2ms", "كُبَّ"},
{"ind_1p", "نَكُبُّ"},
{"ind_1s", "أَكُبُّ"},
{"ind_2d", "تَكُبَّانِ"},
{"ind_2fp", "تَكْبُبْنَ"},
{"ind_2fs", "تَكُبِّينَ"},
{"ind_2mp", "تَكُبُّونَ"},
{"ind_2ms", "تَكُبُّ"},
{"ind_3fd", "تَكُبَّانِ"},
{"ind_3fp", "يَكْبُبْنَ"},
{"ind_3fs", "تَكُبُّ"},
{"ind_3md", "يَكُبَّانِ"},
{"ind_3mp", "يَكُبُّونَ"},
{"ind_3ms", "يَكُبُّ"},
{"past_1p", "كَبَبْنَا"},
{"past_1s", "كَبَبْتُ"},
{"past_2d", "كَبَبْتُمَا"},
{"past_2fp", "كَبَبْتُنَّ"},
{"past_2fs", "كَبَبْتِ"},
{"past_2mp", "كَبَبْتُمْ"},
{"past_2ms", "كَبَبْتَ"},
{"past_3fd", "كَبَّتَا"},
{"past_3fp", "كَبَبْنَ"},
{"past_3fs", "كَبَّتْ"},
{"past_3md", "كَبَّا"},
{"past_3mp", "كَبُّوا"},
{"past_3ms", "كَبَّ"},
},
},
{
label = "أَبَّ (p149)", root = "أبب", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "أُبَّا"},
{"imp_2fp", "اُؤْبُبْنَ"},
{"imp_2fs", "أُبِّي"},
{"imp_2mp", "أُبُّوا"},
{"imp_2ms", "اُؤْبُبْ"},
{"ind_1p", "نَؤُبُّ"},
{"ind_1s", "أَؤُبُّ"},
{"ind_2d", "تَؤُبَّانِ"},
{"ind_2fp", "تَأْبُبْنَ"},
{"ind_2fs", "تَؤُبِّينَ"},
{"ind_2mp", "تَؤُبُّونَ"},
{"ind_2ms", "تَؤُبُّ"},
{"ind_3fd", "تَؤُبَّانِ"},
{"ind_3fp", "يَأْبُبْنَ"},
{"ind_3fs", "تَؤُبُّ"},
{"ind_3md", "يَؤُبَّانِ"},
{"ind_3mp", "يَؤُبُّونَ"},
{"ind_3ms", "يَؤُبُّ"},
{"past_1p", "أَبَبْنَا"},
{"past_1s", "أَبَبْتُ"},
{"past_2d", "أَبَبْتُمَا"},
{"past_2fp", "أَبَبْتُنَّ"},
{"past_2fs", "أَبَبْتِ"},
{"past_2mp", "أَبَبْتُمْ"},
{"past_2ms", "أَبَبْتَ"},
{"past_3fd", "أَبَّتَا"},
{"past_3fp", "أَبَبْنَ"},
{"past_3fs", "أَبَّتْ"},
{"past_3md", "أَبَّا"},
{"past_3mp", "أَبُّوا"},
{"past_3ms", "أَبَّ"},
},
},
{
label = "أَمَّ (p149)", root = "أمم", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "أُمَّا"},
{"imp_2fp", "اُؤْمُمْنَ"},
{"imp_2fs", "أُمِّي"},
{"imp_2mp", "أُمُّوا"},
{"imp_2ms", "اُؤْمُمْ"},
{"ind_1p", "نَؤُمُّ"},
{"ind_1s", "أَؤُمُّ"},
{"ind_2d", "تَؤُمَّانِ"},
{"ind_2fp", "تَأْمُمْنَ"},
{"ind_2fs", "تَؤُمِّينَ"},
{"ind_2mp", "تَؤُمُّونَ"},
{"ind_2ms", "تَؤُمُّ"},
{"ind_3fd", "تَؤُمَّانِ"},
{"ind_3fp", "يَأْمُمْنَ"},
{"ind_3fs", "تَؤُمُّ"},
{"ind_3md", "يَؤُمَّانِ"},
{"ind_3mp", "يَؤُمُّونَ"},
{"ind_3ms", "يَؤُمُّ"},
{"past_1p", "أَمَمْنَا"},
{"past_1s", "أَمَمْتُ"},
{"past_2d", "أَمَمْتُمَا"},
{"past_2fp", "أَمَمْتُنَّ"},
{"past_2fs", "أَمَمْتِ"},
{"past_2mp", "أَمَمْتُمْ"},
{"past_2ms", "أَمَمْتَ"},
{"past_3fd", "أَمَّتَا"},
{"past_3fp", "أَمَمْنَ"},
{"past_3fs", "أَمَّتْ"},
{"past_3md", "أَمَّا"},
{"past_3mp", "أَمُّوا"},
{"past_3ms", "أَمَّ"},
},
},
{
label = "جَلَسَ (p162)", root = "جلس", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِجْلِسَا"},
{"imp_2fp", "اِجْلِسْنَ"},
{"imp_2fs", "اِجْلِسِي"},
{"imp_2mp", "اِجْلِسُوا"},
{"imp_2ms", "اِجْلِسْ"},
{"ind_1p", "نَجْلِسُ"},
{"ind_1s", "أَجْلِسُ"},
{"ind_2d", "تَجْلِسَانِ"},
{"ind_2fp", "تَجْلِسْنَ"},
{"ind_2fs", "تَجْلِسِينَ"},
{"ind_2mp", "تَجْلِسُونَ"},
{"ind_2ms", "تَجْلِسُ"},
{"ind_3fd", "تَجْلِسَانِ"},
{"ind_3fp", "يَجْلِسْنَ"},
{"ind_3fs", "تَجْلِسُ"},
{"ind_3md", "يَجْلِسَانِ"},
{"ind_3mp", "يَجْلِسُونَ"},
{"ind_3ms", "يَجْلِسُ"},
{"past_1p", "جَلَسْنَا"},
{"past_1s", "جَلَسْتُ"},
{"past_2d", "جَلَسْتُمَا"},
{"past_2fp", "جَلَسْتُنَّ"},
{"past_2fs", "جَلَسْتِ"},
{"past_2mp", "جَلَسْتُمْ"},
{"past_2ms", "جَلَسْتَ"},
{"past_3fd", "جَلَسَتَا"},
{"past_3fp", "جَلَسْنَ"},
{"past_3fs", "جَلَسَتْ"},
{"past_3md", "جَلَسَا"},
{"past_3mp", "جَلَسُوا"},
{"past_3ms", "جَلَسَ"},
},
},
{
label = "رَجَعَ (p162)", root = "رجع", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِرْجِعَا"},
{"imp_2fp", "اِرْجِعْنَ"},
{"imp_2fs", "اِرْجِعِي"},
{"imp_2mp", "اِرْجِعُوا"},
{"imp_2ms", "اِرْجِعْ"},
{"ind_1p", "نَرْجِعُ"},
{"ind_1s", "أَرْجِعُ"},
{"ind_2d", "تَرْجِعَانِ"},
{"ind_2fp", "تَرْجِعْنَ"},
{"ind_2fs", "تَرْجِعِينَ"},
{"ind_2mp", "تَرْجِعُونَ"},
{"ind_2ms", "تَرْجِعُ"},
{"ind_3fd", "تَرْجِعَانِ"},
{"ind_3fp", "يَرْجِعْنَ"},
{"ind_3fs", "تَرْجِعُ"},
{"ind_3md", "يَرْجِعَانِ"},
{"ind_3mp", "يَرْجِعُونَ"},
{"ind_3ms", "يَرْجِعُ"},
{"past_1p", "رَجَعْنَا"},
{"past_1s", "رَجَعْتُ"},
{"past_2d", "رَجَعْتُمَا"},
{"past_2fp", "رَجَعْتُنَّ"},
{"past_2fs", "رَجَعْتِ"},
{"past_2mp", "رَجَعْتُمْ"},
{"past_2ms", "رَجَعْتَ"},
{"past_3fd", "رَجَعَتَا"},
{"past_3fp", "رَجَعْنَ"},
{"past_3fs", "رَجَعَتْ"},
{"past_3md", "رَجَعَا"},
{"past_3mp", "رَجَعُوا"},
{"past_3ms", "رَجَعَ"},
},
},
{
label = "جَزَمَ (p163)", root = "جزم", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِجْزِمَا"},
{"imp_2fp", "اِجْزِمْنَ"},
{"imp_2fs", "اِجْزِمِي"},
{"imp_2mp", "اِجْزِمُوا"},
{"imp_2ms", "اِجْزِمْ"},
{"ind_1p", "نَجْزِمُ"},
{"ind_1s", "أَجْزِمُ"},
{"ind_2d", "تَجْزِمَانِ"},
{"ind_2fp", "تَجْزِمْنَ"},
{"ind_2fs", "تَجْزِمِينَ"},
{"ind_2mp", "تَجْزِمُونَ"},
{"ind_2ms", "تَجْزِمُ"},
{"ind_3fd", "تَجْزِمَانِ"},
{"ind_3fp", "يَجْزِمْنَ"},
{"ind_3fs", "تَجْزِمُ"},
{"ind_3md", "يَجْزِمَانِ"},
{"ind_3mp", "يَجْزِمُونَ"},
{"ind_3ms", "يَجْزِمُ"},
{"past_1p", "جَزَمْنَا"},
{"past_1s", "جَزَمْتُ"},
{"past_2d", "جَزَمْتُمَا"},
{"past_2fp", "جَزَمْتُنَّ"},
{"past_2fs", "جَزَمْتِ"},
{"past_2mp", "جَزَمْتُمْ"},
{"past_2ms", "جَزَمْتَ"},
{"past_3fd", "جَزَمَتَا"},
{"past_3fp", "جَزَمْنَ"},
{"past_3fs", "جَزَمَتْ"},
{"past_3md", "جَزَمَا"},
{"past_3mp", "جَزَمُوا"},
{"past_3ms", "جَزَمَ"},
},
},
}
hwqdylwqstlvyqfjtfl3fwxzvcmqnrx
1159071
1159013
2026-09-10T19:33:56Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159071
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 5 من 16.
return {
{
label = "تَهَيَّأَ (p.314)", root = "هيأ", wazn = "تفعّل",
forms = {
{"imp_2d", "تَهَيَّآ"},
{"imp_2fp", "تَهَيَّأْنَ"},
{"imp_2fs", "تَهَيَّئِي"},
{"imp_2mp", "تَهَيَّؤُوا"},
{"imp_2ms", "تَهَيَّأْ"},
{"ind_1p", "نَتَهَيَّأُ"},
{"ind_1s", "أَتَهَيَّأُ"},
{"ind_2d", "تَتَهَيَّآنِ"},
{"ind_2fp", "تَتَهَيَّأْنَ"},
{"ind_2fs", "تَتَهَيَّئِينَ"},
{"ind_2mp", "تَتَهَيَّؤُونَ"},
{"ind_2ms", "تَتَهَيَّأُ"},
{"ind_3fd", "تَتَهَيَّآنِ"},
{"ind_3fp", "يَتَهَيَّأْنَ"},
{"ind_3fs", "تَتَهَيَّأُ"},
{"ind_3md", "يَتَهَيَّآنِ"},
{"ind_3mp", "يَتَهَيَّؤُونَ"},
{"ind_3ms", "يَتَهَيَّأُ"},
{"past_1p", "تَهَيَّأْنَا"},
{"past_1s", "تَهَيَّأْتُ"},
{"past_2d", "تَهَيَّأْتُمَا"},
{"past_2fp", "تَهَيَّأْتُنَّ"},
{"past_2fs", "تَهَيَّأْتِ"},
{"past_2mp", "تَهَيَّأْتُمْ"},
{"past_2ms", "تَهَيَّأْتَ"},
{"past_3fd", "تَهَيَّأَتَا"},
{"past_3fp", "تَهَيَّأْنَ"},
{"past_3fs", "تَهَيَّأَتْ"},
{"past_3md", "تَهَيَّآ"},
{"past_3mp", "تَهَيَّؤُوا"},
{"past_3ms", "تَهَيَّأَ"},
},
},
{
label = "اِطَّوَّقَ (p.315، تفعّل مدغم)", root = "طوق", wazn = "تفعّل",
reduced = true,
forms = {
{"imp_2d", "اِطَّوَّقَا"},
{"imp_2fp", "اِطَّوَّقْنَ"},
{"imp_2fs", "اِطَّوَّقِي"},
{"imp_2mp", "اِطَّوَّقُوا"},
{"imp_2ms", "اِطَّوَّقْ"},
{"ind_1p", "نَطَّوَّقُ"},
{"ind_1s", "أَطَّوَّقُ"},
{"ind_2d", "تَطَّوَّقَانِ"},
{"ind_2fp", "تَطَّوَّقْنَ"},
{"ind_2fs", "تَطَّوَّقِينَ"},
{"ind_2mp", "تَطَّوَّقُونَ"},
{"ind_2ms", "تَطَّوَّقُ"},
{"ind_3fd", "تَطَّوَّقَانِ"},
{"ind_3fp", "يَطَّوَّقْنَ"},
{"ind_3fs", "تَطَّوَّقُ"},
{"ind_3md", "يَطَّوَّقَانِ"},
{"ind_3mp", "يَطَّوَّقُونَ"},
{"ind_3ms", "يَطَّوَّقُ"},
{"past_1p", "اِطَّوَّقْنَا"},
{"past_1s", "اِطَّوَّقْتُ"},
{"past_2d", "اِطَّوَّقْتُمَا"},
{"past_2fp", "اِطَّوَّقْتُنَّ"},
{"past_2fs", "اِطَّوَّقْتِ"},
{"past_2mp", "اِطَّوَّقْتُمْ"},
{"past_2ms", "اِطَّوَّقْتَ"},
{"past_3fd", "اِطَّوَّقَتَا"},
{"past_3fp", "اِطَّوَّقْنَ"},
{"past_3fs", "اِطَّوَّقَتْ"},
{"past_3md", "اِطَّوَّقَا"},
{"past_3mp", "اِطَّوَّقُوا"},
{"past_3ms", "اِطَّوَّقَ"},
},
},
{
label = "اِطَّيَّرَ (p.315، تفعّل مدغم)", root = "طير", wazn = "تفعّل",
reduced = true,
forms = {
{"imp_2d", "اِطَّيَّرَا"},
{"imp_2fp", "اِطَّيَّرْنَ"},
{"imp_2fs", "اِطَّيَّرِي"},
{"imp_2mp", "اِطَّيَّرُوا"},
{"imp_2ms", "اِطَّيَّرْ"},
{"ind_1p", "نَطَّيَّرُ"},
{"ind_1s", "أَطَّيَّرُ"},
{"ind_2d", "تَطَّيَّرَانِ"},
{"ind_2fp", "تَطَّيَّرْنَ"},
{"ind_2fs", "تَطَّيَّرِينَ"},
{"ind_2mp", "تَطَّيَّرُونَ"},
{"ind_2ms", "تَطَّيَّرُ"},
{"ind_3fd", "تَطَّيَّرَانِ"},
{"ind_3fp", "يَطَّيَّرْنَ"},
{"ind_3fs", "تَطَّيَّرُ"},
{"ind_3md", "يَطَّيَّرَانِ"},
{"ind_3mp", "يَطَّيَّرُونَ"},
{"ind_3ms", "يَطَّيَّرُ"},
{"past_1p", "اِطَّيَّرْنَا"},
{"past_1s", "اِطَّيَّرْتُ"},
{"past_2d", "اِطَّيَّرْتُمَا"},
{"past_2fp", "اِطَّيَّرْتُنَّ"},
{"past_2fs", "اِطَّيَّرْتِ"},
{"past_2mp", "اِطَّيَّرْتُمْ"},
{"past_2ms", "اِطَّيَّرْتَ"},
{"past_3fd", "اِطَّيَّرَتَا"},
{"past_3fp", "اِطَّيَّرْنَ"},
{"past_3fs", "اِطَّيَّرَتْ"},
{"past_3md", "اِطَّيَّرَا"},
{"past_3mp", "اِطَّيَّرُوا"},
{"past_3ms", "اِطَّيَّرَ"},
},
},
{
label = "دَخَلَ ـُ (p145، صحيح سالم)", root = "دخل", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "اُدْخُلَا"},
{"imp_2fp", "اُدْخُلْنَ"},
{"imp_2fs", "اُدْخُلِي"},
{"imp_2mp", "اُدْخُلُوا"},
{"imp_2ms", "اُدْخُلْ"},
{"ind_1p", "نَدْخُلُ"},
{"ind_1s", "أَدْخُلُ"},
{"ind_2d", "تَدْخُلَانِ"},
{"ind_2fp", "تَدْخُلْنَ"},
{"ind_2fs", "تَدْخُلِينَ"},
{"ind_2mp", "تَدْخُلُونَ"},
{"ind_2ms", "تَدْخُلُ"},
{"ind_3fd", "تَدْخُلَانِ"},
{"ind_3fp", "يَدْخُلْنَ"},
{"ind_3fs", "تَدْخُلُ"},
{"ind_3md", "يَدْخُلَانِ"},
{"ind_3mp", "يَدْخُلُونَ"},
{"ind_3ms", "يَدْخُلُ"},
{"past_1p", "دَخَلْنَا"},
{"past_1s", "دَخَلْتُ"},
{"past_2d", "دَخَلْتُمَا"},
{"past_2fp", "دَخَلْتُنَّ"},
{"past_2fs", "دَخَلْتِ"},
{"past_2mp", "دَخَلْتُمْ"},
{"past_2ms", "دَخَلْتَ"},
{"past_3fd", "دَخَلَتَا"},
{"past_3fp", "دَخَلْنَ"},
{"past_3fs", "دَخَلَتْ"},
{"past_3md", "دَخَلَا"},
{"past_3mp", "دَخَلُوا"},
{"past_3ms", "دَخَلَ"},
},
},
{
label = "سَقَطَ ـُ (p145، صحيح سالم)", root = "سقط", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "اُسْقُطَا"},
{"imp_2fp", "اُسْقُطْنَ"},
{"imp_2fs", "اُسْقُطِي"},
{"imp_2mp", "اُسْقُطُوا"},
{"imp_2ms", "اُسْقُطْ"},
{"ind_1p", "نَسْقُطُ"},
{"ind_1s", "أَسْقُطُ"},
{"ind_2d", "تَسْقُطَانِ"},
{"ind_2fp", "تَسْقُطْنَ"},
{"ind_2fs", "تَسْقُطِينَ"},
{"ind_2mp", "تَسْقُطُونَ"},
{"ind_2ms", "تَسْقُطُ"},
{"ind_3fd", "تَسْقُطَانِ"},
{"ind_3fp", "يَسْقُطْنَ"},
{"ind_3fs", "تَسْقُطُ"},
{"ind_3md", "يَسْقُطَانِ"},
{"ind_3mp", "يَسْقُطُونَ"},
{"ind_3ms", "يَسْقُطُ"},
{"past_1p", "سَقَطْنَا"},
{"past_1s", "سَقَطْتُ"},
{"past_2d", "سَقَطْتُمَا"},
{"past_2fp", "سَقَطْتُنَّ"},
{"past_2fs", "سَقَطْتِ"},
{"past_2mp", "سَقَطْتُمْ"},
{"past_2ms", "سَقَطْتَ"},
{"past_3fd", "سَقَطَتَا"},
{"past_3fp", "سَقَطْنَ"},
{"past_3fs", "سَقَطَتْ"},
{"past_3md", "سَقَطَا"},
{"past_3mp", "سَقَطُوا"},
{"past_3ms", "سَقَطَ"},
},
},
{
label = "شَقَّ ـُ (p147، مضاعف)", root = "شقق", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "شُقَّا"},
{"imp_2fp", "اُشْقُقْنَ"},
{"imp_2fs", "شُقِّي"},
{"imp_2mp", "شُقُّوا"},
{"imp_2ms", "شُقَّ"},
{"ind_1p", "نَشُقُّ"},
{"ind_1s", "أَشُقُّ"},
{"ind_2d", "تَشُقَّانِ"},
{"ind_2fp", "تَشْقُقْنَ"},
{"ind_2fs", "تَشُقِّينَ"},
{"ind_2mp", "تَشُقُّونَ"},
{"ind_2ms", "تَشُقُّ"},
{"ind_3fd", "تَشُقَّانِ"},
{"ind_3fp", "يَشْقُقْنَ"},
{"ind_3fs", "تَشُقُّ"},
{"ind_3md", "يَشُقَّانِ"},
{"ind_3mp", "يَشُقُّونَ"},
{"ind_3ms", "يَشُقُّ"},
{"past_1p", "شَقَقْنَا"},
{"past_1s", "شَقَقْتُ"},
{"past_2d", "شَقَقْتُمَا"},
{"past_2fp", "شَقَقْتُنَّ"},
{"past_2fs", "شَقَقْتِ"},
{"past_2mp", "شَقَقْتُمْ"},
{"past_2ms", "شَقَقْتَ"},
{"past_3fd", "شَقَّتَا"},
{"past_3fp", "شَقَقْنَ"},
{"past_3fs", "شَقَّتْ"},
{"past_3md", "شَقَّا"},
{"past_3mp", "شَقُّوا"},
{"past_3ms", "شَقَّ"},
},
},
{
label = "ظَنَّ ـُ (p147، مضاعف)", root = "ظنن", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "ظُنَّا"},
{"imp_2fp", "اُظْنُنَّ"},
{"imp_2fs", "ظُنِّي"},
{"imp_2mp", "ظُنُّوا"},
{"imp_2ms", "ظُنَّ"},
{"ind_1p", "نَظُنُّ"},
{"ind_1s", "أَظُنُّ"},
{"ind_2d", "تَظُنَّانِ"},
{"ind_2fp", "تَظْنُنَّ"},
{"ind_2fs", "تَظُنِّينَ"},
{"ind_2mp", "تَظُنُّونَ"},
{"ind_2ms", "تَظُنُّ"},
{"ind_3fd", "تَظُنَّانِ"},
{"ind_3fp", "يَظْنُنَّ"},
{"ind_3fs", "تَظُنُّ"},
{"ind_3md", "يَظُنَّانِ"},
{"ind_3mp", "يَظُنُّونَ"},
{"ind_3ms", "يَظُنُّ"},
{"past_1p", "ظَنَنَّا"},
{"past_1s", "ظَنَنْتُ"},
{"past_2d", "ظَنَنْتُمَا"},
{"past_2fp", "ظَنَنْتُنَّ"},
{"past_2fs", "ظَنَنْتِ"},
{"past_2mp", "ظَنَنْتُمْ"},
{"past_2ms", "ظَنَنْتَ"},
{"past_3fd", "ظَنَّتَا"},
{"past_3fp", "ظَنَنَّ"},
{"past_3fs", "ظَنَّتْ"},
{"past_3md", "ظَنَّا"},
{"past_3mp", "ظَنُّوا"},
{"past_3ms", "ظَنَّ"},
},
},
{
label = "أَخَذَ ـُ (p151، مهموز الفاء)", root = "أخذ", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "خُذَا"},
{"imp_2fp", "خُذْنَ"},
{"imp_2fs", "خُذِي"},
{"imp_2mp", "خُذُوا"},
{"imp_2ms", "خُذْ"},
{"ind_1p", "نَأْخُذُ"},
{"ind_1s", "آخُذُ"},
{"ind_2d", "تَأْخُذَانِ"},
{"ind_2fp", "تَأْخُذْنَ"},
{"ind_2fs", "تَأْخُذِينَ"},
{"ind_2mp", "تَأْخُذُونَ"},
{"ind_2ms", "تَأْخُذُ"},
{"ind_3fd", "تَأْخُذَانِ"},
{"ind_3fp", "يَأْخُذْنَ"},
{"ind_3fs", "تَأْخُذُ"},
{"ind_3md", "يَأْخُذَانِ"},
{"ind_3mp", "يَأْخُذُونَ"},
{"ind_3ms", "يَأْخُذُ"},
{"past_1p", "أَخَذْنَا"},
{"past_1s", "أَخَذْتُ"},
{"past_2d", "أَخَذْتُمَا"},
{"past_2fp", "أَخَذْتُنَّ"},
{"past_2fs", "أَخَذْتِ"},
{"past_2mp", "أَخَذْتُمْ"},
{"past_2ms", "أَخَذْتَ"},
{"past_3fd", "أَخَذَتَا"},
{"past_3fp", "أَخَذْنَ"},
{"past_3fs", "أَخَذَتْ"},
{"past_3md", "أَخَذَا"},
{"past_3mp", "أَخَذُوا"},
{"past_3ms", "أَخَذَ"},
},
},
{
label = "أَمَرَ ـُ (p151، مهموز الفاء)", root = "أمر", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "مُرَا"},
{"imp_2fp", "مُرْنَ"},
{"imp_2fs", "مُرِي"},
{"imp_2mp", "مُرُوا"},
{"imp_2ms", "مُرْ"},
{"ind_1p", "نَأْمُرُ"},
{"ind_1s", "آمُرُ"},
{"ind_2d", "تَأْمُرَانِ"},
{"ind_2fp", "تَأْمُرْنَ"},
{"ind_2fs", "تَأْمُرِينَ"},
{"ind_2mp", "تَأْمُرُونَ"},
{"ind_2ms", "تَأْمُرُ"},
{"ind_3fd", "تَأْمُرَانِ"},
{"ind_3fp", "يَأْمُرْنَ"},
{"ind_3fs", "تَأْمُرُ"},
{"ind_3md", "يَأْمُرَانِ"},
{"ind_3mp", "يَأْمُرُونَ"},
{"ind_3ms", "يَأْمُرُ"},
{"past_1p", "أَمَرْنَا"},
{"past_1s", "أَمَرْتُ"},
{"past_2d", "أَمَرْتُمَا"},
{"past_2fp", "أَمَرْتُنَّ"},
{"past_2fs", "أَمَرْتِ"},
{"past_2mp", "أَمَرْتُمْ"},
{"past_2ms", "أَمَرْتَ"},
{"past_3fd", "أَمَرَتَا"},
{"past_3fp", "أَمَرْنَ"},
{"past_3fs", "أَمَرَتْ"},
{"past_3md", "أَمَرَا"},
{"past_3mp", "أَمَرُوا"},
{"past_3ms", "أَمَرَ"},
},
},
{
label = "عادَ ـُ (p156، أجوف واوي)", root = "عود", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "عُودَا"},
{"imp_2fp", "عُدْنَ"},
{"imp_2fs", "عُودِي"},
{"imp_2mp", "عُودُوا"},
{"imp_2ms", "عُدْ"},
{"ind_1p", "نَعُودُ"},
{"ind_1s", "أَعُودُ"},
{"ind_2d", "تَعُودَانِ"},
{"ind_2fp", "تَعُدْنَ"},
{"ind_2fs", "تَعُودِينَ"},
{"ind_2mp", "تَعُودُونَ"},
{"ind_2ms", "تَعُودُ"},
{"ind_3fd", "تَعُودَانِ"},
{"ind_3fp", "يَعُدْنَ"},
{"ind_3fs", "تَعُودُ"},
{"ind_3md", "يَعُودَانِ"},
{"ind_3mp", "يَعُودُونَ"},
{"ind_3ms", "يَعُودُ"},
{"past_1p", "عُدْنَا"},
{"past_1s", "عُدْتُ"},
{"past_2d", "عُدْتُمَا"},
{"past_2fp", "عُدْتُنَّ"},
{"past_2fs", "عُدْتِ"},
{"past_2mp", "عُدْتُمْ"},
{"past_2ms", "عُدْتَ"},
{"past_3fd", "عَادَتَا"},
{"past_3fp", "عُدْنَ"},
{"past_3fs", "عَادَتْ"},
{"past_3md", "عَادَا"},
{"past_3mp", "عَادُوا"},
{"past_3ms", "عَادَ"},
},
},
{
label = "كانَ ـُ (p156، أجوف واوي)", root = "كون", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "كُونَا"},
{"imp_2fp", "كُنَّ"},
{"imp_2fs", "كُونِي"},
{"imp_2mp", "كُونُوا"},
{"imp_2ms", "كُنْ"},
{"ind_1p", "نَكُونُ"},
{"ind_1s", "أَكُونُ"},
{"ind_2d", "تَكُونَانِ"},
{"ind_2fp", "تَكُنَّ"},
{"ind_2fs", "تَكُونِينَ"},
{"ind_2mp", "تَكُونُونَ"},
{"ind_2ms", "تَكُونُ"},
{"ind_3fd", "تَكُونَانِ"},
{"ind_3fp", "يَكُنَّ"},
{"ind_3fs", "تَكُونُ"},
{"ind_3md", "يَكُونَانِ"},
{"ind_3mp", "يَكُونُونَ"},
{"ind_3ms", "يَكُونُ"},
{"past_1p", "كُنَّا"},
{"past_1s", "كُنْتُ"},
{"past_2d", "كُنْتُمَا"},
{"past_2fp", "كُنْتُنَّ"},
{"past_2fs", "كُنْتِ"},
{"past_2mp", "كُنْتُمْ"},
{"past_2ms", "كُنْتَ"},
{"past_3fd", "كَانَتَا"},
{"past_3fp", "كُنَّ"},
{"past_3fs", "كَانَتْ"},
{"past_3md", "كَانَا"},
{"past_3mp", "كَانُوا"},
{"past_3ms", "كَانَ"},
},
},
{
label = "عَلا ـُ (p159، ناقص واوي)", root = "علو", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "اُعْلُوَا"},
{"imp_2fp", "اُعْلُونَ"},
{"imp_2fs", "اُعْلِي"},
{"imp_2mp", "اُعْلُوا"},
{"imp_2ms", "اُعْلُ"},
{"ind_1p", "نَعْلُو"},
{"ind_1s", "أَعْلُو"},
{"ind_2d", "تَعْلُوَانِ"},
{"ind_2fp", "تَعْلُونَ"},
{"ind_2fs", "تَعْلِينَ"},
{"ind_2mp", "تَعْلُونَ"},
{"ind_2ms", "تَعْلُو"},
{"ind_3fd", "تَعْلُوَانِ"},
{"ind_3fp", "يَعْلُونَ"},
{"ind_3fs", "تَعْلُو"},
{"ind_3md", "يَعْلُوَانِ"},
{"ind_3mp", "يَعْلُونَ"},
{"ind_3ms", "يَعْلُو"},
{"past_1p", "عَلَوْنَا"},
{"past_1s", "عَلَوْتُ"},
{"past_2d", "عَلَوْتُمَا"},
{"past_2fp", "عَلَوْتُنَّ"},
{"past_2fs", "عَلَوْتِ"},
{"past_2mp", "عَلَوْتُمْ"},
{"past_2ms", "عَلَوْتَ"},
{"past_3fd", "عَلَتَا"},
{"past_3fp", "عَلَوْنَ"},
{"past_3fs", "عَلَتْ"},
{"past_3md", "عَلَوَا"},
{"past_3mp", "عَلَوْا"},
{"past_3ms", "عَلَا"},
},
},
{
label = "غَزا ـُ (p159، ناقص واوي)", root = "غزو", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "اُغْزُوَا"},
{"imp_2fp", "اُغْزُونَ"},
{"imp_2fs", "اُغْزِي"},
{"imp_2mp", "اُغْزُوا"},
{"imp_2ms", "اُغْزُ"},
{"ind_1p", "نَغْزُو"},
{"ind_1s", "أَغْزُو"},
{"ind_2d", "تَغْزُوَانِ"},
{"ind_2fp", "تَغْزُونَ"},
{"ind_2fs", "تَغْزِينَ"},
{"ind_2mp", "تَغْزُونَ"},
{"ind_2ms", "تَغْزُو"},
{"ind_3fd", "تَغْزُوَانِ"},
{"ind_3fp", "يَغْزُونَ"},
{"ind_3fs", "تَغْزُو"},
{"ind_3md", "يَغْزُوَانِ"},
{"ind_3mp", "يَغْزُونَ"},
{"ind_3ms", "يَغْزُو"},
{"past_1p", "غَزَوْنَا"},
{"past_1s", "غَزَوْتُ"},
{"past_2d", "غَزَوْتُمَا"},
{"past_2fp", "غَزَوْتُنَّ"},
{"past_2fs", "غَزَوْتِ"},
{"past_2mp", "غَزَوْتُمْ"},
{"past_2ms", "غَزَوْتَ"},
{"past_3fd", "غَزَتَا"},
{"past_3fp", "غَزَوْنَ"},
{"past_3fs", "غَزَتْ"},
{"past_3md", "غَزَوَا"},
{"past_3mp", "غَزَوْا"},
{"past_3ms", "غَزَا"},
},
},
{
label = "تَثَنَّى (p316، ناقص يائي)", root = "ثني", wazn = "تفعّل",
forms = {
{"imp_2d", "تَثَنَّيَا"},
{"imp_2fp", "تَثَنَّيْنَ"},
{"imp_2fs", "تَثَنَّيْ"},
{"imp_2mp", "تَثَنَّوْا"},
{"imp_2ms", "تَثَنَّ"},
{"ind_1p", "نَتَثَنَّى"},
{"ind_1s", "أَتَثَنَّى"},
{"ind_2d", "تَتَثَنَّيَانِ"},
{"ind_2fp", "تَتَثَنَّيْنَ"},
{"ind_2fs", "تَتَثَنَّيْنَ"},
{"ind_2mp", "تَتَثَنَّوْنَ"},
{"ind_2ms", "تَتَثَنَّى"},
{"ind_3fd", "تَتَثَنَّيَانِ"},
{"ind_3fp", "يَتَثَنَّيْنَ"},
{"ind_3fs", "تَتَثَنَّى"},
{"ind_3md", "يَتَثَنَّيَانِ"},
{"ind_3mp", "يَتَثَنَّوْنَ"},
{"ind_3ms", "يَتَثَنَّى"},
{"past_1p", "تَثَنَّيْنَا"},
{"past_1s", "تَثَنَّيْتُ"},
{"past_2d", "تَثَنَّيْتُمَا"},
{"past_2fp", "تَثَنَّيْتُنَّ"},
{"past_2fs", "تَثَنَّيْتِ"},
{"past_2mp", "تَثَنَّيْتُمْ"},
{"past_2ms", "تَثَنَّيْتَ"},
{"past_3fd", "تَثَنَّتَا"},
{"past_3fp", "تَثَنَّيْنَ"},
{"past_3fs", "تَثَنَّتْ"},
{"past_3md", "تَثَنَّيَا"},
{"past_3mp", "تَثَنَّوْا"},
{"past_3ms", "تَثَنَّى"},
},
},
{
label = "تَرَدَّى (p316، ناقص يائي)", root = "ردي", wazn = "تفعّل",
forms = {
{"imp_2d", "تَرَدَّيَا"},
{"imp_2fp", "تَرَدَّيْنَ"},
{"imp_2fs", "تَرَدَّيْ"},
{"imp_2mp", "تَرَدَّوْا"},
{"imp_2ms", "تَرَدَّ"},
{"ind_1p", "نَتَرَدَّى"},
{"ind_1s", "أَتَرَدَّى"},
{"ind_2d", "تَتَرَدَّيَانِ"},
{"ind_2fp", "تَتَرَدَّيْنَ"},
{"ind_2fs", "تَتَرَدَّيْنَ"},
{"ind_2mp", "تَتَرَدَّوْنَ"},
{"ind_2ms", "تَتَرَدَّى"},
{"ind_3fd", "تَتَرَدَّيَانِ"},
{"ind_3fp", "يَتَرَدَّيْنَ"},
{"ind_3fs", "تَتَرَدَّى"},
{"ind_3md", "يَتَرَدَّيَانِ"},
{"ind_3mp", "يَتَرَدَّوْنَ"},
{"ind_3ms", "يَتَرَدَّى"},
{"past_1p", "تَرَدَّيْنَا"},
{"past_1s", "تَرَدَّيْتُ"},
{"past_2d", "تَرَدَّيْتُمَا"},
{"past_2fp", "تَرَدَّيْتُنَّ"},
{"past_2fs", "تَرَدَّيْتِ"},
{"past_2mp", "تَرَدَّيْتُمْ"},
{"past_2ms", "تَرَدَّيْتَ"},
{"past_3fd", "تَرَدَّتَا"},
{"past_3fp", "تَرَدَّيْنَ"},
{"past_3fs", "تَرَدَّتْ"},
{"past_3md", "تَرَدَّيَا"},
{"past_3mp", "تَرَدَّوْا"},
{"past_3ms", "تَرَدَّى"},
},
},
{
label = "تَأَتَّى (p317، ناقص مهموز الفاء)", root = "أتي", wazn = "تفعّل",
forms = {
{"imp_2d", "تَأَتَّيَا"},
{"imp_2fp", "تَأَتَّيْنَ"},
{"imp_2fs", "تَأَتَّيْ"},
{"imp_2mp", "تَأَتَّوْا"},
{"imp_2ms", "تَأَتَّ"},
{"ind_1p", "نَتَأَتَّى"},
{"ind_1s", "أَتَأَتَّى"},
{"ind_2d", "تَتَأَتَّيَانِ"},
{"ind_2fp", "تَتَأَتَّيْنَ"},
{"ind_2fs", "تَتَأَتَّيْنَ"},
{"ind_2mp", "تَتَأَتَّوْنَ"},
{"ind_2ms", "تَتَأَتَّى"},
{"ind_3fd", "تَتَأَتَّيَانِ"},
{"ind_3fp", "يَتَأَتَّيْنَ"},
{"ind_3fs", "تَتَأَتَّى"},
{"ind_3md", "يَتَأَتَّيَانِ"},
{"ind_3mp", "يَتَأَتَّوْنَ"},
{"ind_3ms", "يَتَأَتَّى"},
{"past_1p", "تَأَتَّيْنَا"},
{"past_1s", "تَأَتَّيْتُ"},
{"past_2d", "تَأَتَّيْتُمَا"},
{"past_2fp", "تَأَتَّيْتُنَّ"},
{"past_2fs", "تَأَتَّيْتِ"},
{"past_2mp", "تَأَتَّيْتُمْ"},
{"past_2ms", "تَأَتَّيْتَ"},
{"past_3fd", "تَأَتَّتَا"},
{"past_3fp", "تَأَتَّيْنَ"},
{"past_3fs", "تَأَتَّتْ"},
{"past_3md", "تَأَتَّيَا"},
{"past_3mp", "تَأَتَّوْا"},
{"past_3ms", "تَأَتَّى"},
},
},
{
label = "تَوَخَّى (p317، ناقص يائي)", root = "وخي", wazn = "تفعّل",
forms = {
{"imp_2d", "تَوَخَّيَا"},
{"imp_2fp", "تَوَخَّيْنَ"},
{"imp_2fs", "تَوَخَّيْ"},
{"imp_2mp", "تَوَخَّوْا"},
{"imp_2ms", "تَوَخَّ"},
{"ind_1p", "نَتَوَخَّى"},
{"ind_1s", "أَتَوَخَّى"},
{"ind_2d", "تَتَوَخَّيَانِ"},
{"ind_2fp", "تَتَوَخَّيْنَ"},
{"ind_2fs", "تَتَوَخَّيْنَ"},
{"ind_2mp", "تَتَوَخَّوْنَ"},
{"ind_2ms", "تَتَوَخَّى"},
{"ind_3fd", "تَتَوَخَّيَانِ"},
{"ind_3fp", "يَتَوَخَّيْنَ"},
{"ind_3fs", "تَتَوَخَّى"},
{"ind_3md", "يَتَوَخَّيَانِ"},
{"ind_3mp", "يَتَوَخَّوْنَ"},
{"ind_3ms", "يَتَوَخَّى"},
{"past_1p", "تَوَخَّيْنَا"},
{"past_1s", "تَوَخَّيْتُ"},
{"past_2d", "تَوَخَّيْتُمَا"},
{"past_2fp", "تَوَخَّيْتُنَّ"},
{"past_2fs", "تَوَخَّيْتِ"},
{"past_2mp", "تَوَخَّيْتُمْ"},
{"past_2ms", "تَوَخَّيْتَ"},
{"past_3fd", "تَوَخَّتَا"},
{"past_3fp", "تَوَخَّيْنَ"},
{"past_3fs", "تَوَخَّتْ"},
{"past_3md", "تَوَخَّيَا"},
{"past_3mp", "تَوَخَّوْا"},
{"past_3ms", "تَوَخَّى"},
},
},
{
label = "تَوَعَّى (p318، لفيف مفروق)", root = "وعي", wazn = "تفعّل",
forms = {
{"imp_2d", "تَوَعَّيَا"},
{"imp_2fp", "تَوَعَّيْنَ"},
{"imp_2fs", "تَوَعَّيْ"},
{"imp_2mp", "تَوَعَّوْا"},
{"imp_2ms", "تَوَعَّ"},
{"ind_1p", "نَتَوَعَّى"},
{"ind_1s", "أَتَوَعَّى"},
{"ind_2d", "تَتَوَعَّيَانِ"},
{"ind_2fp", "تَتَوَعَّيْنَ"},
{"ind_2fs", "تَتَوَعَّيْنَ"},
{"ind_2mp", "تَتَوَعَّوْنَ"},
{"ind_2ms", "تَتَوَعَّى"},
{"ind_3fd", "تَتَوَعَّيَانِ"},
{"ind_3fp", "يَتَوَعَّيْنَ"},
{"ind_3fs", "تَتَوَعَّى"},
{"ind_3md", "يَتَوَعَّيَانِ"},
{"ind_3mp", "يَتَوَعَّوْنَ"},
{"ind_3ms", "يَتَوَعَّى"},
{"past_1p", "تَوَعَّيْنَا"},
{"past_1s", "تَوَعَّيْتُ"},
{"past_2d", "تَوَعَّيْتُمَا"},
{"past_2fp", "تَوَعَّيْتُنَّ"},
{"past_2fs", "تَوَعَّيْتِ"},
{"past_2mp", "تَوَعَّيْتُمْ"},
{"past_2ms", "تَوَعَّيْتَ"},
{"past_3fd", "تَوَعَّتَا"},
{"past_3fp", "تَوَعَّيْنَ"},
{"past_3fs", "تَوَعَّتْ"},
{"past_3md", "تَوَعَّيَا"},
{"past_3mp", "تَوَعَّوْا"},
{"past_3ms", "تَوَعَّى"},
},
},
{
label = "تَوَفَّى (p318، لفيف مفروق)", root = "وفي", wazn = "تفعّل",
forms = {
{"imp_2d", "تَوَفَّيَا"},
{"imp_2fp", "تَوَفَّيْنَ"},
{"imp_2fs", "تَوَفَّيْ"},
{"imp_2mp", "تَوَفَّوْا"},
{"imp_2ms", "تَوَفَّ"},
{"ind_1p", "نَتَوَفَّى"},
{"ind_1s", "أَتَوَفَّى"},
{"ind_2d", "تَتَوَفَّيَانِ"},
{"ind_2fp", "تَتَوَفَّيْنَ"},
{"ind_2fs", "تَتَوَفَّيْنَ"},
{"ind_2mp", "تَتَوَفَّوْنَ"},
{"ind_2ms", "تَتَوَفَّى"},
{"ind_3fd", "تَتَوَفَّيَانِ"},
{"ind_3fp", "يَتَوَفَّيْنَ"},
{"ind_3fs", "تَتَوَفَّى"},
{"ind_3md", "يَتَوَفَّيَانِ"},
{"ind_3mp", "يَتَوَفَّوْنَ"},
{"ind_3ms", "يَتَوَفَّى"},
{"past_1p", "تَوَفَّيْنَا"},
{"past_1s", "تَوَفَّيْتُ"},
{"past_2d", "تَوَفَّيْتُمَا"},
{"past_2fp", "تَوَفَّيْتُنَّ"},
{"past_2fs", "تَوَفَّيْتِ"},
{"past_2mp", "تَوَفَّيْتُمْ"},
{"past_2ms", "تَوَفَّيْتَ"},
{"past_3fd", "تَوَفَّتَا"},
{"past_3fp", "تَوَفَّيْنَ"},
{"past_3fs", "تَوَفَّتْ"},
{"past_3md", "تَوَفَّيَا"},
{"past_3mp", "تَوَفَّوْا"},
{"past_3ms", "تَوَفَّى"},
},
},
{
label = "تَنَوَّى (p319، لفيف مقرون)", root = "نوي", wazn = "تفعّل",
forms = {
{"imp_2d", "تَنَوَّيَا"},
{"imp_2fp", "تَنَوَّيْنَ"},
{"imp_2fs", "تَنَوَّيْ"},
{"imp_2mp", "تَنَوَّوْا"},
{"imp_2ms", "تَنَوَّ"},
{"ind_1p", "نَتَنَوَّى"},
{"ind_1s", "أَتَنَوَّى"},
{"ind_2d", "تَتَنَوَّيَانِ"},
{"ind_2fp", "تَتَنَوَّيْنَ"},
{"ind_2fs", "تَتَنَوَّيْنَ"},
{"ind_2mp", "تَتَنَوَّوْنَ"},
{"ind_2ms", "تَتَنَوَّى"},
{"ind_3fd", "تَتَنَوَّيَانِ"},
{"ind_3fp", "يَتَنَوَّيْنَ"},
{"ind_3fs", "تَتَنَوَّى"},
{"ind_3md", "يَتَنَوَّيَانِ"},
{"ind_3mp", "يَتَنَوَّوْنَ"},
{"ind_3ms", "يَتَنَوَّى"},
{"past_1p", "تَنَوَّيْنَا"},
{"past_1s", "تَنَوَّيْتُ"},
{"past_2d", "تَنَوَّيْتُمَا"},
{"past_2fp", "تَنَوَّيْتُنَّ"},
{"past_2fs", "تَنَوَّيْتِ"},
{"past_2mp", "تَنَوَّيْتُمْ"},
{"past_2ms", "تَنَوَّيْتَ"},
{"past_3fd", "تَنَوَّتَا"},
{"past_3fp", "تَنَوَّيْنَ"},
{"past_3fs", "تَنَوَّتْ"},
{"past_3md", "تَنَوَّيَا"},
{"past_3mp", "تَنَوَّوْا"},
{"past_3ms", "تَنَوَّى"},
},
},
{
label = "تَرَوَّى (p319، لفيف مقرون)", root = "روي", wazn = "تفعّل",
forms = {
{"imp_2d", "تَرَوَّيَا"},
{"imp_2fp", "تَرَوَّيْنَ"},
{"imp_2fs", "تَرَوَّيْ"},
{"imp_2mp", "تَرَوَّوْا"},
{"imp_2ms", "تَرَوَّ"},
{"ind_1p", "نَتَرَوَّى"},
{"ind_1s", "أَتَرَوَّى"},
{"ind_2d", "تَتَرَوَّيَانِ"},
{"ind_2fp", "تَتَرَوَّيْنَ"},
{"ind_2fs", "تَتَرَوَّيْنَ"},
{"ind_2mp", "تَتَرَوَّوْنَ"},
{"ind_2ms", "تَتَرَوَّى"},
{"ind_3fd", "تَتَرَوَّيَانِ"},
{"ind_3fp", "يَتَرَوَّيْنَ"},
{"ind_3fs", "تَتَرَوَّى"},
{"ind_3md", "يَتَرَوَّيَانِ"},
{"ind_3mp", "يَتَرَوَّوْنَ"},
{"ind_3ms", "يَتَرَوَّى"},
{"past_1p", "تَرَوَّيْنَا"},
{"past_1s", "تَرَوَّيْتُ"},
{"past_2d", "تَرَوَّيْتُمَا"},
{"past_2fp", "تَرَوَّيْتُنَّ"},
{"past_2fs", "تَرَوَّيْتِ"},
{"past_2mp", "تَرَوَّيْتُمْ"},
{"past_2ms", "تَرَوَّيْتَ"},
{"past_3fd", "تَرَوَّتَا"},
{"past_3fp", "تَرَوَّيْنَ"},
{"past_3fs", "تَرَوَّتْ"},
{"past_3md", "تَرَوَّيَا"},
{"past_3mp", "تَرَوَّوْا"},
{"past_3ms", "تَرَوَّى"},
},
},
{
label = "تَقاعَدَ (p321، صحيح سالم)", root = "قعد", wazn = "تفاعل",
forms = {
{"imp_2d", "تَقَاعَدَا"},
{"imp_2fp", "تَقَاعَدْنَ"},
{"imp_2fs", "تَقَاعَدِي"},
{"imp_2mp", "تَقَاعَدُوا"},
{"imp_2ms", "تَقَاعَدْ"},
{"ind_1p", "نَتَقَاعَدُ"},
{"ind_1s", "أَتَقَاعَدُ"},
{"ind_2d", "تَتَقَاعَدَانِ"},
{"ind_2fp", "تَتَقَاعَدْنَ"},
{"ind_2fs", "تَتَقَاعَدِينَ"},
{"ind_2mp", "تَتَقَاعَدُونَ"},
{"ind_2ms", "تَتَقَاعَدُ"},
{"ind_3fd", "تَتَقَاعَدَانِ"},
{"ind_3fp", "يَتَقَاعَدْنَ"},
{"ind_3fs", "تَتَقَاعَدُ"},
{"ind_3md", "يَتَقَاعَدَانِ"},
{"ind_3mp", "يَتَقَاعَدُونَ"},
{"ind_3ms", "يَتَقَاعَدُ"},
{"past_1p", "تَقَاعَدْنَا"},
{"past_1s", "تَقَاعَدْتُ"},
{"past_2d", "تَقَاعَدْتُمَا"},
{"past_2fp", "تَقَاعَدْتُنَّ"},
{"past_2fs", "تَقَاعَدْتِ"},
{"past_2mp", "تَقَاعَدْتُمْ"},
{"past_2ms", "تَقَاعَدْتَ"},
{"past_3fd", "تَقَاعَدَتَا"},
{"past_3fp", "تَقَاعَدْنَ"},
{"past_3fs", "تَقَاعَدَتْ"},
{"past_3md", "تَقَاعَدَا"},
{"past_3mp", "تَقَاعَدُوا"},
{"past_3ms", "تَقَاعَدَ"},
},
},
{
label = "تَنازَلَ (p321، صحيح سالم)", root = "نزل", wazn = "تفاعل",
forms = {
{"imp_2d", "تَنَازَلَا"},
{"imp_2fp", "تَنَازَلْنَ"},
{"imp_2fs", "تَنَازَلِي"},
{"imp_2mp", "تَنَازَلُوا"},
{"imp_2ms", "تَنَازَلْ"},
{"ind_1p", "نَتَنَازَلُ"},
{"ind_1s", "أَتَنَازَلُ"},
{"ind_2d", "تَتَنَازَلَانِ"},
{"ind_2fp", "تَتَنَازَلْنَ"},
{"ind_2fs", "تَتَنَازَلِينَ"},
{"ind_2mp", "تَتَنَازَلُونَ"},
{"ind_2ms", "تَتَنَازَلُ"},
{"ind_3fd", "تَتَنَازَلَانِ"},
{"ind_3fp", "يَتَنَازَلْنَ"},
{"ind_3fs", "تَتَنَازَلُ"},
{"ind_3md", "يَتَنَازَلَانِ"},
{"ind_3mp", "يَتَنَازَلُونَ"},
{"ind_3ms", "يَتَنَازَلُ"},
{"past_1p", "تَنَازَلْنَا"},
{"past_1s", "تَنَازَلْتُ"},
{"past_2d", "تَنَازَلْتُمَا"},
{"past_2fp", "تَنَازَلْتُنَّ"},
{"past_2fs", "تَنَازَلْتِ"},
{"past_2mp", "تَنَازَلْتُمْ"},
{"past_2ms", "تَنَازَلْتَ"},
{"past_3fd", "تَنَازَلَتَا"},
{"past_3fp", "تَنَازَلْنَ"},
{"past_3fs", "تَنَازَلَتْ"},
{"past_3md", "تَنَازَلَا"},
{"past_3mp", "تَنَازَلُوا"},
{"past_3ms", "تَنَازَلَ"},
},
},
{
label = "ضَمَّ (p148)", root = "ضمم", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "ضُمَّا"},
{"imp_2fp", "اُضْمُمْنَ"},
{"imp_2fs", "ضُمِّي"},
{"imp_2mp", "ضُمُّوا"},
{"imp_2ms", "ضُمَّ"},
{"ind_1p", "نَضُمُّ"},
{"ind_1s", "أَضُمُّ"},
{"ind_2d", "تَضُمَّانِ"},
{"ind_2fp", "تَضْمُمْنَ"},
{"ind_2fs", "تَضُمِّينَ"},
{"ind_2mp", "تَضُمُّونَ"},
{"ind_2ms", "تَضُمُّ"},
{"ind_3fd", "تَضُمَّانِ"},
{"ind_3fp", "يَضْمُمْنَ"},
{"ind_3fs", "تَضُمُّ"},
{"ind_3md", "يَضُمَّانِ"},
{"ind_3mp", "يَضُمُّونَ"},
{"ind_3ms", "يَضُمُّ"},
{"past_1p", "ضَمَمْنَا"},
{"past_1s", "ضَمَمْتُ"},
{"past_2d", "ضَمَمْتُمَا"},
{"past_2fp", "ضَمَمْتُنَّ"},
{"past_2fs", "ضَمَمْتِ"},
{"past_2mp", "ضَمَمْتُمْ"},
{"past_2ms", "ضَمَمْتَ"},
{"past_3fd", "ضَمَّتَا"},
{"past_3fp", "ضَمَمْنَ"},
{"past_3fs", "ضَمَّتْ"},
{"past_3md", "ضَمَّا"},
{"past_3mp", "ضَمُّوا"},
{"past_3ms", "ضَمَّ"},
},
},
{
label = "كَبَّ (p148)", root = "كبب", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "كُبَّا"},
{"imp_2fp", "اُكْبُبْنَ"},
{"imp_2fs", "كُبِّي"},
{"imp_2mp", "كُبُّوا"},
{"imp_2ms", "كُبَّ"},
{"ind_1p", "نَكُبُّ"},
{"ind_1s", "أَكُبُّ"},
{"ind_2d", "تَكُبَّانِ"},
{"ind_2fp", "تَكْبُبْنَ"},
{"ind_2fs", "تَكُبِّينَ"},
{"ind_2mp", "تَكُبُّونَ"},
{"ind_2ms", "تَكُبُّ"},
{"ind_3fd", "تَكُبَّانِ"},
{"ind_3fp", "يَكْبُبْنَ"},
{"ind_3fs", "تَكُبُّ"},
{"ind_3md", "يَكُبَّانِ"},
{"ind_3mp", "يَكُبُّونَ"},
{"ind_3ms", "يَكُبُّ"},
{"past_1p", "كَبَبْنَا"},
{"past_1s", "كَبَبْتُ"},
{"past_2d", "كَبَبْتُمَا"},
{"past_2fp", "كَبَبْتُنَّ"},
{"past_2fs", "كَبَبْتِ"},
{"past_2mp", "كَبَبْتُمْ"},
{"past_2ms", "كَبَبْتَ"},
{"past_3fd", "كَبَّتَا"},
{"past_3fp", "كَبَبْنَ"},
{"past_3fs", "كَبَّتْ"},
{"past_3md", "كَبَّا"},
{"past_3mp", "كَبُّوا"},
{"past_3ms", "كَبَّ"},
},
},
{
label = "أَبَّ (p149)", root = "أبب", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "أُبَّا"},
{"imp_2fp", "اُؤْبُبْنَ"},
{"imp_2fs", "أُبِّي"},
{"imp_2mp", "أُبُّوا"},
{"imp_2ms", "اُؤْبُبْ"},
{"ind_1p", "نَؤُبُّ"},
{"ind_1s", "أَؤُبُّ"},
{"ind_2d", "تَؤُبَّانِ"},
{"ind_2fp", "تَأْبُبْنَ"},
{"ind_2fs", "تَؤُبِّينَ"},
{"ind_2mp", "تَؤُبُّونَ"},
{"ind_2ms", "تَؤُبُّ"},
{"ind_3fd", "تَؤُبَّانِ"},
{"ind_3fp", "يَأْبُبْنَ"},
{"ind_3fs", "تَؤُبُّ"},
{"ind_3md", "يَؤُبَّانِ"},
{"ind_3mp", "يَؤُبُّونَ"},
{"ind_3ms", "يَؤُبُّ"},
{"past_1p", "أَبَبْنَا"},
{"past_1s", "أَبَبْتُ"},
{"past_2d", "أَبَبْتُمَا"},
{"past_2fp", "أَبَبْتُنَّ"},
{"past_2fs", "أَبَبْتِ"},
{"past_2mp", "أَبَبْتُمْ"},
{"past_2ms", "أَبَبْتَ"},
{"past_3fd", "أَبَّتَا"},
{"past_3fp", "أَبَبْنَ"},
{"past_3fs", "أَبَّتْ"},
{"past_3md", "أَبَّا"},
{"past_3mp", "أَبُّوا"},
{"past_3ms", "أَبَّ"},
},
},
{
label = "أَمَّ (p149)", root = "أمم", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "أُمَّا"},
{"imp_2fp", "اُؤْمُمْنَ"},
{"imp_2fs", "أُمِّي"},
{"imp_2mp", "أُمُّوا"},
{"imp_2ms", "اُؤْمُمْ"},
{"ind_1p", "نَؤُمُّ"},
{"ind_1s", "أَؤُمُّ"},
{"ind_2d", "تَؤُمَّانِ"},
{"ind_2fp", "تَأْمُمْنَ"},
{"ind_2fs", "تَؤُمِّينَ"},
{"ind_2mp", "تَؤُمُّونَ"},
{"ind_2ms", "تَؤُمُّ"},
{"ind_3fd", "تَؤُمَّانِ"},
{"ind_3fp", "يَأْمُمْنَ"},
{"ind_3fs", "تَؤُمُّ"},
{"ind_3md", "يَؤُمَّانِ"},
{"ind_3mp", "يَؤُمُّونَ"},
{"ind_3ms", "يَؤُمُّ"},
{"past_1p", "أَمَمْنَا"},
{"past_1s", "أَمَمْتُ"},
{"past_2d", "أَمَمْتُمَا"},
{"past_2fp", "أَمَمْتُنَّ"},
{"past_2fs", "أَمَمْتِ"},
{"past_2mp", "أَمَمْتُمْ"},
{"past_2ms", "أَمَمْتَ"},
{"past_3fd", "أَمَّتَا"},
{"past_3fp", "أَمَمْنَ"},
{"past_3fs", "أَمَّتْ"},
{"past_3md", "أَمَّا"},
{"past_3mp", "أَمُّوا"},
{"past_3ms", "أَمَّ"},
},
},
{
label = "جَلَسَ (p162)", root = "جلس", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِجْلِسَا"},
{"imp_2fp", "اِجْلِسْنَ"},
{"imp_2fs", "اِجْلِسِي"},
{"imp_2mp", "اِجْلِسُوا"},
{"imp_2ms", "اِجْلِسْ"},
{"ind_1p", "نَجْلِسُ"},
{"ind_1s", "أَجْلِسُ"},
{"ind_2d", "تَجْلِسَانِ"},
{"ind_2fp", "تَجْلِسْنَ"},
{"ind_2fs", "تَجْلِسِينَ"},
{"ind_2mp", "تَجْلِسُونَ"},
{"ind_2ms", "تَجْلِسُ"},
{"ind_3fd", "تَجْلِسَانِ"},
{"ind_3fp", "يَجْلِسْنَ"},
{"ind_3fs", "تَجْلِسُ"},
{"ind_3md", "يَجْلِسَانِ"},
{"ind_3mp", "يَجْلِسُونَ"},
{"ind_3ms", "يَجْلِسُ"},
{"past_1p", "جَلَسْنَا"},
{"past_1s", "جَلَسْتُ"},
{"past_2d", "جَلَسْتُمَا"},
{"past_2fp", "جَلَسْتُنَّ"},
{"past_2fs", "جَلَسْتِ"},
{"past_2mp", "جَلَسْتُمْ"},
{"past_2ms", "جَلَسْتَ"},
{"past_3fd", "جَلَسَتَا"},
{"past_3fp", "جَلَسْنَ"},
{"past_3fs", "جَلَسَتْ"},
{"past_3md", "جَلَسَا"},
{"past_3mp", "جَلَسُوا"},
{"past_3ms", "جَلَسَ"},
},
},
{
label = "رَجَعَ (p162)", root = "رجع", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِرْجِعَا"},
{"imp_2fp", "اِرْجِعْنَ"},
{"imp_2fs", "اِرْجِعِي"},
{"imp_2mp", "اِرْجِعُوا"},
{"imp_2ms", "اِرْجِعْ"},
{"ind_1p", "نَرْجِعُ"},
{"ind_1s", "أَرْجِعُ"},
{"ind_2d", "تَرْجِعَانِ"},
{"ind_2fp", "تَرْجِعْنَ"},
{"ind_2fs", "تَرْجِعِينَ"},
{"ind_2mp", "تَرْجِعُونَ"},
{"ind_2ms", "تَرْجِعُ"},
{"ind_3fd", "تَرْجِعَانِ"},
{"ind_3fp", "يَرْجِعْنَ"},
{"ind_3fs", "تَرْجِعُ"},
{"ind_3md", "يَرْجِعَانِ"},
{"ind_3mp", "يَرْجِعُونَ"},
{"ind_3ms", "يَرْجِعُ"},
{"past_1p", "رَجَعْنَا"},
{"past_1s", "رَجَعْتُ"},
{"past_2d", "رَجَعْتُمَا"},
{"past_2fp", "رَجَعْتُنَّ"},
{"past_2fs", "رَجَعْتِ"},
{"past_2mp", "رَجَعْتُمْ"},
{"past_2ms", "رَجَعْتَ"},
{"past_3fd", "رَجَعَتَا"},
{"past_3fp", "رَجَعْنَ"},
{"past_3fs", "رَجَعَتْ"},
{"past_3md", "رَجَعَا"},
{"past_3mp", "رَجَعُوا"},
{"past_3ms", "رَجَعَ"},
},
},
{
label = "جَزَمَ (p163)", root = "جزم", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِجْزِمَا"},
{"imp_2fp", "اِجْزِمْنَ"},
{"imp_2fs", "اِجْزِمِي"},
{"imp_2mp", "اِجْزِمُوا"},
{"imp_2ms", "اِجْزِمْ"},
{"ind_1p", "نَجْزِمُ"},
{"ind_1s", "أَجْزِمُ"},
{"ind_2d", "تَجْزِمَانِ"},
{"ind_2fp", "تَجْزِمْنَ"},
{"ind_2fs", "تَجْزِمِينَ"},
{"ind_2mp", "تَجْزِمُونَ"},
{"ind_2ms", "تَجْزِمُ"},
{"ind_3fd", "تَجْزِمَانِ"},
{"ind_3fp", "يَجْزِمْنَ"},
{"ind_3fs", "تَجْزِمُ"},
{"ind_3md", "يَجْزِمَانِ"},
{"ind_3mp", "يَجْزِمُونَ"},
{"ind_3ms", "يَجْزِمُ"},
{"past_1p", "جَزَمْنَا"},
{"past_1s", "جَزَمْتُ"},
{"past_2d", "جَزَمْتُمَا"},
{"past_2fp", "جَزَمْتُنَّ"},
{"past_2fs", "جَزَمْتِ"},
{"past_2mp", "جَزَمْتُمْ"},
{"past_2ms", "جَزَمْتَ"},
{"past_3fd", "جَزَمَتَا"},
{"past_3fp", "جَزَمْنَ"},
{"past_3fs", "جَزَمَتْ"},
{"past_3md", "جَزَمَا"},
{"past_3mp", "جَزَمُوا"},
{"past_3ms", "جَزَمَ"},
},
},
}
5yem3gkcbuo7zqvrqgxkav38msduluv
وحدة:ar-verb/testcases/5
828
241797
1159014
1158882
2026-09-10T12:39:24Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159014
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 5 من 15. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/5")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_5()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
l7t72z6w8ouuqdfvaxypv41h02j92vd
1159072
1159014
2026-09-10T19:33:57Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159072
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 5 من 16. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/5")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_5()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
eokgu3boj8bgx3quny45pr7ofr8kwo4
نقاش الوحدة:ar-verb/testcases/1
829
241825
1159003
1158871
2026-09-10T12:39:10Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159003
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/1|الجزء 1 من 15]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، 1، [[نقاش الوحدة:ar-verb/testcases/2|2]]، [[نقاش الوحدة:ar-verb/testcases/3|3]]، [[نقاش الوحدة:ar-verb/testcases/4|4]]، [[نقاش الوحدة:ar-verb/testcases/5|5]]، [[نقاش الوحدة:ar-verb/testcases/6|6]]، [[نقاش الوحدة:ar-verb/testcases/7|7]]، [[نقاش الوحدة:ar-verb/testcases/8|8]]، [[نقاش الوحدة:ar-verb/testcases/9|9]]، [[نقاش الوحدة:ar-verb/testcases/10|10]]، [[نقاش الوحدة:ar-verb/testcases/11|11]]، [[نقاش الوحدة:ar-verb/testcases/12|12]]، [[نقاش الوحدة:ar-verb/testcases/13|13]]، [[نقاش الوحدة:ar-verb/testcases/14|14]]، [[نقاش الوحدة:ar-verb/testcases/15|15]] — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/1|run_tests}}
4wujq7giopveodzylj1xei1n92hi57m
1159061
1159003
2026-09-10T19:33:38Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159061
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/1|الجزء 1 من 16]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، 1، [[نقاش الوحدة:ar-verb/testcases/2|2]]، [[نقاش الوحدة:ar-verb/testcases/3|3]]، [[نقاش الوحدة:ar-verb/testcases/4|4]]، [[نقاش الوحدة:ar-verb/testcases/5|5]]، [[نقاش الوحدة:ar-verb/testcases/6|6]]، [[نقاش الوحدة:ar-verb/testcases/7|7]]، [[نقاش الوحدة:ar-verb/testcases/8|8]]، [[نقاش الوحدة:ar-verb/testcases/9|9]]، [[نقاش الوحدة:ar-verb/testcases/10|10]]، [[نقاش الوحدة:ar-verb/testcases/11|11]]، [[نقاش الوحدة:ar-verb/testcases/12|12]]، [[نقاش الوحدة:ar-verb/testcases/13|13]]، [[نقاش الوحدة:ar-verb/testcases/14|14]]، [[نقاش الوحدة:ar-verb/testcases/15|15]]، [[نقاش الوحدة:ar-verb/testcases/16|16]] — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/1|run_tests}}
k3noqcatbc8dmk1y8llufm0h7hvth3q
نقاش الوحدة:ar-verb/testcases/2
829
241826
1159006
1158874
2026-09-10T12:39:14Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159006
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/2|الجزء 2 من 15]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، [[نقاش الوحدة:ar-verb/testcases/1|1]]، 2، [[نقاش الوحدة:ar-verb/testcases/3|3]]، [[نقاش الوحدة:ar-verb/testcases/4|4]]، [[نقاش الوحدة:ar-verb/testcases/5|5]]، [[نقاش الوحدة:ar-verb/testcases/6|6]]، [[نقاش الوحدة:ar-verb/testcases/7|7]]، [[نقاش الوحدة:ar-verb/testcases/8|8]]، [[نقاش الوحدة:ar-verb/testcases/9|9]]، [[نقاش الوحدة:ar-verb/testcases/10|10]]، [[نقاش الوحدة:ar-verb/testcases/11|11]]، [[نقاش الوحدة:ar-verb/testcases/12|12]]، [[نقاش الوحدة:ar-verb/testcases/13|13]]، [[نقاش الوحدة:ar-verb/testcases/14|14]]، [[نقاش الوحدة:ar-verb/testcases/15|15]] — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/2|run_tests}}
nnrrztz9cjtxtj3axkfqrev45n0p3b8
1159064
1159006
2026-09-10T19:33:43Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159064
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/2|الجزء 2 من 16]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، [[نقاش الوحدة:ar-verb/testcases/1|1]]، 2، [[نقاش الوحدة:ar-verb/testcases/3|3]]، [[نقاش الوحدة:ar-verb/testcases/4|4]]، [[نقاش الوحدة:ar-verb/testcases/5|5]]، [[نقاش الوحدة:ar-verb/testcases/6|6]]، [[نقاش الوحدة:ar-verb/testcases/7|7]]، [[نقاش الوحدة:ar-verb/testcases/8|8]]، [[نقاش الوحدة:ar-verb/testcases/9|9]]، [[نقاش الوحدة:ar-verb/testcases/10|10]]، [[نقاش الوحدة:ar-verb/testcases/11|11]]، [[نقاش الوحدة:ar-verb/testcases/12|12]]، [[نقاش الوحدة:ar-verb/testcases/13|13]]، [[نقاش الوحدة:ar-verb/testcases/14|14]]، [[نقاش الوحدة:ar-verb/testcases/15|15]]، [[نقاش الوحدة:ar-verb/testcases/16|16]] — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/2|run_tests}}
pd23269nb7vttc0xhcif02wwx44t2g2
نقاش الوحدة:ar-verb/testcases/3
829
241827
1159009
1158877
2026-09-10T12:39:18Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159009
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/3|الجزء 3 من 15]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، [[نقاش الوحدة:ar-verb/testcases/1|1]]، [[نقاش الوحدة:ar-verb/testcases/2|2]]، 3، [[نقاش الوحدة:ar-verb/testcases/4|4]]، [[نقاش الوحدة:ar-verb/testcases/5|5]]، [[نقاش الوحدة:ar-verb/testcases/6|6]]، [[نقاش الوحدة:ar-verb/testcases/7|7]]، [[نقاش الوحدة:ar-verb/testcases/8|8]]، [[نقاش الوحدة:ar-verb/testcases/9|9]]، [[نقاش الوحدة:ar-verb/testcases/10|10]]، [[نقاش الوحدة:ar-verb/testcases/11|11]]، [[نقاش الوحدة:ar-verb/testcases/12|12]]، [[نقاش الوحدة:ar-verb/testcases/13|13]]، [[نقاش الوحدة:ar-verb/testcases/14|14]]، [[نقاش الوحدة:ar-verb/testcases/15|15]] — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/3|run_tests}}
4lahiyf0hg1qh95rwyimkpzv9r22wgh
1159067
1159009
2026-09-10T19:33:49Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159067
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/3|الجزء 3 من 16]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، [[نقاش الوحدة:ar-verb/testcases/1|1]]، [[نقاش الوحدة:ar-verb/testcases/2|2]]، 3، [[نقاش الوحدة:ar-verb/testcases/4|4]]، [[نقاش الوحدة:ar-verb/testcases/5|5]]، [[نقاش الوحدة:ar-verb/testcases/6|6]]، [[نقاش الوحدة:ar-verb/testcases/7|7]]، [[نقاش الوحدة:ar-verb/testcases/8|8]]، [[نقاش الوحدة:ar-verb/testcases/9|9]]، [[نقاش الوحدة:ar-verb/testcases/10|10]]، [[نقاش الوحدة:ar-verb/testcases/11|11]]، [[نقاش الوحدة:ar-verb/testcases/12|12]]، [[نقاش الوحدة:ar-verb/testcases/13|13]]، [[نقاش الوحدة:ar-verb/testcases/14|14]]، [[نقاش الوحدة:ar-verb/testcases/15|15]]، [[نقاش الوحدة:ar-verb/testcases/16|16]] — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/3|run_tests}}
dz8puxx2ofb4ftjtx1ko5of8xq2rmhp
نقاش الوحدة:ar-verb/testcases/4
829
241828
1159012
1158880
2026-09-10T12:39:21Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159012
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/4|الجزء 4 من 15]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، [[نقاش الوحدة:ar-verb/testcases/1|1]]، [[نقاش الوحدة:ar-verb/testcases/2|2]]، [[نقاش الوحدة:ar-verb/testcases/3|3]]، 4، [[نقاش الوحدة:ar-verb/testcases/5|5]]، [[نقاش الوحدة:ar-verb/testcases/6|6]]، [[نقاش الوحدة:ar-verb/testcases/7|7]]، [[نقاش الوحدة:ar-verb/testcases/8|8]]، [[نقاش الوحدة:ar-verb/testcases/9|9]]، [[نقاش الوحدة:ar-verb/testcases/10|10]]، [[نقاش الوحدة:ar-verb/testcases/11|11]]، [[نقاش الوحدة:ar-verb/testcases/12|12]]، [[نقاش الوحدة:ar-verb/testcases/13|13]]، [[نقاش الوحدة:ar-verb/testcases/14|14]]، [[نقاش الوحدة:ar-verb/testcases/15|15]] — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/4|run_tests}}
dgqpd920jt25d3irmkw28di79321kf2
1159070
1159012
2026-09-10T19:33:54Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159070
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/4|الجزء 4 من 16]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، [[نقاش الوحدة:ar-verb/testcases/1|1]]، [[نقاش الوحدة:ar-verb/testcases/2|2]]، [[نقاش الوحدة:ar-verb/testcases/3|3]]، 4، [[نقاش الوحدة:ar-verb/testcases/5|5]]، [[نقاش الوحدة:ar-verb/testcases/6|6]]، [[نقاش الوحدة:ar-verb/testcases/7|7]]، [[نقاش الوحدة:ar-verb/testcases/8|8]]، [[نقاش الوحدة:ar-verb/testcases/9|9]]، [[نقاش الوحدة:ar-verb/testcases/10|10]]، [[نقاش الوحدة:ar-verb/testcases/11|11]]، [[نقاش الوحدة:ar-verb/testcases/12|12]]، [[نقاش الوحدة:ar-verb/testcases/13|13]]، [[نقاش الوحدة:ar-verb/testcases/14|14]]، [[نقاش الوحدة:ar-verb/testcases/15|15]]، [[نقاش الوحدة:ar-verb/testcases/16|16]] — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/4|run_tests}}
6ivsycaxmoi1pog1anuj4y0cohlci9g
نقاش الوحدة:ar-verb/testcases/5
829
241829
1159015
1158883
2026-09-10T12:39:25Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159015
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/5|الجزء 5 من 15]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، [[نقاش الوحدة:ar-verb/testcases/1|1]]، [[نقاش الوحدة:ar-verb/testcases/2|2]]، [[نقاش الوحدة:ar-verb/testcases/3|3]]، [[نقاش الوحدة:ar-verb/testcases/4|4]]، 5، [[نقاش الوحدة:ar-verb/testcases/6|6]]، [[نقاش الوحدة:ar-verb/testcases/7|7]]، [[نقاش الوحدة:ar-verb/testcases/8|8]]، [[نقاش الوحدة:ar-verb/testcases/9|9]]، [[نقاش الوحدة:ar-verb/testcases/10|10]]، [[نقاش الوحدة:ar-verb/testcases/11|11]]، [[نقاش الوحدة:ar-verb/testcases/12|12]]، [[نقاش الوحدة:ar-verb/testcases/13|13]]، [[نقاش الوحدة:ar-verb/testcases/14|14]]، [[نقاش الوحدة:ar-verb/testcases/15|15]] — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/5|run_tests}}
lr8gjhtr4w80fltsgl6l2owrlboixju
1159073
1159015
2026-09-10T19:33:58Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159073
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/5|الجزء 5 من 16]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، [[نقاش الوحدة:ar-verb/testcases/1|1]]، [[نقاش الوحدة:ar-verb/testcases/2|2]]، [[نقاش الوحدة:ar-verb/testcases/3|3]]، [[نقاش الوحدة:ar-verb/testcases/4|4]]، 5، [[نقاش الوحدة:ar-verb/testcases/6|6]]، [[نقاش الوحدة:ar-verb/testcases/7|7]]، [[نقاش الوحدة:ar-verb/testcases/8|8]]، [[نقاش الوحدة:ar-verb/testcases/9|9]]، [[نقاش الوحدة:ar-verb/testcases/10|10]]، [[نقاش الوحدة:ar-verb/testcases/11|11]]، [[نقاش الوحدة:ar-verb/testcases/12|12]]، [[نقاش الوحدة:ar-verb/testcases/13|13]]، [[نقاش الوحدة:ar-verb/testcases/14|14]]، [[نقاش الوحدة:ar-verb/testcases/15|15]]، [[نقاش الوحدة:ar-verb/testcases/16|16]] — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/5|run_tests}}
olbq9l6e0p8hov05qhvbtq9dlrjnu1q
وحدة:ar-verb/testcases/بيانات/6
828
241998
1159016
1158884
2026-09-10T12:39:27Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159016
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 6 من 15.
return {
{
label = "نَطَقَ (p163)", root = "نطق", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِنْطِقَا"},
{"imp_2fp", "اِنْطِقْنَ"},
{"imp_2fs", "اِنْطِقِي"},
{"imp_2mp", "اِنْطِقُوا"},
{"imp_2ms", "اِنْطِقْ"},
{"ind_1p", "نَنْطِقُ"},
{"ind_1s", "أَنْطِقُ"},
{"ind_2d", "تَنْطِقَانِ"},
{"ind_2fp", "تَنْطِقْنَ"},
{"ind_2fs", "تَنْطِقِينَ"},
{"ind_2mp", "تَنْطِقُونَ"},
{"ind_2ms", "تَنْطِقُ"},
{"ind_3fd", "تَنْطِقَانِ"},
{"ind_3fp", "يَنْطِقْنَ"},
{"ind_3fs", "تَنْطِقُ"},
{"ind_3md", "يَنْطِقَانِ"},
{"ind_3mp", "يَنْطِقُونَ"},
{"ind_3ms", "يَنْطِقُ"},
{"past_1p", "نَطَقْنَا"},
{"past_1s", "نَطَقْتُ"},
{"past_2d", "نَطَقْتُمَا"},
{"past_2fp", "نَطَقْتُنَّ"},
{"past_2fs", "نَطَقْتِ"},
{"past_2mp", "نَطَقْتُمْ"},
{"past_2ms", "نَطَقْتَ"},
{"past_3fd", "نَطَقَتَا"},
{"past_3fp", "نَطَقْنَ"},
{"past_3fs", "نَطَقَتْ"},
{"past_3md", "نَطَقَا"},
{"past_3mp", "نَطَقُوا"},
{"past_3ms", "نَطَقَ"},
},
},
{
label = "خَفَّ (p165)", root = "خفف", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "خِفَّا"},
{"imp_2fp", "اِخْفِفْنَ"},
{"imp_2fs", "خِفِّي"},
{"imp_2mp", "خِفُّوا"},
{"imp_2ms", "خِفَّ"},
{"ind_1p", "نَخِفُّ"},
{"ind_1s", "أَخِفُّ"},
{"ind_2d", "تَخِفَّانِ"},
{"ind_2fp", "تَخْفِفْنَ"},
{"ind_2fs", "تَخِفِّينَ"},
{"ind_2mp", "تَخِفُّونَ"},
{"ind_2ms", "تَخِفُّ"},
{"ind_3fd", "تَخِفَّانِ"},
{"ind_3fp", "يَخْفِفْنَ"},
{"ind_3fs", "تَخِفُّ"},
{"ind_3md", "يَخِفَّانِ"},
{"ind_3mp", "يَخِفُّونَ"},
{"ind_3ms", "يَخِفُّ"},
{"past_1p", "خَفَفْنَا"},
{"past_1s", "خَفَفْتُ"},
{"past_2d", "خَفَفْتُمَا"},
{"past_2fp", "خَفَفْتُنَّ"},
{"past_2fs", "خَفَفْتِ"},
{"past_2mp", "خَفَفْتُمْ"},
{"past_2ms", "خَفَفْتَ"},
{"past_3fd", "خَفَّتَا"},
{"past_3fp", "خَفَفْنَ"},
{"past_3fs", "خَفَّتْ"},
{"past_3md", "خَفَّا"},
{"past_3mp", "خَفُّوا"},
{"past_3ms", "خَفَّ"},
},
},
{
label = "رَنَّ (p165)", root = "رنن", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "رِنَّا"},
{"imp_2fp", "اِرْنِنَّ"},
{"imp_2fs", "رِنِّي"},
{"imp_2mp", "رِنُّوا"},
{"imp_2ms", "رِنَّ"},
{"ind_1p", "نَرِنُّ"},
{"ind_1s", "أَرِنُّ"},
{"ind_2d", "تَرِنَّانِ"},
{"ind_2fp", "تَرْنِنَّ"},
{"ind_2fs", "تَرِنِّينَ"},
{"ind_2mp", "تَرِنُّونَ"},
{"ind_2ms", "تَرِنُّ"},
{"ind_3fd", "تَرِنَّانِ"},
{"ind_3fp", "يَرْنِنَّ"},
{"ind_3fs", "تَرِنُّ"},
{"ind_3md", "يَرِنَّانِ"},
{"ind_3mp", "يَرِنُّونَ"},
{"ind_3ms", "يَرِنُّ"},
{"past_1p", "رَنَنَّا"},
{"past_1s", "رَنَنْتُ"},
{"past_2d", "رَنَنْتُمَا"},
{"past_2fp", "رَنَنْتُنَّ"},
{"past_2fs", "رَنَنْتِ"},
{"past_2mp", "رَنَنْتُمْ"},
{"past_2ms", "رَنَنْتَ"},
{"past_3fd", "رَنَّتَا"},
{"past_3fp", "رَنَنَّ"},
{"past_3fs", "رَنَّتْ"},
{"past_3md", "رَنَّا"},
{"past_3mp", "رَنُّوا"},
{"past_3ms", "رَنَّ"},
},
},
{
label = "نَأَتَ (p171)", root = "نأت", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِنْئِتَا"},
{"imp_2fp", "اِنْئِتْنَ"},
{"imp_2fs", "اِنْئِتِي"},
{"imp_2mp", "اِنْئِتُوا"},
{"imp_2ms", "اِنْئِتْ"},
{"ind_1p", "نَنْئِتُ"},
{"ind_1s", "أَنْئِتُ"},
{"ind_2d", "تَنْئِتَانِ"},
{"ind_2fp", "تَنْئِتْنَ"},
{"ind_2fs", "تَنْئِتِينَ"},
{"ind_2mp", "تَنْئِتُونَ"},
{"ind_2ms", "تَنْئِتُ"},
{"ind_3fd", "تَنْئِتَانِ"},
{"ind_3fp", "يَنْئِتْنَ"},
{"ind_3fs", "تَنْئِتُ"},
{"ind_3md", "يَنْئِتَانِ"},
{"ind_3mp", "يَنْئِتُونَ"},
{"ind_3ms", "يَنْئِتُ"},
{"past_1p", "نَأَتْنَا"},
{"past_1s", "نَأَتُّ"},
{"past_2d", "نَأَتُّمَا"},
{"past_2fp", "نَأَتُّنَّ"},
{"past_2fs", "نَأَتِّ"},
{"past_2mp", "نَأَتُّمْ"},
{"past_2ms", "نَأَتَّ"},
{"past_3fd", "نَأَتَتَا"},
{"past_3fp", "نَأَتْنَ"},
{"past_3fs", "نَأَتَتْ"},
{"past_3md", "نَأَتَا"},
{"past_3mp", "نَأَتُوا"},
{"past_3ms", "نَأَتَ"},
},
},
{
label = "نَأَمَ (p171)", root = "نأم", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِنْئِمَا"},
{"imp_2fp", "اِنْئِمْنَ"},
{"imp_2fs", "اِنْئِمِي"},
{"imp_2mp", "اِنْئِمُوا"},
{"imp_2ms", "اِنْئِمْ"},
{"ind_1p", "نَنْئِمُ"},
{"ind_1s", "أَنْئِمُ"},
{"ind_2d", "تَنْئِمَانِ"},
{"ind_2fp", "تَنْئِمْنَ"},
{"ind_2fs", "تَنْئِمِينَ"},
{"ind_2mp", "تَنْئِمُونَ"},
{"ind_2ms", "تَنْئِمُ"},
{"ind_3fd", "تَنْئِمَانِ"},
{"ind_3fp", "يَنْئِمْنَ"},
{"ind_3fs", "تَنْئِمُ"},
{"ind_3md", "يَنْئِمَانِ"},
{"ind_3mp", "يَنْئِمُونَ"},
{"ind_3ms", "يَنْئِمُ"},
{"past_1p", "نَأَمْنَا"},
{"past_1s", "نَأَمْتُ"},
{"past_2d", "نَأَمْتُمَا"},
{"past_2fp", "نَأَمْتُنَّ"},
{"past_2fs", "نَأَمْتِ"},
{"past_2mp", "نَأَمْتُمْ"},
{"past_2ms", "نَأَمْتَ"},
{"past_3fd", "نَأَمَتَا"},
{"past_3fp", "نَأَمْنَ"},
{"past_3fs", "نَأَمَتْ"},
{"past_3md", "نَأَمَا"},
{"past_3mp", "نَأَمُوا"},
{"past_3ms", "نَأَمَ"},
},
},
{
label = "وَأَلَ (p173)", root = "وأل", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "إِلَا"},
{"imp_2fp", "إِلْنَ"},
{"imp_2fs", "إِلِي"},
{"imp_2mp", "إِلُوا"},
{"imp_2ms", "إِلْ"},
{"ind_1p", "نَئِلُ"},
{"ind_1s", "أَئِلُ"},
{"ind_2d", "تَئِلَانِ"},
{"ind_2fp", "تَئِلْنَ"},
{"ind_2fs", "تَئِلِينَ"},
{"ind_2mp", "تَئِلُونَ"},
{"ind_2ms", "تَئِلُ"},
{"ind_3fd", "تَئِلَانِ"},
{"ind_3fp", "يَئِلْنَ"},
{"ind_3fs", "تَئِلُ"},
{"ind_3md", "يَئِلَانِ"},
{"ind_3mp", "يَئِلُونَ"},
{"ind_3ms", "يَئِلُ"},
{"past_1p", "وَأَلْنَا"},
{"past_1s", "وَأَلْتُ"},
{"past_2d", "وَأَلْتُمَا"},
{"past_2fp", "وَأَلْتُنَّ"},
{"past_2fs", "وَأَلْتِ"},
{"past_2mp", "وَأَلْتُمْ"},
{"past_2ms", "وَأَلْتَ"},
{"past_3fd", "وَأَلَتَا"},
{"past_3fp", "وَأَلْنَ"},
{"past_3fs", "وَأَلَتْ"},
{"past_3md", "وَأَلَا"},
{"past_3mp", "وَأَلُوا"},
{"past_3ms", "وَأَلَ"},
},
},
{
label = "وَعَدَ (p173)", root = "وعد", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "عِدَا"},
{"imp_2fp", "عِدْنَ"},
{"imp_2fs", "عِدِي"},
{"imp_2mp", "عِدُوا"},
{"imp_2ms", "عِدْ"},
{"ind_1p", "نَعِدُ"},
{"ind_1s", "أَعِدُ"},
{"ind_2d", "تَعِدَانِ"},
{"ind_2fp", "تَعِدْنَ"},
{"ind_2fs", "تَعِدِينَ"},
{"ind_2mp", "تَعِدُونَ"},
{"ind_2ms", "تَعِدُ"},
{"ind_3fd", "تَعِدَانِ"},
{"ind_3fp", "يَعِدْنَ"},
{"ind_3fs", "تَعِدُ"},
{"ind_3md", "يَعِدَانِ"},
{"ind_3mp", "يَعِدُونَ"},
{"ind_3ms", "يَعِدُ"},
{"past_1p", "وَعَدْنَا"},
{"past_1s", "وَعَدْتُ"},
{"past_2d", "وَعَدْتُمَا"},
{"past_2fp", "وَعَدْتُنَّ"},
{"past_2fs", "وَعَدْتِ"},
{"past_2mp", "وَعَدْتُمْ"},
{"past_2ms", "وَعَدْتَ"},
{"past_3fd", "وَعَدَتَا"},
{"past_3fp", "وَعَدْنَ"},
{"past_3fs", "وَعَدَتْ"},
{"past_3md", "وَعَدَا"},
{"past_3mp", "وَعَدُوا"},
{"past_3ms", "وَعَدَ"},
},
},
{
label = "أَتَى (p179)", root = "أتي", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِئْتِيَا"},
{"imp_2fp", "اِئْتِينَ"},
{"imp_2fs", "اِئْتِي"},
{"imp_2mp", "اِئْتُوا"},
{"imp_2ms", "اِئْتِ"},
{"ind_1p", "نَأْتِي"},
{"ind_1s", "آتِي"},
{"ind_2d", "تَأْتِيَانِ"},
{"ind_2fp", "تَأْتِينَ"},
{"ind_2fs", "تَأْتِينَ"},
{"ind_2mp", "تَأْتُونَ"},
{"ind_2ms", "تَأْتِي"},
{"ind_3fd", "تَأْتِيَانِ"},
{"ind_3fp", "يَأْتِينَ"},
{"ind_3fs", "تَأْتِي"},
{"ind_3md", "يَأْتِيَانِ"},
{"ind_3mp", "يَأْتُونَ"},
{"ind_3ms", "يَأْتِي"},
{"past_1p", "أَتَيْنَا"},
{"past_1s", "أَتَيْتُ"},
{"past_2d", "أَتَيْتُمَا"},
{"past_2fp", "أَتَيْتُنَّ"},
{"past_2fs", "أَتَيْتِ"},
{"past_2mp", "أَتَيْتُمْ"},
{"past_2ms", "أَتَيْتَ"},
{"past_3fd", "أَتَتَا"},
{"past_3fp", "أَتَيْنَ"},
{"past_3fs", "أَتَتْ"},
{"past_3md", "أَتَيَا"},
{"past_3mp", "أَتَوْا"},
{"past_3ms", "أَتَى"},
},
},
{
label = "بَنَى (p179)", root = "بني", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِبْنِيَا"},
{"imp_2fp", "اِبْنِينَ"},
{"imp_2fs", "اِبْنِي"},
{"imp_2mp", "اِبْنُوا"},
{"imp_2ms", "اِبْنِ"},
{"ind_1p", "نَبْنِي"},
{"ind_1s", "أَبْنِي"},
{"ind_2d", "تَبْنِيَانِ"},
{"ind_2fp", "تَبْنِينَ"},
{"ind_2fs", "تَبْنِينَ"},
{"ind_2mp", "تَبْنُونَ"},
{"ind_2ms", "تَبْنِي"},
{"ind_3fd", "تَبْنِيَانِ"},
{"ind_3fp", "يَبْنِينَ"},
{"ind_3fs", "تَبْنِي"},
{"ind_3md", "يَبْنِيَانِ"},
{"ind_3mp", "يَبْنُونَ"},
{"ind_3ms", "يَبْنِي"},
{"past_1p", "بَنَيْنَا"},
{"past_1s", "بَنَيْتُ"},
{"past_2d", "بَنَيْتُمَا"},
{"past_2fp", "بَنَيْتُنَّ"},
{"past_2fs", "بَنَيْتِ"},
{"past_2mp", "بَنَيْتُمْ"},
{"past_2ms", "بَنَيْتَ"},
{"past_3fd", "بَنَتَا"},
{"past_3fp", "بَنَيْنَ"},
{"past_3fs", "بَنَتْ"},
{"past_3md", "بَنَيَا"},
{"past_3mp", "بَنَوْا"},
{"past_3ms", "بَنَى"},
},
},
{
label = "أَزَى (p180)", root = "أزي", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِئْزِيَا"},
{"imp_2fp", "اِئْزِينَ"},
{"imp_2fs", "اِئْزِي"},
{"imp_2mp", "اِئْزُوا"},
{"imp_2ms", "اِئْزِ"},
{"ind_1p", "نَأْزِي"},
{"ind_1s", "آزِي"},
{"ind_2d", "تَأْزِيَانِ"},
{"ind_2fp", "تَأْزِينَ"},
{"ind_2fs", "تَأْزِينَ"},
{"ind_2mp", "تَأْزُونَ"},
{"ind_2ms", "تَأْزِي"},
{"ind_3fd", "تَأْزِيَانِ"},
{"ind_3fp", "يَأْزِينَ"},
{"ind_3fs", "تَأْزِي"},
{"ind_3md", "يَأْزِيَانِ"},
{"ind_3mp", "يَأْزُونَ"},
{"ind_3ms", "يَأْزِي"},
{"past_1p", "أَزَيْنَا"},
{"past_1s", "أَزَيْتُ"},
{"past_2d", "أَزَيْتُمَا"},
{"past_2fp", "أَزَيْتُنَّ"},
{"past_2fs", "أَزَيْتِ"},
{"past_2mp", "أَزَيْتُمْ"},
{"past_2ms", "أَزَيْتَ"},
{"past_3fd", "أَزَتَا"},
{"past_3fp", "أَزَيْنَ"},
{"past_3fs", "أَزَتْ"},
{"past_3md", "أَزَيَا"},
{"past_3mp", "أَزَوْا"},
{"past_3ms", "أَزَى"},
},
},
{
label = "قَضَى (p180)", root = "قضي", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِقْضِيَا"},
{"imp_2fp", "اِقْضِينَ"},
{"imp_2fs", "اِقْضِي"},
{"imp_2mp", "اِقْضُوا"},
{"imp_2ms", "اِقْضِ"},
{"ind_1p", "نَقْضِي"},
{"ind_1s", "أَقْضِي"},
{"ind_2d", "تَقْضِيَانِ"},
{"ind_2fp", "تَقْضِينَ"},
{"ind_2fs", "تَقْضِينَ"},
{"ind_2mp", "تَقْضُونَ"},
{"ind_2ms", "تَقْضِي"},
{"ind_3fd", "تَقْضِيَانِ"},
{"ind_3fp", "يَقْضِينَ"},
{"ind_3fs", "تَقْضِي"},
{"ind_3md", "يَقْضِيَانِ"},
{"ind_3mp", "يَقْضُونَ"},
{"ind_3ms", "يَقْضِي"},
{"past_1p", "قَضَيْنَا"},
{"past_1s", "قَضَيْتُ"},
{"past_2d", "قَضَيْتُمَا"},
{"past_2fp", "قَضَيْتُنَّ"},
{"past_2fs", "قَضَيْتِ"},
{"past_2mp", "قَضَيْتُمْ"},
{"past_2ms", "قَضَيْتَ"},
{"past_3fd", "قَضَتَا"},
{"past_3fp", "قَضَيْنَ"},
{"past_3fs", "قَضَتْ"},
{"past_3md", "قَضَيَا"},
{"past_3mp", "قَضَوْا"},
{"past_3ms", "قَضَى"},
},
},
{
label = "شَوَى (p185)", root = "شوي", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِشْوِيَا"},
{"imp_2fp", "اِشْوِينَ"},
{"imp_2fs", "اِشْوِي"},
{"imp_2mp", "اِشْوُوا"},
{"imp_2ms", "اِشْوِ"},
{"ind_1p", "نَشْوِي"},
{"ind_1s", "أَشْوِي"},
{"ind_2d", "تَشْوِيَانِ"},
{"ind_2fp", "تَشْوِينَ"},
{"ind_2fs", "تَشْوِينَ"},
{"ind_2mp", "تَشْوُونَ"},
{"ind_2ms", "تَشْوِي"},
{"ind_3fd", "تَشْوِيَانِ"},
{"ind_3fp", "يَشْوِينَ"},
{"ind_3fs", "تَشْوِي"},
{"ind_3md", "يَشْوِيَانِ"},
{"ind_3mp", "يَشْوُونَ"},
{"ind_3ms", "يَشْوِي"},
{"past_1p", "شَوَيْنَا"},
{"past_1s", "شَوَيْتُ"},
{"past_2d", "شَوَيْتُمَا"},
{"past_2fp", "شَوَيْتُنَّ"},
{"past_2fs", "شَوَيْتِ"},
{"past_2mp", "شَوَيْتُمْ"},
{"past_2ms", "شَوَيْتَ"},
{"past_3fd", "شَوَتَا"},
{"past_3fp", "شَوَيْنَ"},
{"past_3fs", "شَوَتْ"},
{"past_3md", "شَوَيَا"},
{"past_3mp", "شَوَوْا"},
{"past_3ms", "شَوَى"},
},
},
{
label = "كَوَى (p185)", root = "كوي", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِكْوِيَا"},
{"imp_2fp", "اِكْوِينَ"},
{"imp_2fs", "اِكْوِي"},
{"imp_2mp", "اِكْوُوا"},
{"imp_2ms", "اِكْوِ"},
{"ind_1p", "نَكْوِي"},
{"ind_1s", "أَكْوِي"},
{"ind_2d", "تَكْوِيَانِ"},
{"ind_2fp", "تَكْوِينَ"},
{"ind_2fs", "تَكْوِينَ"},
{"ind_2mp", "تَكْوُونَ"},
{"ind_2ms", "تَكْوِي"},
{"ind_3fd", "تَكْوِيَانِ"},
{"ind_3fp", "يَكْوِينَ"},
{"ind_3fs", "تَكْوِي"},
{"ind_3md", "يَكْوِيَانِ"},
{"ind_3mp", "يَكْوُونَ"},
{"ind_3ms", "يَكْوِي"},
{"past_1p", "كَوَيْنَا"},
{"past_1s", "كَوَيْتُ"},
{"past_2d", "كَوَيْتُمَا"},
{"past_2fp", "كَوَيْتُنَّ"},
{"past_2fs", "كَوَيْتِ"},
{"past_2mp", "كَوَيْتُمْ"},
{"past_2ms", "كَوَيْتَ"},
{"past_3fd", "كَوَتَا"},
{"past_3fp", "كَوَيْنَ"},
{"past_3fs", "كَوَتْ"},
{"past_3md", "كَوَيَا"},
{"past_3mp", "كَوَوْا"},
{"past_3ms", "كَوَى"},
},
},
{
label = "رَهَنَ (p188)", root = "رهن", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "اِرْهَنَا"},
{"imp_2fp", "اِرْهَنَّ"},
{"imp_2fs", "اِرْهَنِي"},
{"imp_2mp", "اِرْهَنُوا"},
{"imp_2ms", "اِرْهَنْ"},
{"ind_1p", "نَرْهَنُ"},
{"ind_1s", "أَرْهَنُ"},
{"ind_2d", "تَرْهَنَانِ"},
{"ind_2fp", "تَرْهَنَّ"},
{"ind_2fs", "تَرْهَنِينَ"},
{"ind_2mp", "تَرْهَنُونَ"},
{"ind_2ms", "تَرْهَنُ"},
{"ind_3fd", "تَرْهَنَانِ"},
{"ind_3fp", "يَرْهَنَّ"},
{"ind_3fs", "تَرْهَنُ"},
{"ind_3md", "يَرْهَنَانِ"},
{"ind_3mp", "يَرْهَنُونَ"},
{"ind_3ms", "يَرْهَنُ"},
{"past_1p", "رَهَنَّا"},
{"past_1s", "رَهَنْتُ"},
{"past_2d", "رَهَنْتُمَا"},
{"past_2fp", "رَهَنْتُنَّ"},
{"past_2fs", "رَهَنْتِ"},
{"past_2mp", "رَهَنْتُمْ"},
{"past_2ms", "رَهَنْتَ"},
{"past_3fd", "رَهَنَتَا"},
{"past_3fp", "رَهَنَّ"},
{"past_3fs", "رَهَنَتْ"},
{"past_3md", "رَهَنَا"},
{"past_3mp", "رَهَنُوا"},
{"past_3ms", "رَهَنَ"},
},
},
{
label = "ضَغَطَ (p188)", root = "ضغط", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "اِضْغَطَا"},
{"imp_2fp", "اِضْغَطْنَ"},
{"imp_2fs", "اِضْغَطِي"},
{"imp_2mp", "اِضْغَطُوا"},
{"imp_2ms", "اِضْغَطْ"},
{"ind_1p", "نَضْغَطُ"},
{"ind_1s", "أَضْغَطُ"},
{"ind_2d", "تَضْغَطَانِ"},
{"ind_2fp", "تَضْغَطْنَ"},
{"ind_2fs", "تَضْغَطِينَ"},
{"ind_2mp", "تَضْغَطُونَ"},
{"ind_2ms", "تَضْغَطُ"},
{"ind_3fd", "تَضْغَطَانِ"},
{"ind_3fp", "يَضْغَطْنَ"},
{"ind_3fs", "تَضْغَطُ"},
{"ind_3md", "يَضْغَطَانِ"},
{"ind_3mp", "يَضْغَطُونَ"},
{"ind_3ms", "يَضْغَطُ"},
{"past_1p", "ضَغَطْنَا"},
{"past_1s", "ضَغَطْتُ"},
{"past_2d", "ضَغَطْتُمَا"},
{"past_2fp", "ضَغَطْتُنَّ"},
{"past_2fs", "ضَغَطْتِ"},
{"past_2mp", "ضَغَطْتُمْ"},
{"past_2ms", "ضَغَطْتَ"},
{"past_3fd", "ضَغَطَتَا"},
{"past_3fp", "ضَغَطْنَ"},
{"past_3fs", "ضَغَطَتْ"},
{"past_3md", "ضَغَطَا"},
{"past_3mp", "ضَغَطُوا"},
{"past_3ms", "ضَغَطَ"},
},
},
{
label = "مَنَعَ (p189)", root = "منع", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "اِمْنَعَا"},
{"imp_2fp", "اِمْنَعْنَ"},
{"imp_2fs", "اِمْنَعِي"},
{"imp_2mp", "اِمْنَعُوا"},
{"imp_2ms", "اِمْنَعْ"},
{"ind_1p", "نَمْنَعُ"},
{"ind_1s", "أَمْنَعُ"},
{"ind_2d", "تَمْنَعَانِ"},
{"ind_2fp", "تَمْنَعْنَ"},
{"ind_2fs", "تَمْنَعِينَ"},
{"ind_2mp", "تَمْنَعُونَ"},
{"ind_2ms", "تَمْنَعُ"},
{"ind_3fd", "تَمْنَعَانِ"},
{"ind_3fp", "يَمْنَعْنَ"},
{"ind_3fs", "تَمْنَعُ"},
{"ind_3md", "يَمْنَعَانِ"},
{"ind_3mp", "يَمْنَعُونَ"},
{"ind_3ms", "يَمْنَعُ"},
{"past_1p", "مَنَعْنَا"},
{"past_1s", "مَنَعْتُ"},
{"past_2d", "مَنَعْتُمَا"},
{"past_2fp", "مَنَعْتُنَّ"},
{"past_2fs", "مَنَعْتِ"},
{"past_2mp", "مَنَعْتُمْ"},
{"past_2ms", "مَنَعْتَ"},
{"past_3fd", "مَنَعَتَا"},
{"past_3fp", "مَنَعْنَ"},
{"past_3fs", "مَنَعَتْ"},
{"past_3md", "مَنَعَا"},
{"past_3mp", "مَنَعُوا"},
{"past_3ms", "مَنَعَ"},
},
},
{
label = "ذَهَبَ (p189)", root = "ذهب", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "اِذْهَبَا"},
{"imp_2fp", "اِذْهَبْنَ"},
{"imp_2fs", "اِذْهَبِي"},
{"imp_2mp", "اِذْهَبُوا"},
{"imp_2ms", "اِذْهَبْ"},
{"ind_1p", "نَذْهَبُ"},
{"ind_1s", "أَذْهَبُ"},
{"ind_2d", "تَذْهَبَانِ"},
{"ind_2fp", "تَذْهَبْنَ"},
{"ind_2fs", "تَذْهَبِينَ"},
{"ind_2mp", "تَذْهَبُونَ"},
{"ind_2ms", "تَذْهَبُ"},
{"ind_3fd", "تَذْهَبَانِ"},
{"ind_3fp", "يَذْهَبْنَ"},
{"ind_3fs", "تَذْهَبُ"},
{"ind_3md", "يَذْهَبَانِ"},
{"ind_3mp", "يَذْهَبُونَ"},
{"ind_3ms", "يَذْهَبُ"},
{"past_1p", "ذَهَبْنَا"},
{"past_1s", "ذَهَبْتُ"},
{"past_2d", "ذَهَبْتُمَا"},
{"past_2fp", "ذَهَبْتُنَّ"},
{"past_2fs", "ذَهَبْتِ"},
{"past_2mp", "ذَهَبْتُمْ"},
{"past_2ms", "ذَهَبْتَ"},
{"past_3fd", "ذَهَبَتَا"},
{"past_3fp", "ذَهَبْنَ"},
{"past_3fs", "ذَهَبَتْ"},
{"past_3md", "ذَهَبَا"},
{"past_3mp", "ذَهَبُوا"},
{"past_3ms", "ذَهَبَ"},
},
},
{
label = "كَعَّ (p191)", root = "كعع", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "كَعَّا"},
{"imp_2fp", "اِكْعَعْنَ"},
{"imp_2fs", "كَعِّي"},
{"imp_2mp", "كَعُّوا"},
{"imp_2ms", "كَعَّ"},
{"ind_1p", "نَكَعُّ"},
{"ind_1s", "أَكَعُّ"},
{"ind_2d", "تَكَعَّانِ"},
{"ind_2fp", "تَكْعَعْنَ"},
{"ind_2fs", "تَكَعِّينَ"},
{"ind_2mp", "تَكَعُّونَ"},
{"ind_2ms", "تَكَعُّ"},
{"ind_3fd", "تَكَعَّانِ"},
{"ind_3fp", "يَكْعَعْنَ"},
{"ind_3fs", "تَكَعُّ"},
{"ind_3md", "يَكَعَّانِ"},
{"ind_3mp", "يَكَعُّونَ"},
{"ind_3ms", "يَكَعُّ"},
{"past_1p", "كَعَعْنَا"},
{"past_1s", "كَعَعْتُ"},
{"past_2d", "كَعَعْتُمَا"},
{"past_2fp", "كَعَعْتُنَّ"},
{"past_2fs", "كَعَعْتِ"},
{"past_2mp", "كَعَعْتُمْ"},
{"past_2ms", "كَعَعْتَ"},
{"past_3fd", "كَعَّتَا"},
{"past_3fp", "كَعَعْنَ"},
{"past_3fs", "كَعَّتْ"},
{"past_3md", "كَعَّا"},
{"past_3mp", "كَعُّوا"},
{"past_3ms", "كَعَّ"},
},
},
{
label = "رَخَّ (p191)", root = "رخخ", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "رَخَّا"},
{"imp_2fp", "اِرْخَخْنَ"},
{"imp_2fs", "رَخِّي"},
{"imp_2mp", "رَخُّوا"},
{"imp_2ms", "رَخِّ"},
{"ind_1p", "نَرَخُّ"},
{"ind_1s", "أَرَخُّ"},
{"ind_2d", "تَرَخَّانِ"},
{"ind_2fp", "تَرْخَخْنَ"},
{"ind_2fs", "تَرَخِّينَ"},
{"ind_2mp", "تَرَخُّونَ"},
{"ind_2ms", "تَرَخُّ"},
{"ind_3fd", "تَرَخَّانِ"},
{"ind_3fp", "يَرْخَخْنَ"},
{"ind_3fs", "تَرَخُّ"},
{"ind_3md", "يَرَخَّانِ"},
{"ind_3mp", "يَرَخُّونَ"},
{"ind_3ms", "يَرَخُّ"},
{"past_1p", "رَخَخْنَا"},
{"past_1s", "رَخَخْتُ"},
{"past_2d", "رَخَخْتُمَا"},
{"past_2fp", "رَخَخْتُنَّ"},
{"past_2fs", "رَخَخْتِ"},
{"past_2mp", "رَخَخْتُمْ"},
{"past_2ms", "رَخَخْتَ"},
{"past_3fd", "رَخَّتَا"},
{"past_3fp", "رَخَخْنَ"},
{"past_3fs", "رَخَّتْ"},
{"past_3md", "رَخَّا"},
{"past_3mp", "رَخُّوا"},
{"past_3ms", "رَخَّ"},
},
},
{
label = "دَرَأَ (p196)", root = "درأ", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "اِدْرَآ"},
{"imp_2fp", "اِدْرَأْنَ"},
{"imp_2fs", "اِدْرَئِي"},
{"imp_2mp", "اِدْرَؤُوا"},
{"imp_2ms", "اِدْرَأْ"},
{"ind_1p", "نَدْرَأُ"},
{"ind_1s", "أَدْرَأُ"},
{"ind_2d", "تَدْرَآنِ"},
{"ind_2fp", "تَدْرَأْنَ"},
{"ind_2fs", "تَدْرَئِينَ"},
{"ind_2mp", "تَدْرَؤُونَ"},
{"ind_2ms", "تَدْرَأُ"},
{"ind_3fd", "تَدْرَآنِ"},
{"ind_3fp", "يَدْرَأْنَ"},
{"ind_3fs", "تَدْرَأُ"},
{"ind_3md", "يَدْرَآنِ"},
{"ind_3mp", "يَدْرَؤُونَ"},
{"ind_3ms", "يَدْرَأُ"},
{"past_1p", "دَرَأْنَا"},
{"past_1s", "دَرَأْتُ"},
{"past_2d", "دَرَأْتُمَا"},
{"past_2fp", "دَرَأْتُنَّ"},
{"past_2fs", "دَرَأْتِ"},
{"past_2mp", "دَرَأْتُمْ"},
{"past_2ms", "دَرَأْتَ"},
{"past_3fd", "دَرَأَتَا"},
{"past_3fp", "دَرَأْنَ"},
{"past_3fs", "دَرَأَتْ"},
{"past_3md", "دَرَآ"},
{"past_3mp", "دَرَؤُوا"},
{"past_3ms", "دَرَأَ"},
},
},
{
label = "لَجَأَ (p196)", root = "لجأ", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "اِلْجَآ"},
{"imp_2fp", "اِلْجَأْنَ"},
{"imp_2fs", "اِلْجَئِي"},
{"imp_2mp", "اِلْجَؤُوا"},
{"imp_2ms", "اِلْجَأْ"},
{"ind_1p", "نَلْجَأُ"},
{"ind_1s", "أَلْجَأُ"},
{"ind_2d", "تَلْجَآنِ"},
{"ind_2fp", "تَلْجَأْنَ"},
{"ind_2fs", "تَلْجَئِينَ"},
{"ind_2mp", "تَلْجَؤُونَ"},
{"ind_2ms", "تَلْجَأُ"},
{"ind_3fd", "تَلْجَآنِ"},
{"ind_3fp", "يَلْجَأْنَ"},
{"ind_3fs", "تَلْجَأُ"},
{"ind_3md", "يَلْجَآنِ"},
{"ind_3mp", "يَلْجَؤُونَ"},
{"ind_3ms", "يَلْجَأُ"},
{"past_1p", "لَجَأْنَا"},
{"past_1s", "لَجَأْتُ"},
{"past_2d", "لَجَأْتُمَا"},
{"past_2fp", "لَجَأْتُنَّ"},
{"past_2fs", "لَجَأْتِ"},
{"past_2mp", "لَجَأْتُمْ"},
{"past_2ms", "لَجَأْتَ"},
{"past_3fd", "لَجَأَتَا"},
{"past_3fp", "لَجَأْنَ"},
{"past_3fs", "لَجَأَتْ"},
{"past_3md", "لَجَآ"},
{"past_3mp", "لَجَؤُوا"},
{"past_3ms", "لَجَأَ"},
},
},
{
label = "حَسُنَ (p207)", root = "حسن", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُحْسُنَا"},
{"imp_2fp", "اُحْسُنَّ"},
{"imp_2fs", "اُحْسُنِي"},
{"imp_2mp", "اُحْسُنُوا"},
{"imp_2ms", "اُحْسُنْ"},
{"ind_1p", "نَحْسُنُ"},
{"ind_1s", "أَحْسُنُ"},
{"ind_2d", "تَحْسُنَانِ"},
{"ind_2fp", "تَحْسُنَّ"},
{"ind_2fs", "تَحْسُنِينَ"},
{"ind_2mp", "تَحْسُنُونَ"},
{"ind_2ms", "تَحْسُنُ"},
{"ind_3fd", "تَحْسُنَانِ"},
{"ind_3fp", "يَحْسُنَّ"},
{"ind_3fs", "تَحْسُنُ"},
{"ind_3md", "يَحْسُنَانِ"},
{"ind_3mp", "يَحْسُنُونَ"},
{"ind_3ms", "يَحْسُنُ"},
{"past_1p", "حَسُنَّا"},
{"past_1s", "حَسُنْتُ"},
{"past_2d", "حَسُنْتُمَا"},
{"past_2fp", "حَسُنْتُنَّ"},
{"past_2fs", "حَسُنْتِ"},
{"past_2mp", "حَسُنْتُمْ"},
{"past_2ms", "حَسُنْتَ"},
{"past_3fd", "حَسُنَتَا"},
{"past_3fp", "حَسُنَّ"},
{"past_3fs", "حَسُنَتْ"},
{"past_3md", "حَسُنَا"},
{"past_3mp", "حَسُنُوا"},
{"past_3ms", "حَسُنَ"},
},
},
{
label = "عَنُفَ (p207)", root = "عنف", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُعْنُفَا"},
{"imp_2fp", "اُعْنُفْنَ"},
{"imp_2fs", "اُعْنُفِي"},
{"imp_2mp", "اُعْنُفُوا"},
{"imp_2ms", "اُعْنُفْ"},
{"ind_1p", "نَعْنُفُ"},
{"ind_1s", "أَعْنُفُ"},
{"ind_2d", "تَعْنُفَانِ"},
{"ind_2fp", "تَعْنُفْنَ"},
{"ind_2fs", "تَعْنُفِينَ"},
{"ind_2mp", "تَعْنُفُونَ"},
{"ind_2ms", "تَعْنُفُ"},
{"ind_3fd", "تَعْنُفَانِ"},
{"ind_3fp", "يَعْنُفْنَ"},
{"ind_3fs", "تَعْنُفُ"},
{"ind_3md", "يَعْنُفَانِ"},
{"ind_3mp", "يَعْنُفُونَ"},
{"ind_3ms", "يَعْنُفُ"},
{"past_1p", "عَنُفْنَا"},
{"past_1s", "عَنُفْتُ"},
{"past_2d", "عَنُفْتُمَا"},
{"past_2fp", "عَنُفْتُنَّ"},
{"past_2fs", "عَنُفْتِ"},
{"past_2mp", "عَنُفْتُمْ"},
{"past_2ms", "عَنُفْتَ"},
{"past_3fd", "عَنُفَتَا"},
{"past_3fp", "عَنُفْنَ"},
{"past_3fs", "عَنُفَتْ"},
{"past_3md", "عَنُفَا"},
{"past_3mp", "عَنُفُوا"},
{"past_3ms", "عَنُفَ"},
},
},
{
label = "صَعُبَ (p208)", root = "صعب", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُصْعُبَا"},
{"imp_2fp", "اُصْعُبْنَ"},
{"imp_2fs", "اُصْعُبِي"},
{"imp_2mp", "اُصْعُبُوا"},
{"imp_2ms", "اُصْعُبْ"},
{"ind_1p", "نَصْعُبُ"},
{"ind_1s", "أَصْعُبُ"},
{"ind_2d", "تَصْعُبَانِ"},
{"ind_2fp", "تَصْعُبْنَ"},
{"ind_2fs", "تَصْعُبِينَ"},
{"ind_2mp", "تَصْعُبُونَ"},
{"ind_2ms", "تَصْعُبُ"},
{"ind_3fd", "تَصْعُبَانِ"},
{"ind_3fp", "يَصْعُبْنَ"},
{"ind_3fs", "تَصْعُبُ"},
{"ind_3md", "يَصْعُبَانِ"},
{"ind_3mp", "يَصْعُبُونَ"},
{"ind_3ms", "يَصْعُبُ"},
{"past_1p", "صَعُبْنَا"},
{"past_1s", "صَعُبْتُ"},
{"past_2d", "صَعُبْتُمَا"},
{"past_2fp", "صَعُبْتُنَّ"},
{"past_2fs", "صَعُبْتِ"},
{"past_2mp", "صَعُبْتُمْ"},
{"past_2ms", "صَعُبْتَ"},
{"past_3fd", "صَعُبَتَا"},
{"past_3fp", "صَعُبْنَ"},
{"past_3fs", "صَعُبَتْ"},
{"past_3md", "صَعُبَا"},
{"past_3mp", "صَعُبُوا"},
{"past_3ms", "صَعُبَ"},
},
},
{
label = "كَبُرَ (p208)", root = "كبر", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُكْبُرَا"},
{"imp_2fp", "اُكْبُرْنَ"},
{"imp_2fs", "اُكْبُرِي"},
{"imp_2mp", "اُكْبُرُوا"},
{"imp_2ms", "اُكْبُرْ"},
{"ind_1p", "نَكْبُرُ"},
{"ind_1s", "أَكْبُرُ"},
{"ind_2d", "تَكْبُرَانِ"},
{"ind_2fp", "تَكْبُرْنَ"},
{"ind_2fs", "تَكْبُرِينَ"},
{"ind_2mp", "تَكْبُرُونَ"},
{"ind_2ms", "تَكْبُرُ"},
{"ind_3fd", "تَكْبُرَانِ"},
{"ind_3fp", "يَكْبُرْنَ"},
{"ind_3fs", "تَكْبُرُ"},
{"ind_3md", "يَكْبُرَانِ"},
{"ind_3mp", "يَكْبُرُونَ"},
{"ind_3ms", "يَكْبُرُ"},
{"past_1p", "كَبُرْنَا"},
{"past_1s", "كَبُرْتُ"},
{"past_2d", "كَبُرْتُمَا"},
{"past_2fp", "كَبُرْتُنَّ"},
{"past_2fs", "كَبُرْتِ"},
{"past_2mp", "كَبُرْتُمْ"},
{"past_2ms", "كَبُرْتَ"},
{"past_3fd", "كَبُرَتَا"},
{"past_3fp", "كَبُرْنَ"},
{"past_3fs", "كَبُرَتْ"},
{"past_3md", "كَبُرَا"},
{"past_3mp", "كَبُرُوا"},
{"past_3ms", "كَبُرَ"},
},
},
{
label = "أَدُبَ (p213)", root = "أدب", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُؤْدُبَا"},
{"imp_2fp", "اُؤْدُبْنَ"},
{"imp_2fs", "اُؤْدُبِي"},
{"imp_2mp", "اُؤْدُبُوا"},
{"imp_2ms", "اُؤْدُبْ"},
{"ind_1p", "نَأْدُبُ"},
{"ind_1s", "آدُبُ"},
{"ind_2d", "تَأْدُبَانِ"},
{"ind_2fp", "تَأْدُبْنَ"},
{"ind_2fs", "تَأْدُبِينَ"},
{"ind_2mp", "تَأْدُبُونَ"},
{"ind_2ms", "تَأْدُبُ"},
{"ind_3fd", "تَأْدُبَانِ"},
{"ind_3fp", "يَأْدُبْنَ"},
{"ind_3fs", "تَأْدُبُ"},
{"ind_3md", "يَأْدُبَانِ"},
{"ind_3mp", "يَأْدُبُونَ"},
{"ind_3ms", "يَأْدُبُ"},
{"past_1p", "أَدُبْنَا"},
{"past_1s", "أَدُبْتُ"},
{"past_2d", "أَدُبْتُمَا"},
{"past_2fp", "أَدُبْتُنَّ"},
{"past_2fs", "أَدُبْتِ"},
{"past_2mp", "أَدُبْتُمْ"},
{"past_2ms", "أَدُبْتَ"},
{"past_3fd", "أَدُبَتَا"},
{"past_3fp", "أَدُبْنَ"},
{"past_3fs", "أَدُبَتْ"},
{"past_3md", "أَدُبَا"},
{"past_3mp", "أَدُبُوا"},
{"past_3ms", "أَدُبَ"},
},
},
{
label = "أَنُثَ (p213)", root = "أنث", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُؤْنُثَا"},
{"imp_2fp", "اُؤْنُثْنَ"},
{"imp_2fs", "اُؤْنُثِي"},
{"imp_2mp", "اُؤْنُثُوا"},
{"imp_2ms", "اُؤْنُثْ"},
{"ind_1p", "نَأْنُثُ"},
{"ind_1s", "آنُثُ"},
{"ind_2d", "تَأْنُثَانِ"},
{"ind_2fp", "تَأْنُثْنَ"},
{"ind_2fs", "تَأْنُثِينَ"},
{"ind_2mp", "تَأْنُثُونَ"},
{"ind_2ms", "تَأْنُثُ"},
{"ind_3fd", "تَأْنُثَانِ"},
{"ind_3fp", "يَأْنُثْنَ"},
{"ind_3fs", "تَأْنُثُ"},
{"ind_3md", "يَأْنُثَانِ"},
{"ind_3mp", "يَأْنُثُونَ"},
{"ind_3ms", "يَأْنُثُ"},
{"past_1p", "أَنُثْنَا"},
{"past_1s", "أَنُثْتُ"},
{"past_2d", "أَنُثْتُمَا"},
{"past_2fp", "أَنُثْتُنَّ"},
{"past_2fs", "أَنُثْتِ"},
{"past_2mp", "أَنُثْتُمْ"},
{"past_2ms", "أَنُثْتَ"},
{"past_3fd", "أَنُثَتَا"},
{"past_3fp", "أَنُثْنَ"},
{"past_3fs", "أَنُثَتْ"},
{"past_3md", "أَنُثَا"},
{"past_3mp", "أَنُثُوا"},
{"past_3ms", "أَنُثَ"},
},
},
{
label = "بَطُؤَ (p217)", root = "بطؤ", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُبْطُؤَا"},
{"imp_2fp", "اُبْطُؤْنَ"},
{"imp_2fs", "اُبْطُئِي"},
{"imp_2mp", "اُبْطُؤُوا"},
{"imp_2ms", "اُبْطُؤْ"},
{"ind_1p", "نَبْطُؤُ"},
{"ind_1s", "أَبْطُؤُ"},
{"ind_2d", "تَبْطُؤَانِ"},
{"ind_2fp", "تَبْطُؤْنَ"},
{"ind_2fs", "تَبْطُئِينَ"},
{"ind_2mp", "تَبْطُؤُونَ"},
{"ind_2ms", "تَبْطُؤُ"},
{"ind_3fd", "تَبْطُؤَانِ"},
{"ind_3fp", "يَبْطُؤْنَ"},
{"ind_3fs", "تَبْطُؤُ"},
{"ind_3md", "يَبْطُؤَانِ"},
{"ind_3mp", "يَبْطُؤُونَ"},
{"ind_3ms", "يَبْطُؤُ"},
{"past_1p", "بَطُؤْنَا"},
{"past_1s", "بَطُؤْتُ"},
{"past_2d", "بَطُؤْتُمَا"},
{"past_2fp", "بَطُؤْتُنَّ"},
{"past_2fs", "بَطُؤْتِ"},
{"past_2mp", "بَطُؤْتُمْ"},
{"past_2ms", "بَطُؤْتَ"},
{"past_3fd", "بَطُؤَتَا"},
{"past_3fp", "بَطُؤْنَ"},
{"past_3fs", "بَطُؤَتْ"},
{"past_3md", "بَطُؤَا"},
{"past_3mp", "بَطُؤُوا"},
{"past_3ms", "بَطُؤَ"},
},
},
{
label = "نَشُؤَ (p217)", root = "نشؤ", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُنْشُؤَا"},
{"imp_2fp", "اُنْشُؤْنَ"},
{"imp_2fs", "اُنْشُئِي"},
{"imp_2mp", "اُنْشُؤُوا"},
{"imp_2ms", "اُنْشُؤْ"},
{"ind_1p", "نَنْشُؤُ"},
{"ind_1s", "أَنْشُؤُ"},
{"ind_2d", "تَنْشُؤَانِ"},
{"ind_2fp", "تَنْشُؤْنَ"},
{"ind_2fs", "تَنْشُئِينَ"},
{"ind_2mp", "تَنْشُؤُونَ"},
{"ind_2ms", "تَنْشُؤُ"},
{"ind_3fd", "تَنْشُؤَانِ"},
{"ind_3fp", "يَنْشُؤْنَ"},
{"ind_3fs", "تَنْشُؤُ"},
{"ind_3md", "يَنْشُؤَانِ"},
{"ind_3mp", "يَنْشُؤُونَ"},
{"ind_3ms", "يَنْشُؤُ"},
{"past_1p", "نَشُؤْنَا"},
{"past_1s", "نَشُؤْتُ"},
{"past_2d", "نَشُؤْتُمَا"},
{"past_2fp", "نَشُؤْتُنَّ"},
{"past_2fs", "نَشُؤْتِ"},
{"past_2mp", "نَشُؤْتُمْ"},
{"past_2ms", "نَشُؤْتَ"},
{"past_3fd", "نَشُؤَتَا"},
{"past_3fp", "نَشُؤْنَ"},
{"past_3fs", "نَشُؤَتْ"},
{"past_3md", "نَشُؤَا"},
{"past_3mp", "نَشُؤُوا"},
{"past_3ms", "نَشُؤَ"},
},
},
{
label = "وَخُشَ (p219)", root = "وخش", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُوخُشَا"},
{"imp_2fp", "اُوخُشْنَ"},
{"imp_2fs", "اُوخُشِي"},
{"imp_2mp", "اُوخُشُوا"},
{"imp_2ms", "اُوخُشْ"},
{"ind_1p", "نَوْخُشُ"},
{"ind_1s", "أَوْخُشُ"},
{"ind_2d", "تَوْخُشَانِ"},
{"ind_2fp", "تَوْخُشْنَ"},
{"ind_2fs", "تَوْخُشِينَ"},
{"ind_2mp", "تَوْخُشُونَ"},
{"ind_2ms", "تَوْخُشُ"},
{"ind_3fd", "تَوْخُشَانِ"},
{"ind_3fp", "يَوْخُشْنَ"},
{"ind_3fs", "تَوْخُشُ"},
{"ind_3md", "يَوْخُشَانِ"},
{"ind_3mp", "يَوْخُشُونَ"},
{"ind_3ms", "يَوْخُشُ"},
{"past_1p", "وَخُشْنَا"},
{"past_1s", "وَخُشْتُ"},
{"past_2d", "وَخُشْتُمَا"},
{"past_2fp", "وَخُشْتُنَّ"},
{"past_2fs", "وَخُشْتِ"},
{"past_2mp", "وَخُشْتُمْ"},
{"past_2ms", "وَخُشْتَ"},
{"past_3fd", "وَخُشَتَا"},
{"past_3fp", "وَخُشْنَ"},
{"past_3fs", "وَخُشَتْ"},
{"past_3md", "وَخُشَا"},
{"past_3mp", "وَخُشُوا"},
{"past_3ms", "وَخُشَ"},
},
},
}
99k38lry8u37jh6ieyk6s8jmuvu3p89
1159074
1159016
2026-09-10T19:34:00Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159074
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 6 من 16.
return {
{
label = "نَطَقَ (p163)", root = "نطق", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِنْطِقَا"},
{"imp_2fp", "اِنْطِقْنَ"},
{"imp_2fs", "اِنْطِقِي"},
{"imp_2mp", "اِنْطِقُوا"},
{"imp_2ms", "اِنْطِقْ"},
{"ind_1p", "نَنْطِقُ"},
{"ind_1s", "أَنْطِقُ"},
{"ind_2d", "تَنْطِقَانِ"},
{"ind_2fp", "تَنْطِقْنَ"},
{"ind_2fs", "تَنْطِقِينَ"},
{"ind_2mp", "تَنْطِقُونَ"},
{"ind_2ms", "تَنْطِقُ"},
{"ind_3fd", "تَنْطِقَانِ"},
{"ind_3fp", "يَنْطِقْنَ"},
{"ind_3fs", "تَنْطِقُ"},
{"ind_3md", "يَنْطِقَانِ"},
{"ind_3mp", "يَنْطِقُونَ"},
{"ind_3ms", "يَنْطِقُ"},
{"past_1p", "نَطَقْنَا"},
{"past_1s", "نَطَقْتُ"},
{"past_2d", "نَطَقْتُمَا"},
{"past_2fp", "نَطَقْتُنَّ"},
{"past_2fs", "نَطَقْتِ"},
{"past_2mp", "نَطَقْتُمْ"},
{"past_2ms", "نَطَقْتَ"},
{"past_3fd", "نَطَقَتَا"},
{"past_3fp", "نَطَقْنَ"},
{"past_3fs", "نَطَقَتْ"},
{"past_3md", "نَطَقَا"},
{"past_3mp", "نَطَقُوا"},
{"past_3ms", "نَطَقَ"},
},
},
{
label = "خَفَّ (p165)", root = "خفف", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "خِفَّا"},
{"imp_2fp", "اِخْفِفْنَ"},
{"imp_2fs", "خِفِّي"},
{"imp_2mp", "خِفُّوا"},
{"imp_2ms", "خِفَّ"},
{"ind_1p", "نَخِفُّ"},
{"ind_1s", "أَخِفُّ"},
{"ind_2d", "تَخِفَّانِ"},
{"ind_2fp", "تَخْفِفْنَ"},
{"ind_2fs", "تَخِفِّينَ"},
{"ind_2mp", "تَخِفُّونَ"},
{"ind_2ms", "تَخِفُّ"},
{"ind_3fd", "تَخِفَّانِ"},
{"ind_3fp", "يَخْفِفْنَ"},
{"ind_3fs", "تَخِفُّ"},
{"ind_3md", "يَخِفَّانِ"},
{"ind_3mp", "يَخِفُّونَ"},
{"ind_3ms", "يَخِفُّ"},
{"past_1p", "خَفَفْنَا"},
{"past_1s", "خَفَفْتُ"},
{"past_2d", "خَفَفْتُمَا"},
{"past_2fp", "خَفَفْتُنَّ"},
{"past_2fs", "خَفَفْتِ"},
{"past_2mp", "خَفَفْتُمْ"},
{"past_2ms", "خَفَفْتَ"},
{"past_3fd", "خَفَّتَا"},
{"past_3fp", "خَفَفْنَ"},
{"past_3fs", "خَفَّتْ"},
{"past_3md", "خَفَّا"},
{"past_3mp", "خَفُّوا"},
{"past_3ms", "خَفَّ"},
},
},
{
label = "رَنَّ (p165)", root = "رنن", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "رِنَّا"},
{"imp_2fp", "اِرْنِنَّ"},
{"imp_2fs", "رِنِّي"},
{"imp_2mp", "رِنُّوا"},
{"imp_2ms", "رِنَّ"},
{"ind_1p", "نَرِنُّ"},
{"ind_1s", "أَرِنُّ"},
{"ind_2d", "تَرِنَّانِ"},
{"ind_2fp", "تَرْنِنَّ"},
{"ind_2fs", "تَرِنِّينَ"},
{"ind_2mp", "تَرِنُّونَ"},
{"ind_2ms", "تَرِنُّ"},
{"ind_3fd", "تَرِنَّانِ"},
{"ind_3fp", "يَرْنِنَّ"},
{"ind_3fs", "تَرِنُّ"},
{"ind_3md", "يَرِنَّانِ"},
{"ind_3mp", "يَرِنُّونَ"},
{"ind_3ms", "يَرِنُّ"},
{"past_1p", "رَنَنَّا"},
{"past_1s", "رَنَنْتُ"},
{"past_2d", "رَنَنْتُمَا"},
{"past_2fp", "رَنَنْتُنَّ"},
{"past_2fs", "رَنَنْتِ"},
{"past_2mp", "رَنَنْتُمْ"},
{"past_2ms", "رَنَنْتَ"},
{"past_3fd", "رَنَّتَا"},
{"past_3fp", "رَنَنَّ"},
{"past_3fs", "رَنَّتْ"},
{"past_3md", "رَنَّا"},
{"past_3mp", "رَنُّوا"},
{"past_3ms", "رَنَّ"},
},
},
{
label = "نَأَتَ (p171)", root = "نأت", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِنْئِتَا"},
{"imp_2fp", "اِنْئِتْنَ"},
{"imp_2fs", "اِنْئِتِي"},
{"imp_2mp", "اِنْئِتُوا"},
{"imp_2ms", "اِنْئِتْ"},
{"ind_1p", "نَنْئِتُ"},
{"ind_1s", "أَنْئِتُ"},
{"ind_2d", "تَنْئِتَانِ"},
{"ind_2fp", "تَنْئِتْنَ"},
{"ind_2fs", "تَنْئِتِينَ"},
{"ind_2mp", "تَنْئِتُونَ"},
{"ind_2ms", "تَنْئِتُ"},
{"ind_3fd", "تَنْئِتَانِ"},
{"ind_3fp", "يَنْئِتْنَ"},
{"ind_3fs", "تَنْئِتُ"},
{"ind_3md", "يَنْئِتَانِ"},
{"ind_3mp", "يَنْئِتُونَ"},
{"ind_3ms", "يَنْئِتُ"},
{"past_1p", "نَأَتْنَا"},
{"past_1s", "نَأَتُّ"},
{"past_2d", "نَأَتُّمَا"},
{"past_2fp", "نَأَتُّنَّ"},
{"past_2fs", "نَأَتِّ"},
{"past_2mp", "نَأَتُّمْ"},
{"past_2ms", "نَأَتَّ"},
{"past_3fd", "نَأَتَتَا"},
{"past_3fp", "نَأَتْنَ"},
{"past_3fs", "نَأَتَتْ"},
{"past_3md", "نَأَتَا"},
{"past_3mp", "نَأَتُوا"},
{"past_3ms", "نَأَتَ"},
},
},
{
label = "نَأَمَ (p171)", root = "نأم", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِنْئِمَا"},
{"imp_2fp", "اِنْئِمْنَ"},
{"imp_2fs", "اِنْئِمِي"},
{"imp_2mp", "اِنْئِمُوا"},
{"imp_2ms", "اِنْئِمْ"},
{"ind_1p", "نَنْئِمُ"},
{"ind_1s", "أَنْئِمُ"},
{"ind_2d", "تَنْئِمَانِ"},
{"ind_2fp", "تَنْئِمْنَ"},
{"ind_2fs", "تَنْئِمِينَ"},
{"ind_2mp", "تَنْئِمُونَ"},
{"ind_2ms", "تَنْئِمُ"},
{"ind_3fd", "تَنْئِمَانِ"},
{"ind_3fp", "يَنْئِمْنَ"},
{"ind_3fs", "تَنْئِمُ"},
{"ind_3md", "يَنْئِمَانِ"},
{"ind_3mp", "يَنْئِمُونَ"},
{"ind_3ms", "يَنْئِمُ"},
{"past_1p", "نَأَمْنَا"},
{"past_1s", "نَأَمْتُ"},
{"past_2d", "نَأَمْتُمَا"},
{"past_2fp", "نَأَمْتُنَّ"},
{"past_2fs", "نَأَمْتِ"},
{"past_2mp", "نَأَمْتُمْ"},
{"past_2ms", "نَأَمْتَ"},
{"past_3fd", "نَأَمَتَا"},
{"past_3fp", "نَأَمْنَ"},
{"past_3fs", "نَأَمَتْ"},
{"past_3md", "نَأَمَا"},
{"past_3mp", "نَأَمُوا"},
{"past_3ms", "نَأَمَ"},
},
},
{
label = "وَأَلَ (p173)", root = "وأل", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "إِلَا"},
{"imp_2fp", "إِلْنَ"},
{"imp_2fs", "إِلِي"},
{"imp_2mp", "إِلُوا"},
{"imp_2ms", "إِلْ"},
{"ind_1p", "نَئِلُ"},
{"ind_1s", "أَئِلُ"},
{"ind_2d", "تَئِلَانِ"},
{"ind_2fp", "تَئِلْنَ"},
{"ind_2fs", "تَئِلِينَ"},
{"ind_2mp", "تَئِلُونَ"},
{"ind_2ms", "تَئِلُ"},
{"ind_3fd", "تَئِلَانِ"},
{"ind_3fp", "يَئِلْنَ"},
{"ind_3fs", "تَئِلُ"},
{"ind_3md", "يَئِلَانِ"},
{"ind_3mp", "يَئِلُونَ"},
{"ind_3ms", "يَئِلُ"},
{"past_1p", "وَأَلْنَا"},
{"past_1s", "وَأَلْتُ"},
{"past_2d", "وَأَلْتُمَا"},
{"past_2fp", "وَأَلْتُنَّ"},
{"past_2fs", "وَأَلْتِ"},
{"past_2mp", "وَأَلْتُمْ"},
{"past_2ms", "وَأَلْتَ"},
{"past_3fd", "وَأَلَتَا"},
{"past_3fp", "وَأَلْنَ"},
{"past_3fs", "وَأَلَتْ"},
{"past_3md", "وَأَلَا"},
{"past_3mp", "وَأَلُوا"},
{"past_3ms", "وَأَلَ"},
},
},
{
label = "وَعَدَ (p173)", root = "وعد", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "عِدَا"},
{"imp_2fp", "عِدْنَ"},
{"imp_2fs", "عِدِي"},
{"imp_2mp", "عِدُوا"},
{"imp_2ms", "عِدْ"},
{"ind_1p", "نَعِدُ"},
{"ind_1s", "أَعِدُ"},
{"ind_2d", "تَعِدَانِ"},
{"ind_2fp", "تَعِدْنَ"},
{"ind_2fs", "تَعِدِينَ"},
{"ind_2mp", "تَعِدُونَ"},
{"ind_2ms", "تَعِدُ"},
{"ind_3fd", "تَعِدَانِ"},
{"ind_3fp", "يَعِدْنَ"},
{"ind_3fs", "تَعِدُ"},
{"ind_3md", "يَعِدَانِ"},
{"ind_3mp", "يَعِدُونَ"},
{"ind_3ms", "يَعِدُ"},
{"past_1p", "وَعَدْنَا"},
{"past_1s", "وَعَدْتُ"},
{"past_2d", "وَعَدْتُمَا"},
{"past_2fp", "وَعَدْتُنَّ"},
{"past_2fs", "وَعَدْتِ"},
{"past_2mp", "وَعَدْتُمْ"},
{"past_2ms", "وَعَدْتَ"},
{"past_3fd", "وَعَدَتَا"},
{"past_3fp", "وَعَدْنَ"},
{"past_3fs", "وَعَدَتْ"},
{"past_3md", "وَعَدَا"},
{"past_3mp", "وَعَدُوا"},
{"past_3ms", "وَعَدَ"},
},
},
{
label = "أَتَى (p179)", root = "أتي", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِئْتِيَا"},
{"imp_2fp", "اِئْتِينَ"},
{"imp_2fs", "اِئْتِي"},
{"imp_2mp", "اِئْتُوا"},
{"imp_2ms", "اِئْتِ"},
{"ind_1p", "نَأْتِي"},
{"ind_1s", "آتِي"},
{"ind_2d", "تَأْتِيَانِ"},
{"ind_2fp", "تَأْتِينَ"},
{"ind_2fs", "تَأْتِينَ"},
{"ind_2mp", "تَأْتُونَ"},
{"ind_2ms", "تَأْتِي"},
{"ind_3fd", "تَأْتِيَانِ"},
{"ind_3fp", "يَأْتِينَ"},
{"ind_3fs", "تَأْتِي"},
{"ind_3md", "يَأْتِيَانِ"},
{"ind_3mp", "يَأْتُونَ"},
{"ind_3ms", "يَأْتِي"},
{"past_1p", "أَتَيْنَا"},
{"past_1s", "أَتَيْتُ"},
{"past_2d", "أَتَيْتُمَا"},
{"past_2fp", "أَتَيْتُنَّ"},
{"past_2fs", "أَتَيْتِ"},
{"past_2mp", "أَتَيْتُمْ"},
{"past_2ms", "أَتَيْتَ"},
{"past_3fd", "أَتَتَا"},
{"past_3fp", "أَتَيْنَ"},
{"past_3fs", "أَتَتْ"},
{"past_3md", "أَتَيَا"},
{"past_3mp", "أَتَوْا"},
{"past_3ms", "أَتَى"},
},
},
{
label = "بَنَى (p179)", root = "بني", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِبْنِيَا"},
{"imp_2fp", "اِبْنِينَ"},
{"imp_2fs", "اِبْنِي"},
{"imp_2mp", "اِبْنُوا"},
{"imp_2ms", "اِبْنِ"},
{"ind_1p", "نَبْنِي"},
{"ind_1s", "أَبْنِي"},
{"ind_2d", "تَبْنِيَانِ"},
{"ind_2fp", "تَبْنِينَ"},
{"ind_2fs", "تَبْنِينَ"},
{"ind_2mp", "تَبْنُونَ"},
{"ind_2ms", "تَبْنِي"},
{"ind_3fd", "تَبْنِيَانِ"},
{"ind_3fp", "يَبْنِينَ"},
{"ind_3fs", "تَبْنِي"},
{"ind_3md", "يَبْنِيَانِ"},
{"ind_3mp", "يَبْنُونَ"},
{"ind_3ms", "يَبْنِي"},
{"past_1p", "بَنَيْنَا"},
{"past_1s", "بَنَيْتُ"},
{"past_2d", "بَنَيْتُمَا"},
{"past_2fp", "بَنَيْتُنَّ"},
{"past_2fs", "بَنَيْتِ"},
{"past_2mp", "بَنَيْتُمْ"},
{"past_2ms", "بَنَيْتَ"},
{"past_3fd", "بَنَتَا"},
{"past_3fp", "بَنَيْنَ"},
{"past_3fs", "بَنَتْ"},
{"past_3md", "بَنَيَا"},
{"past_3mp", "بَنَوْا"},
{"past_3ms", "بَنَى"},
},
},
{
label = "أَزَى (p180)", root = "أزي", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِئْزِيَا"},
{"imp_2fp", "اِئْزِينَ"},
{"imp_2fs", "اِئْزِي"},
{"imp_2mp", "اِئْزُوا"},
{"imp_2ms", "اِئْزِ"},
{"ind_1p", "نَأْزِي"},
{"ind_1s", "آزِي"},
{"ind_2d", "تَأْزِيَانِ"},
{"ind_2fp", "تَأْزِينَ"},
{"ind_2fs", "تَأْزِينَ"},
{"ind_2mp", "تَأْزُونَ"},
{"ind_2ms", "تَأْزِي"},
{"ind_3fd", "تَأْزِيَانِ"},
{"ind_3fp", "يَأْزِينَ"},
{"ind_3fs", "تَأْزِي"},
{"ind_3md", "يَأْزِيَانِ"},
{"ind_3mp", "يَأْزُونَ"},
{"ind_3ms", "يَأْزِي"},
{"past_1p", "أَزَيْنَا"},
{"past_1s", "أَزَيْتُ"},
{"past_2d", "أَزَيْتُمَا"},
{"past_2fp", "أَزَيْتُنَّ"},
{"past_2fs", "أَزَيْتِ"},
{"past_2mp", "أَزَيْتُمْ"},
{"past_2ms", "أَزَيْتَ"},
{"past_3fd", "أَزَتَا"},
{"past_3fp", "أَزَيْنَ"},
{"past_3fs", "أَزَتْ"},
{"past_3md", "أَزَيَا"},
{"past_3mp", "أَزَوْا"},
{"past_3ms", "أَزَى"},
},
},
{
label = "قَضَى (p180)", root = "قضي", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِقْضِيَا"},
{"imp_2fp", "اِقْضِينَ"},
{"imp_2fs", "اِقْضِي"},
{"imp_2mp", "اِقْضُوا"},
{"imp_2ms", "اِقْضِ"},
{"ind_1p", "نَقْضِي"},
{"ind_1s", "أَقْضِي"},
{"ind_2d", "تَقْضِيَانِ"},
{"ind_2fp", "تَقْضِينَ"},
{"ind_2fs", "تَقْضِينَ"},
{"ind_2mp", "تَقْضُونَ"},
{"ind_2ms", "تَقْضِي"},
{"ind_3fd", "تَقْضِيَانِ"},
{"ind_3fp", "يَقْضِينَ"},
{"ind_3fs", "تَقْضِي"},
{"ind_3md", "يَقْضِيَانِ"},
{"ind_3mp", "يَقْضُونَ"},
{"ind_3ms", "يَقْضِي"},
{"past_1p", "قَضَيْنَا"},
{"past_1s", "قَضَيْتُ"},
{"past_2d", "قَضَيْتُمَا"},
{"past_2fp", "قَضَيْتُنَّ"},
{"past_2fs", "قَضَيْتِ"},
{"past_2mp", "قَضَيْتُمْ"},
{"past_2ms", "قَضَيْتَ"},
{"past_3fd", "قَضَتَا"},
{"past_3fp", "قَضَيْنَ"},
{"past_3fs", "قَضَتْ"},
{"past_3md", "قَضَيَا"},
{"past_3mp", "قَضَوْا"},
{"past_3ms", "قَضَى"},
},
},
{
label = "شَوَى (p185)", root = "شوي", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِشْوِيَا"},
{"imp_2fp", "اِشْوِينَ"},
{"imp_2fs", "اِشْوِي"},
{"imp_2mp", "اِشْوُوا"},
{"imp_2ms", "اِشْوِ"},
{"ind_1p", "نَشْوِي"},
{"ind_1s", "أَشْوِي"},
{"ind_2d", "تَشْوِيَانِ"},
{"ind_2fp", "تَشْوِينَ"},
{"ind_2fs", "تَشْوِينَ"},
{"ind_2mp", "تَشْوُونَ"},
{"ind_2ms", "تَشْوِي"},
{"ind_3fd", "تَشْوِيَانِ"},
{"ind_3fp", "يَشْوِينَ"},
{"ind_3fs", "تَشْوِي"},
{"ind_3md", "يَشْوِيَانِ"},
{"ind_3mp", "يَشْوُونَ"},
{"ind_3ms", "يَشْوِي"},
{"past_1p", "شَوَيْنَا"},
{"past_1s", "شَوَيْتُ"},
{"past_2d", "شَوَيْتُمَا"},
{"past_2fp", "شَوَيْتُنَّ"},
{"past_2fs", "شَوَيْتِ"},
{"past_2mp", "شَوَيْتُمْ"},
{"past_2ms", "شَوَيْتَ"},
{"past_3fd", "شَوَتَا"},
{"past_3fp", "شَوَيْنَ"},
{"past_3fs", "شَوَتْ"},
{"past_3md", "شَوَيَا"},
{"past_3mp", "شَوَوْا"},
{"past_3ms", "شَوَى"},
},
},
{
label = "كَوَى (p185)", root = "كوي", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِكْوِيَا"},
{"imp_2fp", "اِكْوِينَ"},
{"imp_2fs", "اِكْوِي"},
{"imp_2mp", "اِكْوُوا"},
{"imp_2ms", "اِكْوِ"},
{"ind_1p", "نَكْوِي"},
{"ind_1s", "أَكْوِي"},
{"ind_2d", "تَكْوِيَانِ"},
{"ind_2fp", "تَكْوِينَ"},
{"ind_2fs", "تَكْوِينَ"},
{"ind_2mp", "تَكْوُونَ"},
{"ind_2ms", "تَكْوِي"},
{"ind_3fd", "تَكْوِيَانِ"},
{"ind_3fp", "يَكْوِينَ"},
{"ind_3fs", "تَكْوِي"},
{"ind_3md", "يَكْوِيَانِ"},
{"ind_3mp", "يَكْوُونَ"},
{"ind_3ms", "يَكْوِي"},
{"past_1p", "كَوَيْنَا"},
{"past_1s", "كَوَيْتُ"},
{"past_2d", "كَوَيْتُمَا"},
{"past_2fp", "كَوَيْتُنَّ"},
{"past_2fs", "كَوَيْتِ"},
{"past_2mp", "كَوَيْتُمْ"},
{"past_2ms", "كَوَيْتَ"},
{"past_3fd", "كَوَتَا"},
{"past_3fp", "كَوَيْنَ"},
{"past_3fs", "كَوَتْ"},
{"past_3md", "كَوَيَا"},
{"past_3mp", "كَوَوْا"},
{"past_3ms", "كَوَى"},
},
},
{
label = "رَهَنَ (p188)", root = "رهن", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "اِرْهَنَا"},
{"imp_2fp", "اِرْهَنَّ"},
{"imp_2fs", "اِرْهَنِي"},
{"imp_2mp", "اِرْهَنُوا"},
{"imp_2ms", "اِرْهَنْ"},
{"ind_1p", "نَرْهَنُ"},
{"ind_1s", "أَرْهَنُ"},
{"ind_2d", "تَرْهَنَانِ"},
{"ind_2fp", "تَرْهَنَّ"},
{"ind_2fs", "تَرْهَنِينَ"},
{"ind_2mp", "تَرْهَنُونَ"},
{"ind_2ms", "تَرْهَنُ"},
{"ind_3fd", "تَرْهَنَانِ"},
{"ind_3fp", "يَرْهَنَّ"},
{"ind_3fs", "تَرْهَنُ"},
{"ind_3md", "يَرْهَنَانِ"},
{"ind_3mp", "يَرْهَنُونَ"},
{"ind_3ms", "يَرْهَنُ"},
{"past_1p", "رَهَنَّا"},
{"past_1s", "رَهَنْتُ"},
{"past_2d", "رَهَنْتُمَا"},
{"past_2fp", "رَهَنْتُنَّ"},
{"past_2fs", "رَهَنْتِ"},
{"past_2mp", "رَهَنْتُمْ"},
{"past_2ms", "رَهَنْتَ"},
{"past_3fd", "رَهَنَتَا"},
{"past_3fp", "رَهَنَّ"},
{"past_3fs", "رَهَنَتْ"},
{"past_3md", "رَهَنَا"},
{"past_3mp", "رَهَنُوا"},
{"past_3ms", "رَهَنَ"},
},
},
{
label = "ضَغَطَ (p188)", root = "ضغط", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "اِضْغَطَا"},
{"imp_2fp", "اِضْغَطْنَ"},
{"imp_2fs", "اِضْغَطِي"},
{"imp_2mp", "اِضْغَطُوا"},
{"imp_2ms", "اِضْغَطْ"},
{"ind_1p", "نَضْغَطُ"},
{"ind_1s", "أَضْغَطُ"},
{"ind_2d", "تَضْغَطَانِ"},
{"ind_2fp", "تَضْغَطْنَ"},
{"ind_2fs", "تَضْغَطِينَ"},
{"ind_2mp", "تَضْغَطُونَ"},
{"ind_2ms", "تَضْغَطُ"},
{"ind_3fd", "تَضْغَطَانِ"},
{"ind_3fp", "يَضْغَطْنَ"},
{"ind_3fs", "تَضْغَطُ"},
{"ind_3md", "يَضْغَطَانِ"},
{"ind_3mp", "يَضْغَطُونَ"},
{"ind_3ms", "يَضْغَطُ"},
{"past_1p", "ضَغَطْنَا"},
{"past_1s", "ضَغَطْتُ"},
{"past_2d", "ضَغَطْتُمَا"},
{"past_2fp", "ضَغَطْتُنَّ"},
{"past_2fs", "ضَغَطْتِ"},
{"past_2mp", "ضَغَطْتُمْ"},
{"past_2ms", "ضَغَطْتَ"},
{"past_3fd", "ضَغَطَتَا"},
{"past_3fp", "ضَغَطْنَ"},
{"past_3fs", "ضَغَطَتْ"},
{"past_3md", "ضَغَطَا"},
{"past_3mp", "ضَغَطُوا"},
{"past_3ms", "ضَغَطَ"},
},
},
{
label = "مَنَعَ (p189)", root = "منع", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "اِمْنَعَا"},
{"imp_2fp", "اِمْنَعْنَ"},
{"imp_2fs", "اِمْنَعِي"},
{"imp_2mp", "اِمْنَعُوا"},
{"imp_2ms", "اِمْنَعْ"},
{"ind_1p", "نَمْنَعُ"},
{"ind_1s", "أَمْنَعُ"},
{"ind_2d", "تَمْنَعَانِ"},
{"ind_2fp", "تَمْنَعْنَ"},
{"ind_2fs", "تَمْنَعِينَ"},
{"ind_2mp", "تَمْنَعُونَ"},
{"ind_2ms", "تَمْنَعُ"},
{"ind_3fd", "تَمْنَعَانِ"},
{"ind_3fp", "يَمْنَعْنَ"},
{"ind_3fs", "تَمْنَعُ"},
{"ind_3md", "يَمْنَعَانِ"},
{"ind_3mp", "يَمْنَعُونَ"},
{"ind_3ms", "يَمْنَعُ"},
{"past_1p", "مَنَعْنَا"},
{"past_1s", "مَنَعْتُ"},
{"past_2d", "مَنَعْتُمَا"},
{"past_2fp", "مَنَعْتُنَّ"},
{"past_2fs", "مَنَعْتِ"},
{"past_2mp", "مَنَعْتُمْ"},
{"past_2ms", "مَنَعْتَ"},
{"past_3fd", "مَنَعَتَا"},
{"past_3fp", "مَنَعْنَ"},
{"past_3fs", "مَنَعَتْ"},
{"past_3md", "مَنَعَا"},
{"past_3mp", "مَنَعُوا"},
{"past_3ms", "مَنَعَ"},
},
},
{
label = "ذَهَبَ (p189)", root = "ذهب", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "اِذْهَبَا"},
{"imp_2fp", "اِذْهَبْنَ"},
{"imp_2fs", "اِذْهَبِي"},
{"imp_2mp", "اِذْهَبُوا"},
{"imp_2ms", "اِذْهَبْ"},
{"ind_1p", "نَذْهَبُ"},
{"ind_1s", "أَذْهَبُ"},
{"ind_2d", "تَذْهَبَانِ"},
{"ind_2fp", "تَذْهَبْنَ"},
{"ind_2fs", "تَذْهَبِينَ"},
{"ind_2mp", "تَذْهَبُونَ"},
{"ind_2ms", "تَذْهَبُ"},
{"ind_3fd", "تَذْهَبَانِ"},
{"ind_3fp", "يَذْهَبْنَ"},
{"ind_3fs", "تَذْهَبُ"},
{"ind_3md", "يَذْهَبَانِ"},
{"ind_3mp", "يَذْهَبُونَ"},
{"ind_3ms", "يَذْهَبُ"},
{"past_1p", "ذَهَبْنَا"},
{"past_1s", "ذَهَبْتُ"},
{"past_2d", "ذَهَبْتُمَا"},
{"past_2fp", "ذَهَبْتُنَّ"},
{"past_2fs", "ذَهَبْتِ"},
{"past_2mp", "ذَهَبْتُمْ"},
{"past_2ms", "ذَهَبْتَ"},
{"past_3fd", "ذَهَبَتَا"},
{"past_3fp", "ذَهَبْنَ"},
{"past_3fs", "ذَهَبَتْ"},
{"past_3md", "ذَهَبَا"},
{"past_3mp", "ذَهَبُوا"},
{"past_3ms", "ذَهَبَ"},
},
},
{
label = "كَعَّ (p191)", root = "كعع", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "كَعَّا"},
{"imp_2fp", "اِكْعَعْنَ"},
{"imp_2fs", "كَعِّي"},
{"imp_2mp", "كَعُّوا"},
{"imp_2ms", "كَعَّ"},
{"ind_1p", "نَكَعُّ"},
{"ind_1s", "أَكَعُّ"},
{"ind_2d", "تَكَعَّانِ"},
{"ind_2fp", "تَكْعَعْنَ"},
{"ind_2fs", "تَكَعِّينَ"},
{"ind_2mp", "تَكَعُّونَ"},
{"ind_2ms", "تَكَعُّ"},
{"ind_3fd", "تَكَعَّانِ"},
{"ind_3fp", "يَكْعَعْنَ"},
{"ind_3fs", "تَكَعُّ"},
{"ind_3md", "يَكَعَّانِ"},
{"ind_3mp", "يَكَعُّونَ"},
{"ind_3ms", "يَكَعُّ"},
{"past_1p", "كَعَعْنَا"},
{"past_1s", "كَعَعْتُ"},
{"past_2d", "كَعَعْتُمَا"},
{"past_2fp", "كَعَعْتُنَّ"},
{"past_2fs", "كَعَعْتِ"},
{"past_2mp", "كَعَعْتُمْ"},
{"past_2ms", "كَعَعْتَ"},
{"past_3fd", "كَعَّتَا"},
{"past_3fp", "كَعَعْنَ"},
{"past_3fs", "كَعَّتْ"},
{"past_3md", "كَعَّا"},
{"past_3mp", "كَعُّوا"},
{"past_3ms", "كَعَّ"},
},
},
{
label = "رَخَّ (p191)", root = "رخخ", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "رَخَّا"},
{"imp_2fp", "اِرْخَخْنَ"},
{"imp_2fs", "رَخِّي"},
{"imp_2mp", "رَخُّوا"},
{"imp_2ms", "رَخِّ"},
{"ind_1p", "نَرَخُّ"},
{"ind_1s", "أَرَخُّ"},
{"ind_2d", "تَرَخَّانِ"},
{"ind_2fp", "تَرْخَخْنَ"},
{"ind_2fs", "تَرَخِّينَ"},
{"ind_2mp", "تَرَخُّونَ"},
{"ind_2ms", "تَرَخُّ"},
{"ind_3fd", "تَرَخَّانِ"},
{"ind_3fp", "يَرْخَخْنَ"},
{"ind_3fs", "تَرَخُّ"},
{"ind_3md", "يَرَخَّانِ"},
{"ind_3mp", "يَرَخُّونَ"},
{"ind_3ms", "يَرَخُّ"},
{"past_1p", "رَخَخْنَا"},
{"past_1s", "رَخَخْتُ"},
{"past_2d", "رَخَخْتُمَا"},
{"past_2fp", "رَخَخْتُنَّ"},
{"past_2fs", "رَخَخْتِ"},
{"past_2mp", "رَخَخْتُمْ"},
{"past_2ms", "رَخَخْتَ"},
{"past_3fd", "رَخَّتَا"},
{"past_3fp", "رَخَخْنَ"},
{"past_3fs", "رَخَّتْ"},
{"past_3md", "رَخَّا"},
{"past_3mp", "رَخُّوا"},
{"past_3ms", "رَخَّ"},
},
},
{
label = "دَرَأَ (p196)", root = "درأ", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "اِدْرَآ"},
{"imp_2fp", "اِدْرَأْنَ"},
{"imp_2fs", "اِدْرَئِي"},
{"imp_2mp", "اِدْرَؤُوا"},
{"imp_2ms", "اِدْرَأْ"},
{"ind_1p", "نَدْرَأُ"},
{"ind_1s", "أَدْرَأُ"},
{"ind_2d", "تَدْرَآنِ"},
{"ind_2fp", "تَدْرَأْنَ"},
{"ind_2fs", "تَدْرَئِينَ"},
{"ind_2mp", "تَدْرَؤُونَ"},
{"ind_2ms", "تَدْرَأُ"},
{"ind_3fd", "تَدْرَآنِ"},
{"ind_3fp", "يَدْرَأْنَ"},
{"ind_3fs", "تَدْرَأُ"},
{"ind_3md", "يَدْرَآنِ"},
{"ind_3mp", "يَدْرَؤُونَ"},
{"ind_3ms", "يَدْرَأُ"},
{"past_1p", "دَرَأْنَا"},
{"past_1s", "دَرَأْتُ"},
{"past_2d", "دَرَأْتُمَا"},
{"past_2fp", "دَرَأْتُنَّ"},
{"past_2fs", "دَرَأْتِ"},
{"past_2mp", "دَرَأْتُمْ"},
{"past_2ms", "دَرَأْتَ"},
{"past_3fd", "دَرَأَتَا"},
{"past_3fp", "دَرَأْنَ"},
{"past_3fs", "دَرَأَتْ"},
{"past_3md", "دَرَآ"},
{"past_3mp", "دَرَؤُوا"},
{"past_3ms", "دَرَأَ"},
},
},
{
label = "لَجَأَ (p196)", root = "لجأ", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "اِلْجَآ"},
{"imp_2fp", "اِلْجَأْنَ"},
{"imp_2fs", "اِلْجَئِي"},
{"imp_2mp", "اِلْجَؤُوا"},
{"imp_2ms", "اِلْجَأْ"},
{"ind_1p", "نَلْجَأُ"},
{"ind_1s", "أَلْجَأُ"},
{"ind_2d", "تَلْجَآنِ"},
{"ind_2fp", "تَلْجَأْنَ"},
{"ind_2fs", "تَلْجَئِينَ"},
{"ind_2mp", "تَلْجَؤُونَ"},
{"ind_2ms", "تَلْجَأُ"},
{"ind_3fd", "تَلْجَآنِ"},
{"ind_3fp", "يَلْجَأْنَ"},
{"ind_3fs", "تَلْجَأُ"},
{"ind_3md", "يَلْجَآنِ"},
{"ind_3mp", "يَلْجَؤُونَ"},
{"ind_3ms", "يَلْجَأُ"},
{"past_1p", "لَجَأْنَا"},
{"past_1s", "لَجَأْتُ"},
{"past_2d", "لَجَأْتُمَا"},
{"past_2fp", "لَجَأْتُنَّ"},
{"past_2fs", "لَجَأْتِ"},
{"past_2mp", "لَجَأْتُمْ"},
{"past_2ms", "لَجَأْتَ"},
{"past_3fd", "لَجَأَتَا"},
{"past_3fp", "لَجَأْنَ"},
{"past_3fs", "لَجَأَتْ"},
{"past_3md", "لَجَآ"},
{"past_3mp", "لَجَؤُوا"},
{"past_3ms", "لَجَأَ"},
},
},
{
label = "حَسُنَ (p207)", root = "حسن", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُحْسُنَا"},
{"imp_2fp", "اُحْسُنَّ"},
{"imp_2fs", "اُحْسُنِي"},
{"imp_2mp", "اُحْسُنُوا"},
{"imp_2ms", "اُحْسُنْ"},
{"ind_1p", "نَحْسُنُ"},
{"ind_1s", "أَحْسُنُ"},
{"ind_2d", "تَحْسُنَانِ"},
{"ind_2fp", "تَحْسُنَّ"},
{"ind_2fs", "تَحْسُنِينَ"},
{"ind_2mp", "تَحْسُنُونَ"},
{"ind_2ms", "تَحْسُنُ"},
{"ind_3fd", "تَحْسُنَانِ"},
{"ind_3fp", "يَحْسُنَّ"},
{"ind_3fs", "تَحْسُنُ"},
{"ind_3md", "يَحْسُنَانِ"},
{"ind_3mp", "يَحْسُنُونَ"},
{"ind_3ms", "يَحْسُنُ"},
{"past_1p", "حَسُنَّا"},
{"past_1s", "حَسُنْتُ"},
{"past_2d", "حَسُنْتُمَا"},
{"past_2fp", "حَسُنْتُنَّ"},
{"past_2fs", "حَسُنْتِ"},
{"past_2mp", "حَسُنْتُمْ"},
{"past_2ms", "حَسُنْتَ"},
{"past_3fd", "حَسُنَتَا"},
{"past_3fp", "حَسُنَّ"},
{"past_3fs", "حَسُنَتْ"},
{"past_3md", "حَسُنَا"},
{"past_3mp", "حَسُنُوا"},
{"past_3ms", "حَسُنَ"},
},
},
{
label = "عَنُفَ (p207)", root = "عنف", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُعْنُفَا"},
{"imp_2fp", "اُعْنُفْنَ"},
{"imp_2fs", "اُعْنُفِي"},
{"imp_2mp", "اُعْنُفُوا"},
{"imp_2ms", "اُعْنُفْ"},
{"ind_1p", "نَعْنُفُ"},
{"ind_1s", "أَعْنُفُ"},
{"ind_2d", "تَعْنُفَانِ"},
{"ind_2fp", "تَعْنُفْنَ"},
{"ind_2fs", "تَعْنُفِينَ"},
{"ind_2mp", "تَعْنُفُونَ"},
{"ind_2ms", "تَعْنُفُ"},
{"ind_3fd", "تَعْنُفَانِ"},
{"ind_3fp", "يَعْنُفْنَ"},
{"ind_3fs", "تَعْنُفُ"},
{"ind_3md", "يَعْنُفَانِ"},
{"ind_3mp", "يَعْنُفُونَ"},
{"ind_3ms", "يَعْنُفُ"},
{"past_1p", "عَنُفْنَا"},
{"past_1s", "عَنُفْتُ"},
{"past_2d", "عَنُفْتُمَا"},
{"past_2fp", "عَنُفْتُنَّ"},
{"past_2fs", "عَنُفْتِ"},
{"past_2mp", "عَنُفْتُمْ"},
{"past_2ms", "عَنُفْتَ"},
{"past_3fd", "عَنُفَتَا"},
{"past_3fp", "عَنُفْنَ"},
{"past_3fs", "عَنُفَتْ"},
{"past_3md", "عَنُفَا"},
{"past_3mp", "عَنُفُوا"},
{"past_3ms", "عَنُفَ"},
},
},
{
label = "صَعُبَ (p208)", root = "صعب", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُصْعُبَا"},
{"imp_2fp", "اُصْعُبْنَ"},
{"imp_2fs", "اُصْعُبِي"},
{"imp_2mp", "اُصْعُبُوا"},
{"imp_2ms", "اُصْعُبْ"},
{"ind_1p", "نَصْعُبُ"},
{"ind_1s", "أَصْعُبُ"},
{"ind_2d", "تَصْعُبَانِ"},
{"ind_2fp", "تَصْعُبْنَ"},
{"ind_2fs", "تَصْعُبِينَ"},
{"ind_2mp", "تَصْعُبُونَ"},
{"ind_2ms", "تَصْعُبُ"},
{"ind_3fd", "تَصْعُبَانِ"},
{"ind_3fp", "يَصْعُبْنَ"},
{"ind_3fs", "تَصْعُبُ"},
{"ind_3md", "يَصْعُبَانِ"},
{"ind_3mp", "يَصْعُبُونَ"},
{"ind_3ms", "يَصْعُبُ"},
{"past_1p", "صَعُبْنَا"},
{"past_1s", "صَعُبْتُ"},
{"past_2d", "صَعُبْتُمَا"},
{"past_2fp", "صَعُبْتُنَّ"},
{"past_2fs", "صَعُبْتِ"},
{"past_2mp", "صَعُبْتُمْ"},
{"past_2ms", "صَعُبْتَ"},
{"past_3fd", "صَعُبَتَا"},
{"past_3fp", "صَعُبْنَ"},
{"past_3fs", "صَعُبَتْ"},
{"past_3md", "صَعُبَا"},
{"past_3mp", "صَعُبُوا"},
{"past_3ms", "صَعُبَ"},
},
},
{
label = "كَبُرَ (p208)", root = "كبر", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُكْبُرَا"},
{"imp_2fp", "اُكْبُرْنَ"},
{"imp_2fs", "اُكْبُرِي"},
{"imp_2mp", "اُكْبُرُوا"},
{"imp_2ms", "اُكْبُرْ"},
{"ind_1p", "نَكْبُرُ"},
{"ind_1s", "أَكْبُرُ"},
{"ind_2d", "تَكْبُرَانِ"},
{"ind_2fp", "تَكْبُرْنَ"},
{"ind_2fs", "تَكْبُرِينَ"},
{"ind_2mp", "تَكْبُرُونَ"},
{"ind_2ms", "تَكْبُرُ"},
{"ind_3fd", "تَكْبُرَانِ"},
{"ind_3fp", "يَكْبُرْنَ"},
{"ind_3fs", "تَكْبُرُ"},
{"ind_3md", "يَكْبُرَانِ"},
{"ind_3mp", "يَكْبُرُونَ"},
{"ind_3ms", "يَكْبُرُ"},
{"past_1p", "كَبُرْنَا"},
{"past_1s", "كَبُرْتُ"},
{"past_2d", "كَبُرْتُمَا"},
{"past_2fp", "كَبُرْتُنَّ"},
{"past_2fs", "كَبُرْتِ"},
{"past_2mp", "كَبُرْتُمْ"},
{"past_2ms", "كَبُرْتَ"},
{"past_3fd", "كَبُرَتَا"},
{"past_3fp", "كَبُرْنَ"},
{"past_3fs", "كَبُرَتْ"},
{"past_3md", "كَبُرَا"},
{"past_3mp", "كَبُرُوا"},
{"past_3ms", "كَبُرَ"},
},
},
{
label = "أَدُبَ (p213)", root = "أدب", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُؤْدُبَا"},
{"imp_2fp", "اُؤْدُبْنَ"},
{"imp_2fs", "اُؤْدُبِي"},
{"imp_2mp", "اُؤْدُبُوا"},
{"imp_2ms", "اُؤْدُبْ"},
{"ind_1p", "نَأْدُبُ"},
{"ind_1s", "آدُبُ"},
{"ind_2d", "تَأْدُبَانِ"},
{"ind_2fp", "تَأْدُبْنَ"},
{"ind_2fs", "تَأْدُبِينَ"},
{"ind_2mp", "تَأْدُبُونَ"},
{"ind_2ms", "تَأْدُبُ"},
{"ind_3fd", "تَأْدُبَانِ"},
{"ind_3fp", "يَأْدُبْنَ"},
{"ind_3fs", "تَأْدُبُ"},
{"ind_3md", "يَأْدُبَانِ"},
{"ind_3mp", "يَأْدُبُونَ"},
{"ind_3ms", "يَأْدُبُ"},
{"past_1p", "أَدُبْنَا"},
{"past_1s", "أَدُبْتُ"},
{"past_2d", "أَدُبْتُمَا"},
{"past_2fp", "أَدُبْتُنَّ"},
{"past_2fs", "أَدُبْتِ"},
{"past_2mp", "أَدُبْتُمْ"},
{"past_2ms", "أَدُبْتَ"},
{"past_3fd", "أَدُبَتَا"},
{"past_3fp", "أَدُبْنَ"},
{"past_3fs", "أَدُبَتْ"},
{"past_3md", "أَدُبَا"},
{"past_3mp", "أَدُبُوا"},
{"past_3ms", "أَدُبَ"},
},
},
{
label = "أَنُثَ (p213)", root = "أنث", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُؤْنُثَا"},
{"imp_2fp", "اُؤْنُثْنَ"},
{"imp_2fs", "اُؤْنُثِي"},
{"imp_2mp", "اُؤْنُثُوا"},
{"imp_2ms", "اُؤْنُثْ"},
{"ind_1p", "نَأْنُثُ"},
{"ind_1s", "آنُثُ"},
{"ind_2d", "تَأْنُثَانِ"},
{"ind_2fp", "تَأْنُثْنَ"},
{"ind_2fs", "تَأْنُثِينَ"},
{"ind_2mp", "تَأْنُثُونَ"},
{"ind_2ms", "تَأْنُثُ"},
{"ind_3fd", "تَأْنُثَانِ"},
{"ind_3fp", "يَأْنُثْنَ"},
{"ind_3fs", "تَأْنُثُ"},
{"ind_3md", "يَأْنُثَانِ"},
{"ind_3mp", "يَأْنُثُونَ"},
{"ind_3ms", "يَأْنُثُ"},
{"past_1p", "أَنُثْنَا"},
{"past_1s", "أَنُثْتُ"},
{"past_2d", "أَنُثْتُمَا"},
{"past_2fp", "أَنُثْتُنَّ"},
{"past_2fs", "أَنُثْتِ"},
{"past_2mp", "أَنُثْتُمْ"},
{"past_2ms", "أَنُثْتَ"},
{"past_3fd", "أَنُثَتَا"},
{"past_3fp", "أَنُثْنَ"},
{"past_3fs", "أَنُثَتْ"},
{"past_3md", "أَنُثَا"},
{"past_3mp", "أَنُثُوا"},
{"past_3ms", "أَنُثَ"},
},
},
{
label = "بَطُؤَ (p217)", root = "بطؤ", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُبْطُؤَا"},
{"imp_2fp", "اُبْطُؤْنَ"},
{"imp_2fs", "اُبْطُئِي"},
{"imp_2mp", "اُبْطُؤُوا"},
{"imp_2ms", "اُبْطُؤْ"},
{"ind_1p", "نَبْطُؤُ"},
{"ind_1s", "أَبْطُؤُ"},
{"ind_2d", "تَبْطُؤَانِ"},
{"ind_2fp", "تَبْطُؤْنَ"},
{"ind_2fs", "تَبْطُئِينَ"},
{"ind_2mp", "تَبْطُؤُونَ"},
{"ind_2ms", "تَبْطُؤُ"},
{"ind_3fd", "تَبْطُؤَانِ"},
{"ind_3fp", "يَبْطُؤْنَ"},
{"ind_3fs", "تَبْطُؤُ"},
{"ind_3md", "يَبْطُؤَانِ"},
{"ind_3mp", "يَبْطُؤُونَ"},
{"ind_3ms", "يَبْطُؤُ"},
{"past_1p", "بَطُؤْنَا"},
{"past_1s", "بَطُؤْتُ"},
{"past_2d", "بَطُؤْتُمَا"},
{"past_2fp", "بَطُؤْتُنَّ"},
{"past_2fs", "بَطُؤْتِ"},
{"past_2mp", "بَطُؤْتُمْ"},
{"past_2ms", "بَطُؤْتَ"},
{"past_3fd", "بَطُؤَتَا"},
{"past_3fp", "بَطُؤْنَ"},
{"past_3fs", "بَطُؤَتْ"},
{"past_3md", "بَطُؤَا"},
{"past_3mp", "بَطُؤُوا"},
{"past_3ms", "بَطُؤَ"},
},
},
{
label = "نَشُؤَ (p217)", root = "نشؤ", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُنْشُؤَا"},
{"imp_2fp", "اُنْشُؤْنَ"},
{"imp_2fs", "اُنْشُئِي"},
{"imp_2mp", "اُنْشُؤُوا"},
{"imp_2ms", "اُنْشُؤْ"},
{"ind_1p", "نَنْشُؤُ"},
{"ind_1s", "أَنْشُؤُ"},
{"ind_2d", "تَنْشُؤَانِ"},
{"ind_2fp", "تَنْشُؤْنَ"},
{"ind_2fs", "تَنْشُئِينَ"},
{"ind_2mp", "تَنْشُؤُونَ"},
{"ind_2ms", "تَنْشُؤُ"},
{"ind_3fd", "تَنْشُؤَانِ"},
{"ind_3fp", "يَنْشُؤْنَ"},
{"ind_3fs", "تَنْشُؤُ"},
{"ind_3md", "يَنْشُؤَانِ"},
{"ind_3mp", "يَنْشُؤُونَ"},
{"ind_3ms", "يَنْشُؤُ"},
{"past_1p", "نَشُؤْنَا"},
{"past_1s", "نَشُؤْتُ"},
{"past_2d", "نَشُؤْتُمَا"},
{"past_2fp", "نَشُؤْتُنَّ"},
{"past_2fs", "نَشُؤْتِ"},
{"past_2mp", "نَشُؤْتُمْ"},
{"past_2ms", "نَشُؤْتَ"},
{"past_3fd", "نَشُؤَتَا"},
{"past_3fp", "نَشُؤْنَ"},
{"past_3fs", "نَشُؤَتْ"},
{"past_3md", "نَشُؤَا"},
{"past_3mp", "نَشُؤُوا"},
{"past_3ms", "نَشُؤَ"},
},
},
{
label = "وَخُشَ (p219)", root = "وخش", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُوخُشَا"},
{"imp_2fp", "اُوخُشْنَ"},
{"imp_2fs", "اُوخُشِي"},
{"imp_2mp", "اُوخُشُوا"},
{"imp_2ms", "اُوخُشْ"},
{"ind_1p", "نَوْخُشُ"},
{"ind_1s", "أَوْخُشُ"},
{"ind_2d", "تَوْخُشَانِ"},
{"ind_2fp", "تَوْخُشْنَ"},
{"ind_2fs", "تَوْخُشِينَ"},
{"ind_2mp", "تَوْخُشُونَ"},
{"ind_2ms", "تَوْخُشُ"},
{"ind_3fd", "تَوْخُشَانِ"},
{"ind_3fp", "يَوْخُشْنَ"},
{"ind_3fs", "تَوْخُشُ"},
{"ind_3md", "يَوْخُشَانِ"},
{"ind_3mp", "يَوْخُشُونَ"},
{"ind_3ms", "يَوْخُشُ"},
{"past_1p", "وَخُشْنَا"},
{"past_1s", "وَخُشْتُ"},
{"past_2d", "وَخُشْتُمَا"},
{"past_2fp", "وَخُشْتُنَّ"},
{"past_2fs", "وَخُشْتِ"},
{"past_2mp", "وَخُشْتُمْ"},
{"past_2ms", "وَخُشْتَ"},
{"past_3fd", "وَخُشَتَا"},
{"past_3fp", "وَخُشْنَ"},
{"past_3fs", "وَخُشَتْ"},
{"past_3md", "وَخُشَا"},
{"past_3mp", "وَخُشُوا"},
{"past_3ms", "وَخُشَ"},
},
},
}
edj6q398sjsw7j264gr5cr0s12t74as
وحدة:ar-verb/testcases/6
828
241999
1159017
1158885
2026-09-10T12:39:28Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159017
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 6 من 15. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/6")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_6()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
scm276ogce0ul53boz6xwnp5gpfwcbn
1159075
1159017
2026-09-10T19:34:01Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159075
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 6 من 16. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/6")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_6()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
28jmhd4vrog0k8spo6qahrewpvxj4sw
نقاش الوحدة:ar-verb/testcases/6
829
242000
1159018
1158886
2026-09-10T12:39:28Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159018
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/6|الجزء 6 من 15]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، [[نقاش الوحدة:ar-verb/testcases/1|1]]، [[نقاش الوحدة:ar-verb/testcases/2|2]]، [[نقاش الوحدة:ar-verb/testcases/3|3]]، [[نقاش الوحدة:ar-verb/testcases/4|4]]، [[نقاش الوحدة:ar-verb/testcases/5|5]]، 6، [[نقاش الوحدة:ar-verb/testcases/7|7]]، [[نقاش الوحدة:ar-verb/testcases/8|8]]، [[نقاش الوحدة:ar-verb/testcases/9|9]]، [[نقاش الوحدة:ar-verb/testcases/10|10]]، [[نقاش الوحدة:ar-verb/testcases/11|11]]، [[نقاش الوحدة:ar-verb/testcases/12|12]]، [[نقاش الوحدة:ar-verb/testcases/13|13]]، [[نقاش الوحدة:ar-verb/testcases/14|14]]، [[نقاش الوحدة:ar-verb/testcases/15|15]] — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/6|run_tests}}
1uaap78h3eq3x81cugccgyotnwd910x
1159076
1159018
2026-09-10T19:34:02Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159076
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/6|الجزء 6 من 16]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، [[نقاش الوحدة:ar-verb/testcases/1|1]]، [[نقاش الوحدة:ar-verb/testcases/2|2]]، [[نقاش الوحدة:ar-verb/testcases/3|3]]، [[نقاش الوحدة:ar-verb/testcases/4|4]]، [[نقاش الوحدة:ar-verb/testcases/5|5]]، 6، [[نقاش الوحدة:ar-verb/testcases/7|7]]، [[نقاش الوحدة:ar-verb/testcases/8|8]]، [[نقاش الوحدة:ar-verb/testcases/9|9]]، [[نقاش الوحدة:ar-verb/testcases/10|10]]، [[نقاش الوحدة:ar-verb/testcases/11|11]]، [[نقاش الوحدة:ar-verb/testcases/12|12]]، [[نقاش الوحدة:ar-verb/testcases/13|13]]، [[نقاش الوحدة:ar-verb/testcases/14|14]]، [[نقاش الوحدة:ar-verb/testcases/15|15]]، [[نقاش الوحدة:ar-verb/testcases/16|16]] — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/6|run_tests}}
rehszr379bg3h7v5xv0b5wqt1om49rn
وحدة:ar-verb/testcases/بيانات/7
828
242210
1159019
1158925
2026-09-10T12:39:30Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159019
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 7 من 15.
return {
{
label = "وَسُمَ (p219)", root = "وسم", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُوسُمَا"},
{"imp_2fp", "اُوسُمْنَ"},
{"imp_2fs", "اُوسُمِي"},
{"imp_2mp", "اُوسُمُوا"},
{"imp_2ms", "اُوسُمْ"},
{"ind_1p", "نَوْسُمُ"},
{"ind_1s", "أَوْسُمُ"},
{"ind_2d", "تَوْسُمَانِ"},
{"ind_2fp", "تَوْسُمْنَ"},
{"ind_2fs", "تَوْسُمِينَ"},
{"ind_2mp", "تَوْسُمُونَ"},
{"ind_2ms", "تَوْسُمُ"},
{"ind_3fd", "تَوْسُمَانِ"},
{"ind_3fp", "يَوْسُمْنَ"},
{"ind_3fs", "تَوْسُمُ"},
{"ind_3md", "يَوْسُمَانِ"},
{"ind_3mp", "يَوْسُمُونَ"},
{"ind_3ms", "يَوْسُمُ"},
{"past_1p", "وَسُمْنَا"},
{"past_1s", "وَسُمْتُ"},
{"past_2d", "وَسُمْتُمَا"},
{"past_2fp", "وَسُمْتُنَّ"},
{"past_2fs", "وَسُمْتِ"},
{"past_2mp", "وَسُمْتُمْ"},
{"past_2ms", "وَسُمْتَ"},
{"past_3fd", "وَسُمَتَا"},
{"past_3fp", "وَسُمْنَ"},
{"past_3fs", "وَسُمَتْ"},
{"past_3md", "وَسُمَا"},
{"past_3mp", "وَسُمُوا"},
{"past_3ms", "وَسُمَ"},
},
},
{
label = "فَرِحَ (p224)", root = "فرح", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِفْرَحَا"},
{"imp_2fp", "اِفْرَحْنَ"},
{"imp_2fs", "اِفْرَحِي"},
{"imp_2mp", "اِفْرَحُوا"},
{"imp_2ms", "اِفْرَحْ"},
{"ind_1p", "نَفْرَحُ"},
{"ind_1s", "أَفْرَحُ"},
{"ind_2d", "تَفْرَحَانِ"},
{"ind_2fp", "تَفْرَحْنَ"},
{"ind_2fs", "تَفْرَحِينَ"},
{"ind_2mp", "تَفْرَحُونَ"},
{"ind_2ms", "تَفْرَحُ"},
{"ind_3fd", "تَفْرَحَانِ"},
{"ind_3fp", "يَفْرَحْنَ"},
{"ind_3fs", "تَفْرَحُ"},
{"ind_3md", "يَفْرَحَانِ"},
{"ind_3mp", "يَفْرَحُونَ"},
{"ind_3ms", "يَفْرَحُ"},
{"past_1p", "فَرِحْنَا"},
{"past_1s", "فَرِحْتُ"},
{"past_2d", "فَرِحْتُمَا"},
{"past_2fp", "فَرِحْتُنَّ"},
{"past_2fs", "فَرِحْتِ"},
{"past_2mp", "فَرِحْتُمْ"},
{"past_2ms", "فَرِحْتَ"},
{"past_3fd", "فَرِحَتَا"},
{"past_3fp", "فَرِحْنَ"},
{"past_3fs", "فَرِحَتْ"},
{"past_3md", "فَرِحَا"},
{"past_3mp", "فَرِحُوا"},
{"past_3ms", "فَرِحَ"},
},
},
{
label = "شَبِعَ (p224)", root = "شبع", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِشْبَعَا"},
{"imp_2fp", "اِشْبَعْنَ"},
{"imp_2fs", "اِشْبَعِي"},
{"imp_2mp", "اِشْبَعُوا"},
{"imp_2ms", "اِشْبَعْ"},
{"ind_1p", "نَشْبَعُ"},
{"ind_1s", "أَشْبَعُ"},
{"ind_2d", "تَشْبَعَانِ"},
{"ind_2fp", "تَشْبَعْنَ"},
{"ind_2fs", "تَشْبَعِينَ"},
{"ind_2mp", "تَشْبَعُونَ"},
{"ind_2ms", "تَشْبَعُ"},
{"ind_3fd", "تَشْبَعَانِ"},
{"ind_3fp", "يَشْبَعْنَ"},
{"ind_3fs", "تَشْبَعُ"},
{"ind_3md", "يَشْبَعَانِ"},
{"ind_3mp", "يَشْبَعُونَ"},
{"ind_3ms", "يَشْبَعُ"},
{"past_1p", "شَبِعْنَا"},
{"past_1s", "شَبِعْتُ"},
{"past_2d", "شَبِعْتُمَا"},
{"past_2fp", "شَبِعْتُنَّ"},
{"past_2fs", "شَبِعْتِ"},
{"past_2mp", "شَبِعْتُمْ"},
{"past_2ms", "شَبِعْتَ"},
{"past_3fd", "شَبِعَتَا"},
{"past_3fp", "شَبِعْنَ"},
{"past_3fs", "شَبِعَتْ"},
{"past_3md", "شَبِعَا"},
{"past_3mp", "شَبِعُوا"},
{"past_3ms", "شَبِعَ"},
},
},
{
label = "حَزِنَ (p225)", root = "حزن", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِحْزَنَا"},
{"imp_2fp", "اِحْزَنَّ"},
{"imp_2fs", "اِحْزَنِي"},
{"imp_2mp", "اِحْزَنُوا"},
{"imp_2ms", "اِحْزَنْ"},
{"ind_1p", "نَحْزَنُ"},
{"ind_1s", "أَحْزَنُ"},
{"ind_2d", "تَحْزَنَانِ"},
{"ind_2fp", "تَحْزَنَّ"},
{"ind_2fs", "تَحْزَنِينَ"},
{"ind_2mp", "تَحْزَنُونَ"},
{"ind_2ms", "تَحْزَنُ"},
{"ind_3fd", "تَحْزَنَانِ"},
{"ind_3fp", "يَحْزَنَّ"},
{"ind_3fs", "تَحْزَنُ"},
{"ind_3md", "يَحْزَنَانِ"},
{"ind_3mp", "يَحْزَنُونَ"},
{"ind_3ms", "يَحْزَنُ"},
{"past_1p", "حَزِنَّا"},
{"past_1s", "حَزِنْتُ"},
{"past_2d", "حَزِنْتُمَا"},
{"past_2fp", "حَزِنْتُنَّ"},
{"past_2fs", "حَزِنْتِ"},
{"past_2mp", "حَزِنْتُمْ"},
{"past_2ms", "حَزِنْتَ"},
{"past_3fd", "حَزِنَتَا"},
{"past_3fp", "حَزِنَّ"},
{"past_3fs", "حَزِنَتْ"},
{"past_3md", "حَزِنَا"},
{"past_3mp", "حَزِنُوا"},
{"past_3ms", "حَزِنَ"},
},
},
{
label = "رَكِبَ (p225)", root = "ركب", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِرْكَبَا"},
{"imp_2fp", "اِرْكَبْنَ"},
{"imp_2fs", "اِرْكَبِي"},
{"imp_2mp", "اِرْكَبُوا"},
{"imp_2ms", "اِرْكَبْ"},
{"ind_1p", "نَرْكَبُ"},
{"ind_1s", "أَرْكَبُ"},
{"ind_2d", "تَرْكَبَانِ"},
{"ind_2fp", "تَرْكَبْنَ"},
{"ind_2fs", "تَرْكَبِينَ"},
{"ind_2mp", "تَرْكَبُونَ"},
{"ind_2ms", "تَرْكَبُ"},
{"ind_3fd", "تَرْكَبَانِ"},
{"ind_3fp", "يَرْكَبْنَ"},
{"ind_3fs", "تَرْكَبُ"},
{"ind_3md", "يَرْكَبَانِ"},
{"ind_3mp", "يَرْكَبُونَ"},
{"ind_3ms", "يَرْكَبُ"},
{"past_1p", "رَكِبْنَا"},
{"past_1s", "رَكِبْتُ"},
{"past_2d", "رَكِبْتُمَا"},
{"past_2fp", "رَكِبْتُنَّ"},
{"past_2fs", "رَكِبْتِ"},
{"past_2mp", "رَكِبْتُمْ"},
{"past_2ms", "رَكِبْتَ"},
{"past_3fd", "رَكِبَتَا"},
{"past_3fp", "رَكِبْنَ"},
{"past_3fs", "رَكِبَتْ"},
{"past_3md", "رَكِبَا"},
{"past_3mp", "رَكِبُوا"},
{"past_3ms", "رَكِبَ"},
},
},
{
label = "شَرِبَ (p226)", root = "شرب", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِشْرَبَا"},
{"imp_2fp", "اِشْرَبْنَ"},
{"imp_2fs", "اِشْرَبِي"},
{"imp_2mp", "اِشْرَبُوا"},
{"imp_2ms", "اِشْرَبْ"},
{"ind_1p", "نَشْرَبُ"},
{"ind_1s", "أَشْرَبُ"},
{"ind_2d", "تَشْرَبَانِ"},
{"ind_2fp", "تَشْرَبْنَ"},
{"ind_2fs", "تَشْرَبِينَ"},
{"ind_2mp", "تَشْرَبُونَ"},
{"ind_2ms", "تَشْرَبُ"},
{"ind_3fd", "تَشْرَبَانِ"},
{"ind_3fp", "يَشْرَبْنَ"},
{"ind_3fs", "تَشْرَبُ"},
{"ind_3md", "يَشْرَبَانِ"},
{"ind_3mp", "يَشْرَبُونَ"},
{"ind_3ms", "يَشْرَبُ"},
{"past_1p", "شَرِبْنَا"},
{"past_1s", "شَرِبْتُ"},
{"past_2d", "شَرِبْتُمَا"},
{"past_2fp", "شَرِبْتُنَّ"},
{"past_2fs", "شَرِبْتِ"},
{"past_2mp", "شَرِبْتُمْ"},
{"past_2ms", "شَرِبْتَ"},
{"past_3fd", "شَرِبَتَا"},
{"past_3fp", "شَرِبْنَ"},
{"past_3fs", "شَرِبَتْ"},
{"past_3md", "شَرِبَا"},
{"past_3mp", "شَرِبُوا"},
{"past_3ms", "شَرِبَ"},
},
},
{
label = "ضَحِكَ (p226)", root = "ضحك", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِضْحَكَا"},
{"imp_2fp", "اِضْحَكْنَ"},
{"imp_2fs", "اِضْحَكِي"},
{"imp_2mp", "اِضْحَكُوا"},
{"imp_2ms", "اِضْحَكْ"},
{"ind_1p", "نَضْحَكُ"},
{"ind_1s", "أَضْحَكُ"},
{"ind_2d", "تَضْحَكَانِ"},
{"ind_2fp", "تَضْحَكْنَ"},
{"ind_2fs", "تَضْحَكِينَ"},
{"ind_2mp", "تَضْحَكُونَ"},
{"ind_2ms", "تَضْحَكُ"},
{"ind_3fd", "تَضْحَكَانِ"},
{"ind_3fp", "يَضْحَكْنَ"},
{"ind_3fs", "تَضْحَكُ"},
{"ind_3md", "يَضْحَكَانِ"},
{"ind_3mp", "يَضْحَكُونَ"},
{"ind_3ms", "يَضْحَكُ"},
{"past_1p", "ضَحِكْنَا"},
{"past_1s", "ضَحِكْتُ"},
{"past_2d", "ضَحِكْتُمَا"},
{"past_2fp", "ضَحِكْتُنَّ"},
{"past_2fs", "ضَحِكْتِ"},
{"past_2mp", "ضَحِكْتُمْ"},
{"past_2ms", "ضَحِكْتَ"},
{"past_3fd", "ضَحِكَتَا"},
{"past_3fp", "ضَحِكْنَ"},
{"past_3fs", "ضَحِكَتْ"},
{"past_3md", "ضَحِكَا"},
{"past_3mp", "ضَحِكُوا"},
{"past_3ms", "ضَحِكَ"},
},
},
{
label = "جَفَّ (p228)", root = "جفف", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "جَفَّا"},
{"imp_2fp", "اِجْفَفْنَ"},
{"imp_2fs", "جَفِّي"},
{"imp_2mp", "جَفُّوا"},
{"imp_2ms", "جَفَّ"},
{"ind_1p", "نَجَفُّ"},
{"ind_1s", "أَجَفُّ"},
{"ind_2d", "تَجَفَّانِ"},
{"ind_2fp", "تَجْفَفْنَ"},
{"ind_2fs", "تَجَفِّينَ"},
{"ind_2mp", "تَجَفُّونَ"},
{"ind_2ms", "تَجَفُّ"},
{"ind_3fd", "تَجَفَّانِ"},
{"ind_3fp", "يَجْفَفْنَ"},
{"ind_3fs", "تَجَفُّ"},
{"ind_3md", "يَجَفَّانِ"},
{"ind_3mp", "يَجَفُّونَ"},
{"ind_3ms", "يَجَفُّ"},
{"past_1p", "جَفِفْنَا"},
{"past_1s", "جَفِفْتُ"},
{"past_2d", "جَفِفْتُمَا"},
{"past_2fp", "جَفِفْتُنَّ"},
{"past_2fs", "جَفِفْتِ"},
{"past_2mp", "جَفِفْتُمْ"},
{"past_2ms", "جَفِفْتَ"},
{"past_3fd", "جَفَّتَا"},
{"past_3fp", "جَفِفْنَ"},
{"past_3fs", "جَفَّتْ"},
{"past_3md", "جَفَّا"},
{"past_3mp", "جَفُّوا"},
{"past_3ms", "جَفَّ"},
},
},
{
label = "هَدَّ (p228)", root = "هدد", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "هَدَّا"},
{"imp_2fp", "اِهْدَدْنَ"},
{"imp_2fs", "هَدِّي"},
{"imp_2mp", "هَدُّوا"},
{"imp_2ms", "هَدَّ"},
{"ind_1p", "نَهَدُّ"},
{"ind_1s", "أَهَدُّ"},
{"ind_2d", "تَهَدَّانِ"},
{"ind_2fp", "تَهْدَدْنَ"},
{"ind_2fs", "تَهَدِّينَ"},
{"ind_2mp", "تَهَدُّونَ"},
{"ind_2ms", "تَهَدُّ"},
{"ind_3fd", "تَهَدَّانِ"},
{"ind_3fp", "يَهْدَدْنَ"},
{"ind_3fs", "تَهَدُّ"},
{"ind_3md", "يَهَدَّانِ"},
{"ind_3mp", "يَهَدُّونَ"},
{"ind_3ms", "يَهَدُّ"},
{"past_1p", "هَدِدْنَا"},
{"past_1s", "هَدِدْتُ"},
{"past_2d", "هَدِدْتُمَا"},
{"past_2fp", "هَدِدْتُنَّ"},
{"past_2fs", "هَدِدْتِ"},
{"past_2mp", "هَدِدْتُمْ"},
{"past_2ms", "هَدِدْتَ"},
{"past_3fd", "هَدَّتَا"},
{"past_3fp", "هَدِدْنَ"},
{"past_3fs", "هَدَّتْ"},
{"past_3md", "هَدَّا"},
{"past_3mp", "هَدُّوا"},
{"past_3ms", "هَدَّ"},
},
},
{
label = "خَصَّ (p229)", root = "خصص", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "خَصَّا"},
{"imp_2fp", "اِخْصَصْنَ"},
{"imp_2fs", "خَصِّي"},
{"imp_2mp", "خَصُّوا"},
{"imp_2ms", "خَصَّ"},
{"ind_1p", "نَخَصُّ"},
{"ind_1s", "أَخَصُّ"},
{"ind_2d", "تَخَصَّانِ"},
{"ind_2fp", "تَخْصَصْنَ"},
{"ind_2fs", "تَخَصِّينَ"},
{"ind_2mp", "تَخَصُّونَ"},
{"ind_2ms", "تَخَصُّ"},
{"ind_3fd", "تَخَصَّانِ"},
{"ind_3fp", "يَخْصَصْنَ"},
{"ind_3fs", "تَخَصُّ"},
{"ind_3md", "يَخَصَّانِ"},
{"ind_3mp", "يَخَصُّونَ"},
{"ind_3ms", "يَخَصُّ"},
{"past_1p", "خَصِصْنَا"},
{"past_1s", "خَصِصْتُ"},
{"past_2d", "خَصِصْتُمَا"},
{"past_2fp", "خَصِصْتُنَّ"},
{"past_2fs", "خَصِصْتِ"},
{"past_2mp", "خَصِصْتُمْ"},
{"past_2ms", "خَصِصْتَ"},
{"past_3fd", "خَصَّتَا"},
{"past_3fp", "خَصِصْنَ"},
{"past_3fs", "خَصَّتْ"},
{"past_3md", "خَصَّا"},
{"past_3mp", "خَصُّوا"},
{"past_3ms", "خَصَّ"},
},
},
{
label = "شَمَّ (p229)", root = "شمم", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "شَمَّا"},
{"imp_2fp", "اِشْمَمْنَ"},
{"imp_2fs", "شَمِّي"},
{"imp_2mp", "شَمُّوا"},
{"imp_2ms", "شَمَّ"},
{"ind_1p", "نَشَمُّ"},
{"ind_1s", "أَشَمُّ"},
{"ind_2d", "تَشَمَّانِ"},
{"ind_2fp", "تَشْمَمْنَ"},
{"ind_2fs", "تَشَمِّينَ"},
{"ind_2mp", "تَشَمُّونَ"},
{"ind_2ms", "تَشَمُّ"},
{"ind_3fd", "تَشَمَّانِ"},
{"ind_3fp", "يَشْمَمْنَ"},
{"ind_3fs", "تَشَمُّ"},
{"ind_3md", "يَشَمَّانِ"},
{"ind_3mp", "يَشَمُّونَ"},
{"ind_3ms", "يَشَمُّ"},
{"past_1p", "شَمِمْنَا"},
{"past_1s", "شَمِمْتُ"},
{"past_2d", "شَمِمْتُمَا"},
{"past_2fp", "شَمِمْتُنَّ"},
{"past_2fs", "شَمِمْتِ"},
{"past_2mp", "شَمِمْتُمْ"},
{"past_2ms", "شَمِمْتَ"},
{"past_3fd", "شَمَّتَا"},
{"past_3fp", "شَمِمْنَ"},
{"past_3fs", "شَمَّتْ"},
{"past_3md", "شَمَّا"},
{"past_3mp", "شَمُّوا"},
{"past_3ms", "شَمَّ"},
},
},
{
label = "أَذِنَ (p231)", root = "أذن", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِئْذَنَا"},
{"imp_2fp", "اِئْذَنَّ"},
{"imp_2fs", "اِئْذَنِي"},
{"imp_2mp", "اِئْذَنُوا"},
{"imp_2ms", "اِئْذَنْ"},
{"ind_1p", "نَأْذَنُ"},
{"ind_1s", "آذَنُ"},
{"ind_2d", "تَأْذَنَانِ"},
{"ind_2fp", "تَأْذَنَّ"},
{"ind_2fs", "تَأْذَنِينَ"},
{"ind_2mp", "تَأْذَنُونَ"},
{"ind_2ms", "تَأْذَنُ"},
{"ind_3fd", "تَأْذَنَانِ"},
{"ind_3fp", "يَأْذَنَّ"},
{"ind_3fs", "تَأْذَنُ"},
{"ind_3md", "يَأْذَنَانِ"},
{"ind_3mp", "يَأْذَنُونَ"},
{"ind_3ms", "يَأْذَنُ"},
{"past_1p", "أَذِنَّا"},
{"past_1s", "أَذِنْتُ"},
{"past_2d", "أَذِنْتُمَا"},
{"past_2fp", "أَذِنْتُنَّ"},
{"past_2fs", "أَذِنْتِ"},
{"past_2mp", "أَذِنْتُمْ"},
{"past_2ms", "أَذِنْتَ"},
{"past_3fd", "أَذِنَتَا"},
{"past_3fp", "أَذِنَّ"},
{"past_3fs", "أَذِنَتْ"},
{"past_3md", "أَذِنَا"},
{"past_3mp", "أَذِنُوا"},
{"past_3ms", "أَذِنَ"},
},
},
{
label = "أَسِدَ (p231)", root = "أسد", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِئْسَدَا"},
{"imp_2fp", "اِئْسَدْنَ"},
{"imp_2fs", "اِئْسَدِي"},
{"imp_2mp", "اِئْسَدُوا"},
{"imp_2ms", "اِئْسَدْ"},
{"ind_1p", "نَأْسَدُ"},
{"ind_1s", "آسَدُ"},
{"ind_2d", "تَأْسَدَانِ"},
{"ind_2fp", "تَأْسَدْنَ"},
{"ind_2fs", "تَأْسَدِينَ"},
{"ind_2mp", "تَأْسَدُونَ"},
{"ind_2ms", "تَأْسَدُ"},
{"ind_3fd", "تَأْسَدَانِ"},
{"ind_3fp", "يَأْسَدْنَ"},
{"ind_3fs", "تَأْسَدُ"},
{"ind_3md", "يَأْسَدَانِ"},
{"ind_3mp", "يَأْسَدُونَ"},
{"ind_3ms", "يَأْسَدُ"},
{"past_1p", "أَسِدْنَا"},
{"past_1s", "أَسِدْتُ"},
{"past_2d", "أَسِدْتُمَا"},
{"past_2fp", "أَسِدْتُنَّ"},
{"past_2fs", "أَسِدْتِ"},
{"past_2mp", "أَسِدْتُمْ"},
{"past_2ms", "أَسِدْتَ"},
{"past_3fd", "أَسِدَتَا"},
{"past_3fp", "أَسِدْنَ"},
{"past_3fs", "أَسِدَتْ"},
{"past_3md", "أَسِدَا"},
{"past_3mp", "أَسِدُوا"},
{"past_3ms", "أَسِدَ"},
},
},
{
label = "شَأَى (p160)", root = "شأو", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "اُشْؤُوَا"},
{"imp_2fp", "اُشْؤُونَ"},
{"imp_2fs", "اُشْئِي"},
{"imp_2mp", "اُشْؤُوا"},
{"imp_2ms", "اُشْؤُ"},
{"ind_1p", "نَشْؤُو"},
{"ind_1s", "أَشْؤُو"},
{"ind_2d", "تَشْؤُوَانِ"},
{"ind_2fp", "تَشْؤُونَ"},
{"ind_2fs", "تَشْئِينَ"},
{"ind_2mp", "تَشْؤُونَ"},
{"ind_2ms", "تَشْؤُو"},
{"ind_3fd", "تَشْؤُوَانِ"},
{"ind_3fp", "يَشْؤُونَ"},
{"ind_3fs", "تَشْؤُو"},
{"ind_3md", "يَشْؤُوَانِ"},
{"ind_3mp", "يَشْؤُونَ"},
{"ind_3ms", "يَشْؤُو"},
{"past_1p", "شَأَوْنَا"},
{"past_1s", "شَأَوْتُ"},
{"past_2d", "شَأَوْتُمَا"},
{"past_2fp", "شَأَوْتُنَّ"},
{"past_2fs", "شَأَوْتِ"},
{"past_2mp", "شَأَوْتُمْ"},
{"past_2ms", "شَأَوْتَ"},
{"past_3fd", "شَأَتَا"},
{"past_3fp", "شَأَوْنَ"},
{"past_3fs", "شَأَتْ"},
{"past_3md", "شَأَوَا"},
{"past_3mp", "شَأَوْا"},
{"past_3ms", "شَأَى"},
},
},
{
label = "أَثِمَ (p232)", root = "أثم", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِئْثَمَا"},
{"imp_2fp", "اِئْثَمْنَ"},
{"imp_2fs", "اِئْثَمِي"},
{"imp_2mp", "اِئْثَمُوا"},
{"imp_2ms", "اِئْثَمْ"},
{"ind_1p", "نَأْثَمُ"},
{"ind_1s", "آثَمُ"},
{"ind_2d", "تَأْثَمَانِ"},
{"ind_2fp", "تَأْثَمْنَ"},
{"ind_2fs", "تَأْثَمِينَ"},
{"ind_2mp", "تَأْثَمُونَ"},
{"ind_2ms", "تَأْثَمُ"},
{"ind_3fd", "تَأْثَمَانِ"},
{"ind_3fp", "يَأْثَمْنَ"},
{"ind_3fs", "تَأْثَمُ"},
{"ind_3md", "يَأْثَمَانِ"},
{"ind_3mp", "يَأْثَمُونَ"},
{"ind_3ms", "يَأْثَمُ"},
{"past_1p", "أَثِمْنَا"},
{"past_1s", "أَثِمْتُ"},
{"past_2d", "أَثِمْتُمَا"},
{"past_2fp", "أَثِمْتُنَّ"},
{"past_2fs", "أَثِمْتِ"},
{"past_2mp", "أَثِمْتُمْ"},
{"past_2ms", "أَثِمْتَ"},
{"past_3fd", "أَثِمَتَا"},
{"past_3fp", "أَثِمْنَ"},
{"past_3fs", "أَثِمَتْ"},
{"past_3md", "أَثِمَا"},
{"past_3mp", "أَثِمُوا"},
{"past_3ms", "أَثِمَ"},
},
},
{
label = "أَنِسَ (p232)", root = "أنس", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِئْنَسَا"},
{"imp_2fp", "اِئْنَسْنَ"},
{"imp_2fs", "اِئْنَسِي"},
{"imp_2mp", "اِئْنَسُوا"},
{"imp_2ms", "اِئْنَسْ"},
{"ind_1p", "نَأْنَسُ"},
{"ind_1s", "آنَسُ"},
{"ind_2d", "تَأْنَسَانِ"},
{"ind_2fp", "تَأْنَسْنَ"},
{"ind_2fs", "تَأْنَسِينَ"},
{"ind_2mp", "تَأْنَسُونَ"},
{"ind_2ms", "تَأْنَسُ"},
{"ind_3fd", "تَأْنَسَانِ"},
{"ind_3fp", "يَأْنَسْنَ"},
{"ind_3fs", "تَأْنَسُ"},
{"ind_3md", "يَأْنَسَانِ"},
{"ind_3mp", "يَأْنَسُونَ"},
{"ind_3ms", "يَأْنَسُ"},
{"past_1p", "أَنِسْنَا"},
{"past_1s", "أَنِسْتُ"},
{"past_2d", "أَنِسْتُمَا"},
{"past_2fp", "أَنِسْتُنَّ"},
{"past_2fs", "أَنِسْتِ"},
{"past_2mp", "أَنِسْتُمْ"},
{"past_2ms", "أَنِسْتَ"},
{"past_3fd", "أَنِسَتَا"},
{"past_3fp", "أَنِسْنَ"},
{"past_3fs", "أَنِسَتْ"},
{"past_3md", "أَنِسَا"},
{"past_3mp", "أَنِسُوا"},
{"past_3ms", "أَنِسَ"},
},
},
{
label = "سَئِمَ (p234)", root = "سئم", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِسْأَمَا"},
{"imp_2fp", "اِسْأَمْنَ"},
{"imp_2fs", "اِسْأَمِي"},
{"imp_2mp", "اِسْأَمُوا"},
{"imp_2ms", "اِسْأَمْ"},
{"ind_1p", "نَسْأَمُ"},
{"ind_1s", "أَسْأَمُ"},
{"ind_2d", "تَسْأَمَانِ"},
{"ind_2fp", "تَسْأَمْنَ"},
{"ind_2fs", "تَسْأَمِينَ"},
{"ind_2mp", "تَسْأَمُونَ"},
{"ind_2ms", "تَسْأَمُ"},
{"ind_3fd", "تَسْأَمَانِ"},
{"ind_3fp", "يَسْأَمْنَ"},
{"ind_3fs", "تَسْأَمُ"},
{"ind_3md", "يَسْأَمَانِ"},
{"ind_3mp", "يَسْأَمُونَ"},
{"ind_3ms", "يَسْأَمُ"},
{"past_1p", "سَئِمْنَا"},
{"past_1s", "سَئِمْتُ"},
{"past_2d", "سَئِمْتُمَا"},
{"past_2fp", "سَئِمْتُنَّ"},
{"past_2fs", "سَئِمْتِ"},
{"past_2mp", "سَئِمْتُمْ"},
{"past_2ms", "سَئِمْتَ"},
{"past_3fd", "سَئِمَتَا"},
{"past_3fp", "سَئِمْنَ"},
{"past_3fs", "سَئِمَتْ"},
{"past_3md", "سَئِمَا"},
{"past_3mp", "سَئِمُوا"},
{"past_3ms", "سَئِمَ"},
},
},
{
label = "دَفِئَ (p237)", root = "دفئ", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِدْفَآ"},
{"imp_2fp", "اِدْفَأْنَ"},
{"imp_2fs", "اِدْفَئِي"},
{"imp_2mp", "اِدْفَؤُوا"},
{"imp_2ms", "اِدْفَأْ"},
{"ind_1p", "نَدْفَأُ"},
{"ind_1s", "أَدْفَأُ"},
{"ind_2d", "تَدْفَآنِ"},
{"ind_2fp", "تَدْفَأْنَ"},
{"ind_2fs", "تَدْفَئِينَ"},
{"ind_2mp", "تَدْفَؤُونَ"},
{"ind_2ms", "تَدْفَأُ"},
{"ind_3fd", "تَدْفَآنِ"},
{"ind_3fp", "يَدْفَأْنَ"},
{"ind_3fs", "تَدْفَأُ"},
{"ind_3md", "يَدْفَآنِ"},
{"ind_3mp", "يَدْفَؤُونَ"},
{"ind_3ms", "يَدْفَأُ"},
{"past_1p", "دَفِئْنَا"},
{"past_1s", "دَفِئْتُ"},
{"past_2d", "دَفِئْتُمَا"},
{"past_2fp", "دَفِئْتُنَّ"},
{"past_2fs", "دَفِئْتِ"},
{"past_2mp", "دَفِئْتُمْ"},
{"past_2ms", "دَفِئْتَ"},
{"past_3fd", "دَفِئَتَا"},
{"past_3fp", "دَفِئْنَ"},
{"past_3fs", "دَفِئَتْ"},
{"past_3md", "دَفِئَا"},
{"past_3mp", "دَفِئُوا"},
{"past_3ms", "دَفِئَ"},
},
},
{
label = "دَوِيَ (p249)", root = "دوي", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِدْوَيَا"},
{"imp_2fp", "اِدْوَيْنَ"},
{"imp_2fs", "اِدْوَيْ"},
{"imp_2mp", "اِدْوَوْا"},
{"imp_2ms", "اِدْوَ"},
{"ind_1p", "نَدْوَى"},
{"ind_1s", "أَدْوَى"},
{"ind_2d", "تَدْوَيَانِ"},
{"ind_2fp", "تَدْوَيْنَ"},
{"ind_2fs", "تَدْوَيْنَ"},
{"ind_2mp", "تَدْوَوْنَ"},
{"ind_2ms", "تَدْوَى"},
{"ind_3fd", "تَدْوَيَانِ"},
{"ind_3fp", "يَدْوَيْنَ"},
{"ind_3fs", "تَدْوَى"},
{"ind_3md", "يَدْوَيَانِ"},
{"ind_3mp", "يَدْوَوْنَ"},
{"ind_3ms", "يَدْوَى"},
{"past_1p", "دَوِينَا"},
{"past_1s", "دَوِيتُ"},
{"past_2d", "دَوِيتُمَا"},
{"past_2fp", "دَوِيتُنَّ"},
{"past_2fs", "دَوِيتِ"},
{"past_2mp", "دَوِيتُمْ"},
{"past_2ms", "دَوِيتَ"},
{"past_3fd", "دَوِيَتَا"},
{"past_3fp", "دَوِينَ"},
{"past_3fs", "دَوِيَتْ"},
{"past_3md", "دَوِيَا"},
{"past_3mp", "دَوُوا"},
{"past_3ms", "دَوِيَ"},
},
},
{
label = "سَوِيَ (p249)", root = "سوي", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِسْوَيَا"},
{"imp_2fp", "اِسْوَيْنَ"},
{"imp_2fs", "اِسْوَيْ"},
{"imp_2mp", "اِسْوَوْا"},
{"imp_2ms", "اِسْوَ"},
{"ind_1p", "نَسْوَى"},
{"ind_1s", "أَسْوَى"},
{"ind_2d", "تَسْوَيَانِ"},
{"ind_2fp", "تَسْوَيْنَ"},
{"ind_2fs", "تَسْوَيْنَ"},
{"ind_2mp", "تَسْوَوْنَ"},
{"ind_2ms", "تَسْوَى"},
{"ind_3fd", "تَسْوَيَانِ"},
{"ind_3fp", "يَسْوَيْنَ"},
{"ind_3fs", "تَسْوَى"},
{"ind_3md", "يَسْوَيَانِ"},
{"ind_3mp", "يَسْوَوْنَ"},
{"ind_3ms", "يَسْوَى"},
{"past_1p", "سَوِينَا"},
{"past_1s", "سَوِيتُ"},
{"past_2d", "سَوِيتُمَا"},
{"past_2fp", "سَوِيتُنَّ"},
{"past_2fs", "سَوِيتِ"},
{"past_2mp", "سَوِيتُمْ"},
{"past_2ms", "سَوِيتَ"},
{"past_3fd", "سَوِيَتَا"},
{"past_3fp", "سَوِينَ"},
{"past_3fs", "سَوِيَتْ"},
{"past_3md", "سَوِيَا"},
{"past_3mp", "سَوُوا"},
{"past_3ms", "سَوِيَ"},
},
},
{
label = "قَوِيَ (p250)", root = "قوي", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِقْوَيَا"},
{"imp_2fp", "اِقْوَيْنَ"},
{"imp_2fs", "اِقْوَيْ"},
{"imp_2mp", "اِقْوَوْا"},
{"imp_2ms", "اِقْوَ"},
{"ind_1p", "نَقْوَى"},
{"ind_1s", "أَقْوَى"},
{"ind_2d", "تَقْوَيَانِ"},
{"ind_2fp", "تَقْوَيْنَ"},
{"ind_2fs", "تَقْوَيْنَ"},
{"ind_2mp", "تَقْوَوْنَ"},
{"ind_2ms", "تَقْوَى"},
{"ind_3fd", "تَقْوَيَانِ"},
{"ind_3fp", "يَقْوَيْنَ"},
{"ind_3fs", "تَقْوَى"},
{"ind_3md", "يَقْوَيَانِ"},
{"ind_3mp", "يَقْوَوْنَ"},
{"ind_3ms", "يَقْوَى"},
{"past_1p", "قَوِينَا"},
{"past_1s", "قَوِيتُ"},
{"past_2d", "قَوِيتُمَا"},
{"past_2fp", "قَوِيتُنَّ"},
{"past_2fs", "قَوِيتِ"},
{"past_2mp", "قَوِيتُمْ"},
{"past_2ms", "قَوِيتَ"},
{"past_3fd", "قَوِيَتَا"},
{"past_3fp", "قَوِينَ"},
{"past_3fs", "قَوِيَتْ"},
{"past_3md", "قَوِيَا"},
{"past_3mp", "قَوُوا"},
{"past_3ms", "قَوِيَ"},
},
},
{
label = "وَرِمَ (p254)", root = "ورم", wazn = "فعِل يفعِل",
forms = {
{"imp_2d", "رِمَا"},
{"imp_2fp", "رِمْنَ"},
{"imp_2fs", "رِمِي"},
{"imp_2mp", "رِمُوا"},
{"imp_2ms", "رِمْ"},
{"ind_1p", "نَرِمُ"},
{"ind_1s", "أَرِمُ"},
{"ind_2d", "تَرِمَانِ"},
{"ind_2fp", "تَرِمْنَ"},
{"ind_2fs", "تَرِمِينَ"},
{"ind_2mp", "تَرِمُونَ"},
{"ind_2ms", "تَرِمُ"},
{"ind_3fd", "تَرِمَانِ"},
{"ind_3fp", "يَرِمْنَ"},
{"ind_3fs", "تَرِمُ"},
{"ind_3md", "يَرِمَانِ"},
{"ind_3mp", "يَرِمُونَ"},
{"ind_3ms", "يَرِمُ"},
{"past_1p", "وَرِمْنَا"},
{"past_1s", "وَرِمْتُ"},
{"past_2d", "وَرِمْتُمَا"},
{"past_2fp", "وَرِمْتُنَّ"},
{"past_2fs", "وَرِمْتِ"},
{"past_2mp", "وَرِمْتُمْ"},
{"past_2ms", "وَرِمْتَ"},
{"past_3fd", "وَرِمَتَا"},
{"past_3fp", "وَرِمْنَ"},
{"past_3fs", "وَرِمَتْ"},
{"past_3md", "وَرِمَا"},
{"past_3mp", "وَرِمُوا"},
{"past_3ms", "وَرِمَ"},
},
},
{
label = "وَرِثَ (p255)", root = "ورث", wazn = "فعِل يفعِل",
forms = {
{"imp_2d", "رِثَا"},
{"imp_2fp", "رِثْنَ"},
{"imp_2fs", "رِثِي"},
{"imp_2mp", "رِثُوا"},
{"imp_2ms", "رِثْ"},
{"ind_1p", "نَرِثُ"},
{"ind_1s", "أَرِثُ"},
{"ind_2d", "تَرِثَانِ"},
{"ind_2fp", "تَرِثْنَ"},
{"ind_2fs", "تَرِثِينَ"},
{"ind_2mp", "تَرِثُونَ"},
{"ind_2ms", "تَرِثُ"},
{"ind_3fd", "تَرِثَانِ"},
{"ind_3fp", "يَرِثْنَ"},
{"ind_3fs", "تَرِثُ"},
{"ind_3md", "يَرِثَانِ"},
{"ind_3mp", "يَرِثُونَ"},
{"ind_3ms", "يَرِثُ"},
{"past_1p", "وَرِثْنَا"},
{"past_1s", "وَرِثْتُ"},
{"past_2d", "وَرِثْتُمَا"},
{"past_2fp", "وَرِثْتُنَّ"},
{"past_2fs", "وَرِثْتِ"},
{"past_2mp", "وَرِثْتُمْ"},
{"past_2ms", "وَرِثْتَ"},
{"past_3fd", "وَرِثَتَا"},
{"past_3fp", "وَرِثْنَ"},
{"past_3fs", "وَرِثَتْ"},
{"past_3md", "وَرِثَا"},
{"past_3mp", "وَرِثُوا"},
{"past_3ms", "وَرِثَ"},
},
},
{
label = "يَئِسَ (p255)", root = "يئس", wazn = "فعِل يفعِل",
forms = {
{"imp_2d", "اِيئِسَا"},
{"imp_2fp", "اِيئِسْنَ"},
{"imp_2fs", "اِيئِسِي"},
{"imp_2mp", "اِيئِسُوا"},
{"imp_2ms", "اِيئِسْ"},
{"ind_1p", "نَيْئِسُ"},
{"ind_1s", "أَيْئِسُ"},
{"ind_2d", "تَيْئِسَانِ"},
{"ind_2fp", "تَيْئِسْنَ"},
{"ind_2fs", "تَيْئِسِينَ"},
{"ind_2mp", "تَيْئِسُونَ"},
{"ind_2ms", "تَيْئِسُ"},
{"ind_3fd", "تَيْئِسَانِ"},
{"ind_3fp", "يَيْئِسْنَ"},
{"ind_3fs", "تَيْئِسُ"},
{"ind_3md", "يَيْئِسَانِ"},
{"ind_3mp", "يَيْئِسُونَ"},
{"ind_3ms", "يَيْئِسُ"},
{"past_1p", "يَئِسْنَا"},
{"past_1s", "يَئِسْتُ"},
{"past_2d", "يَئِسْتُمَا"},
{"past_2fp", "يَئِسْتُنَّ"},
{"past_2fs", "يَئِسْتِ"},
{"past_2mp", "يَئِسْتُمْ"},
{"past_2ms", "يَئِسْتَ"},
{"past_3fd", "يَئِسَتَا"},
{"past_3fp", "يَئِسْنَ"},
{"past_3fs", "يَئِسَتْ"},
{"past_3md", "يَئِسَا"},
{"past_3mp", "يَئِسُوا"},
{"past_3ms", "يَئِسَ"},
},
},
{
label = "تابَعَ (p275)", root = "تبع", wazn = "فاعل",
forms = {
{"imp_2d", "تَابِعَا"},
{"imp_2fp", "تَابِعْنَ"},
{"imp_2fs", "تَابِعِي"},
{"imp_2mp", "تَابِعُوا"},
{"imp_2ms", "تَابِعْ"},
{"ind_1p", "نُتَابِعُ"},
{"ind_1s", "أُتَابِعُ"},
{"ind_2d", "تُتَابِعَانِ"},
{"ind_2fp", "تُتَابِعْنَ"},
{"ind_2fs", "تُتَابِعِينَ"},
{"ind_2mp", "تُتَابِعُونَ"},
{"ind_2ms", "تُتَابِعُ"},
{"ind_3fd", "تُتَابِعَانِ"},
{"ind_3fp", "يُتَابِعْنَ"},
{"ind_3fs", "تُتَابِعُ"},
{"ind_3md", "يُتَابِعَانِ"},
{"ind_3mp", "يُتَابِعُونَ"},
{"ind_3ms", "يُتَابِعُ"},
{"past_1p", "تَابَعْنَا"},
{"past_1s", "تَابَعْتُ"},
{"past_2d", "تَابَعْتُمَا"},
{"past_2fp", "تَابَعْتُنَّ"},
{"past_2fs", "تَابَعْتِ"},
{"past_2mp", "تَابَعْتُمْ"},
{"past_2ms", "تَابَعْتَ"},
{"past_3fd", "تَابَعَتَا"},
{"past_3fp", "تَابَعْنَ"},
{"past_3fs", "تَابَعَتْ"},
{"past_3md", "تَابَعَا"},
{"past_3mp", "تَابَعُوا"},
{"past_3ms", "تَابَعَ"},
},
},
{
label = "غادَرَ (p275)", root = "غدر", wazn = "فاعل",
forms = {
{"imp_2d", "غَادِرَا"},
{"imp_2fp", "غَادِرْنَ"},
{"imp_2fs", "غَادِرِي"},
{"imp_2mp", "غَادِرُوا"},
{"imp_2ms", "غَادِرْ"},
{"ind_1p", "نُغَادِرُ"},
{"ind_1s", "أُغَادِرُ"},
{"ind_2d", "تُغَادِرَانِ"},
{"ind_2fp", "تُغَادِرْنَ"},
{"ind_2fs", "تُغَادِرِينَ"},
{"ind_2mp", "تُغَادِرُونَ"},
{"ind_2ms", "تُغَادِرُ"},
{"ind_3fd", "تُغَادِرَانِ"},
{"ind_3fp", "يُغَادِرْنَ"},
{"ind_3fs", "تُغَادِرُ"},
{"ind_3md", "يُغَادِرَانِ"},
{"ind_3mp", "يُغَادِرُونَ"},
{"ind_3ms", "يُغَادِرُ"},
{"past_1p", "غَادَرْنَا"},
{"past_1s", "غَادَرْتُ"},
{"past_2d", "غَادَرْتُمَا"},
{"past_2fp", "غَادَرْتُنَّ"},
{"past_2fs", "غَادَرْتِ"},
{"past_2mp", "غَادَرْتُمْ"},
{"past_2ms", "غَادَرْتَ"},
{"past_3fd", "غَادَرَتَا"},
{"past_3fp", "غَادَرْنَ"},
{"past_3fs", "غَادَرَتْ"},
{"past_3md", "غَادَرَا"},
{"past_3mp", "غَادَرُوا"},
{"past_3ms", "غَادَرَ"},
},
},
{
label = "ضارَّ (p276)", root = "ضرر", wazn = "فاعل",
forms = {
{"imp_2d", "ضَارَّا"},
{"imp_2fp", "ضَارِرْنَ"},
{"imp_2fs", "ضَارِّي"},
{"imp_2mp", "ضَارُّوا"},
{"imp_2ms", "ضَارِرْ"},
{"ind_1p", "نُضَارُّ"},
{"ind_1s", "أُضَارُّ"},
{"ind_2d", "تُضَارَّانِ"},
{"ind_2fp", "تُضَارِرْنَ"},
{"ind_2fs", "تُضَارِّينَ"},
{"ind_2mp", "تُضَارُّونَ"},
{"ind_2ms", "تُضَارُّ"},
{"ind_3fd", "تُضَارَّانِ"},
{"ind_3fp", "يُضَارِرْنَ"},
{"ind_3fs", "تُضَارُّ"},
{"ind_3md", "يُضَارَّانِ"},
{"ind_3mp", "يُضَارُّونَ"},
{"ind_3ms", "يُضَارُّ"},
{"past_1p", "ضَارَرْنَا"},
{"past_1s", "ضَارَرْتُ"},
{"past_2d", "ضَارَرْتُمَا"},
{"past_2fp", "ضَارَرْتُنَّ"},
{"past_2fs", "ضَارَرْتِ"},
{"past_2mp", "ضَارَرْتُمْ"},
{"past_2ms", "ضَارَرْتَ"},
{"past_3fd", "ضَارَّتَا"},
{"past_3fp", "ضَارَرْنَ"},
{"past_3fs", "ضَارَّتْ"},
{"past_3md", "ضَارَّا"},
{"past_3mp", "ضَارُّوا"},
{"past_3ms", "ضَارَّ"},
},
},
{
label = "شادَّ (p276)", root = "شدد", wazn = "فاعل",
forms = {
{"imp_2d", "شَادَّا"},
{"imp_2fp", "شَادِدْنَ"},
{"imp_2fs", "شَادِّي"},
{"imp_2mp", "شَادُّوا"},
{"imp_2ms", "شَادِدْ"},
{"ind_1p", "نُشَادُّ"},
{"ind_1s", "أُشَادُّ"},
{"ind_2d", "تُشَادَّانِ"},
{"ind_2fp", "تُشَادِدْنَ"},
{"ind_2fs", "تُشَادِّينَ"},
{"ind_2mp", "تُشَادُّونَ"},
{"ind_2ms", "تُشَادُّ"},
{"ind_3fd", "تُشَادَّانِ"},
{"ind_3fp", "يُشَادِدْنَ"},
{"ind_3fs", "تُشَادُّ"},
{"ind_3md", "يُشَادَّانِ"},
{"ind_3mp", "يُشَادُّونَ"},
{"ind_3ms", "يُشَادُّ"},
{"past_1p", "شَادَدْنَا"},
{"past_1s", "شَادَدْتُ"},
{"past_2d", "شَادَدْتُمَا"},
{"past_2fp", "شَادَدْتُنَّ"},
{"past_2fs", "شَادَدْتِ"},
{"past_2mp", "شَادَدْتُمْ"},
{"past_2ms", "شَادَدْتَ"},
{"past_3fd", "شَادَّتَا"},
{"past_3fp", "شَادَدْنَ"},
{"past_3fs", "شَادَّتْ"},
{"past_3md", "شَادَّا"},
{"past_3mp", "شَادُّوا"},
{"past_3ms", "شَادَّ"},
},
},
{
label = "كافَأَ (p280)", root = "كفأ", wazn = "فاعل",
forms = {
{"imp_2d", "كَافِئَا"},
{"imp_2fp", "كَافِئْنَ"},
{"imp_2fs", "كَافِئِي"},
{"imp_2mp", "كَافِئُوا"},
{"imp_2ms", "كَافِئْ"},
{"ind_1p", "نُكَافِئُ"},
{"ind_1s", "أُكَافِئُ"},
{"ind_2d", "تُكَافِئَانِ"},
{"ind_2fp", "تُكَافِئْنَ"},
{"ind_2fs", "تُكَافِئِينَ"},
{"ind_2mp", "تُكَافِئُونَ"},
{"ind_2ms", "تُكَافِئُ"},
{"ind_3fd", "تُكَافِئَانِ"},
{"ind_3fp", "يُكَافِئْنَ"},
{"ind_3fs", "تُكَافِئُ"},
{"ind_3md", "يُكَافِئَانِ"},
{"ind_3mp", "يُكَافِئُونَ"},
{"ind_3ms", "يُكَافِئُ"},
{"past_1p", "كَافَأْنَا"},
{"past_1s", "كَافَأْتُ"},
{"past_2d", "كَافَأْتُمَا"},
{"past_2fp", "كَافَأْتُنَّ"},
{"past_2fs", "كَافَأْتِ"},
{"past_2mp", "كَافَأْتُمْ"},
{"past_2ms", "كَافَأْتَ"},
{"past_3fd", "كَافَأَتَا"},
{"past_3fp", "كَافَأْنَ"},
{"past_3fs", "كَافَأَتْ"},
{"past_3md", "كَافَآ"},
{"past_3mp", "كَافَؤُوا"},
{"past_3ms", "كَافَأَ"},
},
},
{
label = "وَاجَبَ (p281)", root = "وجب", wazn = "فاعل",
forms = {
{"imp_2d", "وَاجِبَا"},
{"imp_2fp", "وَاجِبْنَ"},
{"imp_2fs", "وَاجِبِي"},
{"imp_2mp", "وَاجِبُوا"},
{"imp_2ms", "وَاجِبْ"},
{"ind_1p", "نُوَاجِبُ"},
{"ind_1s", "أُوَاجِبُ"},
{"ind_2d", "تُوَاجِبَانِ"},
{"ind_2fp", "تُوَاجِبْنَ"},
{"ind_2fs", "تُوَاجِبِينَ"},
{"ind_2mp", "تُوَاجِبُونَ"},
{"ind_2ms", "تُوَاجِبُ"},
{"ind_3fd", "تُوَاجِبَانِ"},
{"ind_3fp", "يُوَاجِبْنَ"},
{"ind_3fs", "تُوَاجِبُ"},
{"ind_3md", "يُوَاجِبَانِ"},
{"ind_3mp", "يُوَاجِبُونَ"},
{"ind_3ms", "يُوَاجِبُ"},
{"past_1p", "وَاجَبْنَا"},
{"past_1s", "وَاجَبْتُ"},
{"past_2d", "وَاجَبْتُمَا"},
{"past_2fp", "وَاجَبْتُنَّ"},
{"past_2fs", "وَاجَبْتِ"},
{"past_2mp", "وَاجَبْتُمْ"},
{"past_2ms", "وَاجَبْتَ"},
{"past_3fd", "وَاجَبَتَا"},
{"past_3fp", "وَاجَبْنَ"},
{"past_3fs", "وَاجَبَتْ"},
{"past_3md", "وَاجَبَا"},
{"past_3mp", "وَاجَبُوا"},
{"past_3ms", "وَاجَبَ"},
},
},
}
a1cf9gu3sm1xsj71cpzwlzvzllphfre
1159077
1159019
2026-09-10T19:34:04Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159077
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 7 من 16.
return {
{
label = "وَسُمَ (p219)", root = "وسم", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُوسُمَا"},
{"imp_2fp", "اُوسُمْنَ"},
{"imp_2fs", "اُوسُمِي"},
{"imp_2mp", "اُوسُمُوا"},
{"imp_2ms", "اُوسُمْ"},
{"ind_1p", "نَوْسُمُ"},
{"ind_1s", "أَوْسُمُ"},
{"ind_2d", "تَوْسُمَانِ"},
{"ind_2fp", "تَوْسُمْنَ"},
{"ind_2fs", "تَوْسُمِينَ"},
{"ind_2mp", "تَوْسُمُونَ"},
{"ind_2ms", "تَوْسُمُ"},
{"ind_3fd", "تَوْسُمَانِ"},
{"ind_3fp", "يَوْسُمْنَ"},
{"ind_3fs", "تَوْسُمُ"},
{"ind_3md", "يَوْسُمَانِ"},
{"ind_3mp", "يَوْسُمُونَ"},
{"ind_3ms", "يَوْسُمُ"},
{"past_1p", "وَسُمْنَا"},
{"past_1s", "وَسُمْتُ"},
{"past_2d", "وَسُمْتُمَا"},
{"past_2fp", "وَسُمْتُنَّ"},
{"past_2fs", "وَسُمْتِ"},
{"past_2mp", "وَسُمْتُمْ"},
{"past_2ms", "وَسُمْتَ"},
{"past_3fd", "وَسُمَتَا"},
{"past_3fp", "وَسُمْنَ"},
{"past_3fs", "وَسُمَتْ"},
{"past_3md", "وَسُمَا"},
{"past_3mp", "وَسُمُوا"},
{"past_3ms", "وَسُمَ"},
},
},
{
label = "فَرِحَ (p224)", root = "فرح", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِفْرَحَا"},
{"imp_2fp", "اِفْرَحْنَ"},
{"imp_2fs", "اِفْرَحِي"},
{"imp_2mp", "اِفْرَحُوا"},
{"imp_2ms", "اِفْرَحْ"},
{"ind_1p", "نَفْرَحُ"},
{"ind_1s", "أَفْرَحُ"},
{"ind_2d", "تَفْرَحَانِ"},
{"ind_2fp", "تَفْرَحْنَ"},
{"ind_2fs", "تَفْرَحِينَ"},
{"ind_2mp", "تَفْرَحُونَ"},
{"ind_2ms", "تَفْرَحُ"},
{"ind_3fd", "تَفْرَحَانِ"},
{"ind_3fp", "يَفْرَحْنَ"},
{"ind_3fs", "تَفْرَحُ"},
{"ind_3md", "يَفْرَحَانِ"},
{"ind_3mp", "يَفْرَحُونَ"},
{"ind_3ms", "يَفْرَحُ"},
{"past_1p", "فَرِحْنَا"},
{"past_1s", "فَرِحْتُ"},
{"past_2d", "فَرِحْتُمَا"},
{"past_2fp", "فَرِحْتُنَّ"},
{"past_2fs", "فَرِحْتِ"},
{"past_2mp", "فَرِحْتُمْ"},
{"past_2ms", "فَرِحْتَ"},
{"past_3fd", "فَرِحَتَا"},
{"past_3fp", "فَرِحْنَ"},
{"past_3fs", "فَرِحَتْ"},
{"past_3md", "فَرِحَا"},
{"past_3mp", "فَرِحُوا"},
{"past_3ms", "فَرِحَ"},
},
},
{
label = "شَبِعَ (p224)", root = "شبع", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِشْبَعَا"},
{"imp_2fp", "اِشْبَعْنَ"},
{"imp_2fs", "اِشْبَعِي"},
{"imp_2mp", "اِشْبَعُوا"},
{"imp_2ms", "اِشْبَعْ"},
{"ind_1p", "نَشْبَعُ"},
{"ind_1s", "أَشْبَعُ"},
{"ind_2d", "تَشْبَعَانِ"},
{"ind_2fp", "تَشْبَعْنَ"},
{"ind_2fs", "تَشْبَعِينَ"},
{"ind_2mp", "تَشْبَعُونَ"},
{"ind_2ms", "تَشْبَعُ"},
{"ind_3fd", "تَشْبَعَانِ"},
{"ind_3fp", "يَشْبَعْنَ"},
{"ind_3fs", "تَشْبَعُ"},
{"ind_3md", "يَشْبَعَانِ"},
{"ind_3mp", "يَشْبَعُونَ"},
{"ind_3ms", "يَشْبَعُ"},
{"past_1p", "شَبِعْنَا"},
{"past_1s", "شَبِعْتُ"},
{"past_2d", "شَبِعْتُمَا"},
{"past_2fp", "شَبِعْتُنَّ"},
{"past_2fs", "شَبِعْتِ"},
{"past_2mp", "شَبِعْتُمْ"},
{"past_2ms", "شَبِعْتَ"},
{"past_3fd", "شَبِعَتَا"},
{"past_3fp", "شَبِعْنَ"},
{"past_3fs", "شَبِعَتْ"},
{"past_3md", "شَبِعَا"},
{"past_3mp", "شَبِعُوا"},
{"past_3ms", "شَبِعَ"},
},
},
{
label = "حَزِنَ (p225)", root = "حزن", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِحْزَنَا"},
{"imp_2fp", "اِحْزَنَّ"},
{"imp_2fs", "اِحْزَنِي"},
{"imp_2mp", "اِحْزَنُوا"},
{"imp_2ms", "اِحْزَنْ"},
{"ind_1p", "نَحْزَنُ"},
{"ind_1s", "أَحْزَنُ"},
{"ind_2d", "تَحْزَنَانِ"},
{"ind_2fp", "تَحْزَنَّ"},
{"ind_2fs", "تَحْزَنِينَ"},
{"ind_2mp", "تَحْزَنُونَ"},
{"ind_2ms", "تَحْزَنُ"},
{"ind_3fd", "تَحْزَنَانِ"},
{"ind_3fp", "يَحْزَنَّ"},
{"ind_3fs", "تَحْزَنُ"},
{"ind_3md", "يَحْزَنَانِ"},
{"ind_3mp", "يَحْزَنُونَ"},
{"ind_3ms", "يَحْزَنُ"},
{"past_1p", "حَزِنَّا"},
{"past_1s", "حَزِنْتُ"},
{"past_2d", "حَزِنْتُمَا"},
{"past_2fp", "حَزِنْتُنَّ"},
{"past_2fs", "حَزِنْتِ"},
{"past_2mp", "حَزِنْتُمْ"},
{"past_2ms", "حَزِنْتَ"},
{"past_3fd", "حَزِنَتَا"},
{"past_3fp", "حَزِنَّ"},
{"past_3fs", "حَزِنَتْ"},
{"past_3md", "حَزِنَا"},
{"past_3mp", "حَزِنُوا"},
{"past_3ms", "حَزِنَ"},
},
},
{
label = "رَكِبَ (p225)", root = "ركب", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِرْكَبَا"},
{"imp_2fp", "اِرْكَبْنَ"},
{"imp_2fs", "اِرْكَبِي"},
{"imp_2mp", "اِرْكَبُوا"},
{"imp_2ms", "اِرْكَبْ"},
{"ind_1p", "نَرْكَبُ"},
{"ind_1s", "أَرْكَبُ"},
{"ind_2d", "تَرْكَبَانِ"},
{"ind_2fp", "تَرْكَبْنَ"},
{"ind_2fs", "تَرْكَبِينَ"},
{"ind_2mp", "تَرْكَبُونَ"},
{"ind_2ms", "تَرْكَبُ"},
{"ind_3fd", "تَرْكَبَانِ"},
{"ind_3fp", "يَرْكَبْنَ"},
{"ind_3fs", "تَرْكَبُ"},
{"ind_3md", "يَرْكَبَانِ"},
{"ind_3mp", "يَرْكَبُونَ"},
{"ind_3ms", "يَرْكَبُ"},
{"past_1p", "رَكِبْنَا"},
{"past_1s", "رَكِبْتُ"},
{"past_2d", "رَكِبْتُمَا"},
{"past_2fp", "رَكِبْتُنَّ"},
{"past_2fs", "رَكِبْتِ"},
{"past_2mp", "رَكِبْتُمْ"},
{"past_2ms", "رَكِبْتَ"},
{"past_3fd", "رَكِبَتَا"},
{"past_3fp", "رَكِبْنَ"},
{"past_3fs", "رَكِبَتْ"},
{"past_3md", "رَكِبَا"},
{"past_3mp", "رَكِبُوا"},
{"past_3ms", "رَكِبَ"},
},
},
{
label = "شَرِبَ (p226)", root = "شرب", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِشْرَبَا"},
{"imp_2fp", "اِشْرَبْنَ"},
{"imp_2fs", "اِشْرَبِي"},
{"imp_2mp", "اِشْرَبُوا"},
{"imp_2ms", "اِشْرَبْ"},
{"ind_1p", "نَشْرَبُ"},
{"ind_1s", "أَشْرَبُ"},
{"ind_2d", "تَشْرَبَانِ"},
{"ind_2fp", "تَشْرَبْنَ"},
{"ind_2fs", "تَشْرَبِينَ"},
{"ind_2mp", "تَشْرَبُونَ"},
{"ind_2ms", "تَشْرَبُ"},
{"ind_3fd", "تَشْرَبَانِ"},
{"ind_3fp", "يَشْرَبْنَ"},
{"ind_3fs", "تَشْرَبُ"},
{"ind_3md", "يَشْرَبَانِ"},
{"ind_3mp", "يَشْرَبُونَ"},
{"ind_3ms", "يَشْرَبُ"},
{"past_1p", "شَرِبْنَا"},
{"past_1s", "شَرِبْتُ"},
{"past_2d", "شَرِبْتُمَا"},
{"past_2fp", "شَرِبْتُنَّ"},
{"past_2fs", "شَرِبْتِ"},
{"past_2mp", "شَرِبْتُمْ"},
{"past_2ms", "شَرِبْتَ"},
{"past_3fd", "شَرِبَتَا"},
{"past_3fp", "شَرِبْنَ"},
{"past_3fs", "شَرِبَتْ"},
{"past_3md", "شَرِبَا"},
{"past_3mp", "شَرِبُوا"},
{"past_3ms", "شَرِبَ"},
},
},
{
label = "ضَحِكَ (p226)", root = "ضحك", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِضْحَكَا"},
{"imp_2fp", "اِضْحَكْنَ"},
{"imp_2fs", "اِضْحَكِي"},
{"imp_2mp", "اِضْحَكُوا"},
{"imp_2ms", "اِضْحَكْ"},
{"ind_1p", "نَضْحَكُ"},
{"ind_1s", "أَضْحَكُ"},
{"ind_2d", "تَضْحَكَانِ"},
{"ind_2fp", "تَضْحَكْنَ"},
{"ind_2fs", "تَضْحَكِينَ"},
{"ind_2mp", "تَضْحَكُونَ"},
{"ind_2ms", "تَضْحَكُ"},
{"ind_3fd", "تَضْحَكَانِ"},
{"ind_3fp", "يَضْحَكْنَ"},
{"ind_3fs", "تَضْحَكُ"},
{"ind_3md", "يَضْحَكَانِ"},
{"ind_3mp", "يَضْحَكُونَ"},
{"ind_3ms", "يَضْحَكُ"},
{"past_1p", "ضَحِكْنَا"},
{"past_1s", "ضَحِكْتُ"},
{"past_2d", "ضَحِكْتُمَا"},
{"past_2fp", "ضَحِكْتُنَّ"},
{"past_2fs", "ضَحِكْتِ"},
{"past_2mp", "ضَحِكْتُمْ"},
{"past_2ms", "ضَحِكْتَ"},
{"past_3fd", "ضَحِكَتَا"},
{"past_3fp", "ضَحِكْنَ"},
{"past_3fs", "ضَحِكَتْ"},
{"past_3md", "ضَحِكَا"},
{"past_3mp", "ضَحِكُوا"},
{"past_3ms", "ضَحِكَ"},
},
},
{
label = "جَفَّ (p228)", root = "جفف", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "جَفَّا"},
{"imp_2fp", "اِجْفَفْنَ"},
{"imp_2fs", "جَفِّي"},
{"imp_2mp", "جَفُّوا"},
{"imp_2ms", "جَفَّ"},
{"ind_1p", "نَجَفُّ"},
{"ind_1s", "أَجَفُّ"},
{"ind_2d", "تَجَفَّانِ"},
{"ind_2fp", "تَجْفَفْنَ"},
{"ind_2fs", "تَجَفِّينَ"},
{"ind_2mp", "تَجَفُّونَ"},
{"ind_2ms", "تَجَفُّ"},
{"ind_3fd", "تَجَفَّانِ"},
{"ind_3fp", "يَجْفَفْنَ"},
{"ind_3fs", "تَجَفُّ"},
{"ind_3md", "يَجَفَّانِ"},
{"ind_3mp", "يَجَفُّونَ"},
{"ind_3ms", "يَجَفُّ"},
{"past_1p", "جَفِفْنَا"},
{"past_1s", "جَفِفْتُ"},
{"past_2d", "جَفِفْتُمَا"},
{"past_2fp", "جَفِفْتُنَّ"},
{"past_2fs", "جَفِفْتِ"},
{"past_2mp", "جَفِفْتُمْ"},
{"past_2ms", "جَفِفْتَ"},
{"past_3fd", "جَفَّتَا"},
{"past_3fp", "جَفِفْنَ"},
{"past_3fs", "جَفَّتْ"},
{"past_3md", "جَفَّا"},
{"past_3mp", "جَفُّوا"},
{"past_3ms", "جَفَّ"},
},
},
{
label = "هَدَّ (p228)", root = "هدد", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "هَدَّا"},
{"imp_2fp", "اِهْدَدْنَ"},
{"imp_2fs", "هَدِّي"},
{"imp_2mp", "هَدُّوا"},
{"imp_2ms", "هَدَّ"},
{"ind_1p", "نَهَدُّ"},
{"ind_1s", "أَهَدُّ"},
{"ind_2d", "تَهَدَّانِ"},
{"ind_2fp", "تَهْدَدْنَ"},
{"ind_2fs", "تَهَدِّينَ"},
{"ind_2mp", "تَهَدُّونَ"},
{"ind_2ms", "تَهَدُّ"},
{"ind_3fd", "تَهَدَّانِ"},
{"ind_3fp", "يَهْدَدْنَ"},
{"ind_3fs", "تَهَدُّ"},
{"ind_3md", "يَهَدَّانِ"},
{"ind_3mp", "يَهَدُّونَ"},
{"ind_3ms", "يَهَدُّ"},
{"past_1p", "هَدِدْنَا"},
{"past_1s", "هَدِدْتُ"},
{"past_2d", "هَدِدْتُمَا"},
{"past_2fp", "هَدِدْتُنَّ"},
{"past_2fs", "هَدِدْتِ"},
{"past_2mp", "هَدِدْتُمْ"},
{"past_2ms", "هَدِدْتَ"},
{"past_3fd", "هَدَّتَا"},
{"past_3fp", "هَدِدْنَ"},
{"past_3fs", "هَدَّتْ"},
{"past_3md", "هَدَّا"},
{"past_3mp", "هَدُّوا"},
{"past_3ms", "هَدَّ"},
},
},
{
label = "خَصَّ (p229)", root = "خصص", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "خَصَّا"},
{"imp_2fp", "اِخْصَصْنَ"},
{"imp_2fs", "خَصِّي"},
{"imp_2mp", "خَصُّوا"},
{"imp_2ms", "خَصَّ"},
{"ind_1p", "نَخَصُّ"},
{"ind_1s", "أَخَصُّ"},
{"ind_2d", "تَخَصَّانِ"},
{"ind_2fp", "تَخْصَصْنَ"},
{"ind_2fs", "تَخَصِّينَ"},
{"ind_2mp", "تَخَصُّونَ"},
{"ind_2ms", "تَخَصُّ"},
{"ind_3fd", "تَخَصَّانِ"},
{"ind_3fp", "يَخْصَصْنَ"},
{"ind_3fs", "تَخَصُّ"},
{"ind_3md", "يَخَصَّانِ"},
{"ind_3mp", "يَخَصُّونَ"},
{"ind_3ms", "يَخَصُّ"},
{"past_1p", "خَصِصْنَا"},
{"past_1s", "خَصِصْتُ"},
{"past_2d", "خَصِصْتُمَا"},
{"past_2fp", "خَصِصْتُنَّ"},
{"past_2fs", "خَصِصْتِ"},
{"past_2mp", "خَصِصْتُمْ"},
{"past_2ms", "خَصِصْتَ"},
{"past_3fd", "خَصَّتَا"},
{"past_3fp", "خَصِصْنَ"},
{"past_3fs", "خَصَّتْ"},
{"past_3md", "خَصَّا"},
{"past_3mp", "خَصُّوا"},
{"past_3ms", "خَصَّ"},
},
},
{
label = "شَمَّ (p229)", root = "شمم", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "شَمَّا"},
{"imp_2fp", "اِشْمَمْنَ"},
{"imp_2fs", "شَمِّي"},
{"imp_2mp", "شَمُّوا"},
{"imp_2ms", "شَمَّ"},
{"ind_1p", "نَشَمُّ"},
{"ind_1s", "أَشَمُّ"},
{"ind_2d", "تَشَمَّانِ"},
{"ind_2fp", "تَشْمَمْنَ"},
{"ind_2fs", "تَشَمِّينَ"},
{"ind_2mp", "تَشَمُّونَ"},
{"ind_2ms", "تَشَمُّ"},
{"ind_3fd", "تَشَمَّانِ"},
{"ind_3fp", "يَشْمَمْنَ"},
{"ind_3fs", "تَشَمُّ"},
{"ind_3md", "يَشَمَّانِ"},
{"ind_3mp", "يَشَمُّونَ"},
{"ind_3ms", "يَشَمُّ"},
{"past_1p", "شَمِمْنَا"},
{"past_1s", "شَمِمْتُ"},
{"past_2d", "شَمِمْتُمَا"},
{"past_2fp", "شَمِمْتُنَّ"},
{"past_2fs", "شَمِمْتِ"},
{"past_2mp", "شَمِمْتُمْ"},
{"past_2ms", "شَمِمْتَ"},
{"past_3fd", "شَمَّتَا"},
{"past_3fp", "شَمِمْنَ"},
{"past_3fs", "شَمَّتْ"},
{"past_3md", "شَمَّا"},
{"past_3mp", "شَمُّوا"},
{"past_3ms", "شَمَّ"},
},
},
{
label = "أَذِنَ (p231)", root = "أذن", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِئْذَنَا"},
{"imp_2fp", "اِئْذَنَّ"},
{"imp_2fs", "اِئْذَنِي"},
{"imp_2mp", "اِئْذَنُوا"},
{"imp_2ms", "اِئْذَنْ"},
{"ind_1p", "نَأْذَنُ"},
{"ind_1s", "آذَنُ"},
{"ind_2d", "تَأْذَنَانِ"},
{"ind_2fp", "تَأْذَنَّ"},
{"ind_2fs", "تَأْذَنِينَ"},
{"ind_2mp", "تَأْذَنُونَ"},
{"ind_2ms", "تَأْذَنُ"},
{"ind_3fd", "تَأْذَنَانِ"},
{"ind_3fp", "يَأْذَنَّ"},
{"ind_3fs", "تَأْذَنُ"},
{"ind_3md", "يَأْذَنَانِ"},
{"ind_3mp", "يَأْذَنُونَ"},
{"ind_3ms", "يَأْذَنُ"},
{"past_1p", "أَذِنَّا"},
{"past_1s", "أَذِنْتُ"},
{"past_2d", "أَذِنْتُمَا"},
{"past_2fp", "أَذِنْتُنَّ"},
{"past_2fs", "أَذِنْتِ"},
{"past_2mp", "أَذِنْتُمْ"},
{"past_2ms", "أَذِنْتَ"},
{"past_3fd", "أَذِنَتَا"},
{"past_3fp", "أَذِنَّ"},
{"past_3fs", "أَذِنَتْ"},
{"past_3md", "أَذِنَا"},
{"past_3mp", "أَذِنُوا"},
{"past_3ms", "أَذِنَ"},
},
},
{
label = "أَسِدَ (p231)", root = "أسد", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِئْسَدَا"},
{"imp_2fp", "اِئْسَدْنَ"},
{"imp_2fs", "اِئْسَدِي"},
{"imp_2mp", "اِئْسَدُوا"},
{"imp_2ms", "اِئْسَدْ"},
{"ind_1p", "نَأْسَدُ"},
{"ind_1s", "آسَدُ"},
{"ind_2d", "تَأْسَدَانِ"},
{"ind_2fp", "تَأْسَدْنَ"},
{"ind_2fs", "تَأْسَدِينَ"},
{"ind_2mp", "تَأْسَدُونَ"},
{"ind_2ms", "تَأْسَدُ"},
{"ind_3fd", "تَأْسَدَانِ"},
{"ind_3fp", "يَأْسَدْنَ"},
{"ind_3fs", "تَأْسَدُ"},
{"ind_3md", "يَأْسَدَانِ"},
{"ind_3mp", "يَأْسَدُونَ"},
{"ind_3ms", "يَأْسَدُ"},
{"past_1p", "أَسِدْنَا"},
{"past_1s", "أَسِدْتُ"},
{"past_2d", "أَسِدْتُمَا"},
{"past_2fp", "أَسِدْتُنَّ"},
{"past_2fs", "أَسِدْتِ"},
{"past_2mp", "أَسِدْتُمْ"},
{"past_2ms", "أَسِدْتَ"},
{"past_3fd", "أَسِدَتَا"},
{"past_3fp", "أَسِدْنَ"},
{"past_3fs", "أَسِدَتْ"},
{"past_3md", "أَسِدَا"},
{"past_3mp", "أَسِدُوا"},
{"past_3ms", "أَسِدَ"},
},
},
{
label = "شَأَى (p160)", root = "شأو", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "اُشْؤُوَا"},
{"imp_2fp", "اُشْؤُونَ"},
{"imp_2fs", "اُشْئِي"},
{"imp_2mp", "اُشْؤُوا"},
{"imp_2ms", "اُشْؤُ"},
{"ind_1p", "نَشْؤُو"},
{"ind_1s", "أَشْؤُو"},
{"ind_2d", "تَشْؤُوَانِ"},
{"ind_2fp", "تَشْؤُونَ"},
{"ind_2fs", "تَشْئِينَ"},
{"ind_2mp", "تَشْؤُونَ"},
{"ind_2ms", "تَشْؤُو"},
{"ind_3fd", "تَشْؤُوَانِ"},
{"ind_3fp", "يَشْؤُونَ"},
{"ind_3fs", "تَشْؤُو"},
{"ind_3md", "يَشْؤُوَانِ"},
{"ind_3mp", "يَشْؤُونَ"},
{"ind_3ms", "يَشْؤُو"},
{"past_1p", "شَأَوْنَا"},
{"past_1s", "شَأَوْتُ"},
{"past_2d", "شَأَوْتُمَا"},
{"past_2fp", "شَأَوْتُنَّ"},
{"past_2fs", "شَأَوْتِ"},
{"past_2mp", "شَأَوْتُمْ"},
{"past_2ms", "شَأَوْتَ"},
{"past_3fd", "شَأَتَا"},
{"past_3fp", "شَأَوْنَ"},
{"past_3fs", "شَأَتْ"},
{"past_3md", "شَأَوَا"},
{"past_3mp", "شَأَوْا"},
{"past_3ms", "شَأَى"},
},
},
{
label = "أَثِمَ (p232)", root = "أثم", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِئْثَمَا"},
{"imp_2fp", "اِئْثَمْنَ"},
{"imp_2fs", "اِئْثَمِي"},
{"imp_2mp", "اِئْثَمُوا"},
{"imp_2ms", "اِئْثَمْ"},
{"ind_1p", "نَأْثَمُ"},
{"ind_1s", "آثَمُ"},
{"ind_2d", "تَأْثَمَانِ"},
{"ind_2fp", "تَأْثَمْنَ"},
{"ind_2fs", "تَأْثَمِينَ"},
{"ind_2mp", "تَأْثَمُونَ"},
{"ind_2ms", "تَأْثَمُ"},
{"ind_3fd", "تَأْثَمَانِ"},
{"ind_3fp", "يَأْثَمْنَ"},
{"ind_3fs", "تَأْثَمُ"},
{"ind_3md", "يَأْثَمَانِ"},
{"ind_3mp", "يَأْثَمُونَ"},
{"ind_3ms", "يَأْثَمُ"},
{"past_1p", "أَثِمْنَا"},
{"past_1s", "أَثِمْتُ"},
{"past_2d", "أَثِمْتُمَا"},
{"past_2fp", "أَثِمْتُنَّ"},
{"past_2fs", "أَثِمْتِ"},
{"past_2mp", "أَثِمْتُمْ"},
{"past_2ms", "أَثِمْتَ"},
{"past_3fd", "أَثِمَتَا"},
{"past_3fp", "أَثِمْنَ"},
{"past_3fs", "أَثِمَتْ"},
{"past_3md", "أَثِمَا"},
{"past_3mp", "أَثِمُوا"},
{"past_3ms", "أَثِمَ"},
},
},
{
label = "أَنِسَ (p232)", root = "أنس", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِئْنَسَا"},
{"imp_2fp", "اِئْنَسْنَ"},
{"imp_2fs", "اِئْنَسِي"},
{"imp_2mp", "اِئْنَسُوا"},
{"imp_2ms", "اِئْنَسْ"},
{"ind_1p", "نَأْنَسُ"},
{"ind_1s", "آنَسُ"},
{"ind_2d", "تَأْنَسَانِ"},
{"ind_2fp", "تَأْنَسْنَ"},
{"ind_2fs", "تَأْنَسِينَ"},
{"ind_2mp", "تَأْنَسُونَ"},
{"ind_2ms", "تَأْنَسُ"},
{"ind_3fd", "تَأْنَسَانِ"},
{"ind_3fp", "يَأْنَسْنَ"},
{"ind_3fs", "تَأْنَسُ"},
{"ind_3md", "يَأْنَسَانِ"},
{"ind_3mp", "يَأْنَسُونَ"},
{"ind_3ms", "يَأْنَسُ"},
{"past_1p", "أَنِسْنَا"},
{"past_1s", "أَنِسْتُ"},
{"past_2d", "أَنِسْتُمَا"},
{"past_2fp", "أَنِسْتُنَّ"},
{"past_2fs", "أَنِسْتِ"},
{"past_2mp", "أَنِسْتُمْ"},
{"past_2ms", "أَنِسْتَ"},
{"past_3fd", "أَنِسَتَا"},
{"past_3fp", "أَنِسْنَ"},
{"past_3fs", "أَنِسَتْ"},
{"past_3md", "أَنِسَا"},
{"past_3mp", "أَنِسُوا"},
{"past_3ms", "أَنِسَ"},
},
},
{
label = "سَئِمَ (p234)", root = "سئم", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِسْأَمَا"},
{"imp_2fp", "اِسْأَمْنَ"},
{"imp_2fs", "اِسْأَمِي"},
{"imp_2mp", "اِسْأَمُوا"},
{"imp_2ms", "اِسْأَمْ"},
{"ind_1p", "نَسْأَمُ"},
{"ind_1s", "أَسْأَمُ"},
{"ind_2d", "تَسْأَمَانِ"},
{"ind_2fp", "تَسْأَمْنَ"},
{"ind_2fs", "تَسْأَمِينَ"},
{"ind_2mp", "تَسْأَمُونَ"},
{"ind_2ms", "تَسْأَمُ"},
{"ind_3fd", "تَسْأَمَانِ"},
{"ind_3fp", "يَسْأَمْنَ"},
{"ind_3fs", "تَسْأَمُ"},
{"ind_3md", "يَسْأَمَانِ"},
{"ind_3mp", "يَسْأَمُونَ"},
{"ind_3ms", "يَسْأَمُ"},
{"past_1p", "سَئِمْنَا"},
{"past_1s", "سَئِمْتُ"},
{"past_2d", "سَئِمْتُمَا"},
{"past_2fp", "سَئِمْتُنَّ"},
{"past_2fs", "سَئِمْتِ"},
{"past_2mp", "سَئِمْتُمْ"},
{"past_2ms", "سَئِمْتَ"},
{"past_3fd", "سَئِمَتَا"},
{"past_3fp", "سَئِمْنَ"},
{"past_3fs", "سَئِمَتْ"},
{"past_3md", "سَئِمَا"},
{"past_3mp", "سَئِمُوا"},
{"past_3ms", "سَئِمَ"},
},
},
{
label = "دَفِئَ (p237)", root = "دفئ", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِدْفَآ"},
{"imp_2fp", "اِدْفَأْنَ"},
{"imp_2fs", "اِدْفَئِي"},
{"imp_2mp", "اِدْفَؤُوا"},
{"imp_2ms", "اِدْفَأْ"},
{"ind_1p", "نَدْفَأُ"},
{"ind_1s", "أَدْفَأُ"},
{"ind_2d", "تَدْفَآنِ"},
{"ind_2fp", "تَدْفَأْنَ"},
{"ind_2fs", "تَدْفَئِينَ"},
{"ind_2mp", "تَدْفَؤُونَ"},
{"ind_2ms", "تَدْفَأُ"},
{"ind_3fd", "تَدْفَآنِ"},
{"ind_3fp", "يَدْفَأْنَ"},
{"ind_3fs", "تَدْفَأُ"},
{"ind_3md", "يَدْفَآنِ"},
{"ind_3mp", "يَدْفَؤُونَ"},
{"ind_3ms", "يَدْفَأُ"},
{"past_1p", "دَفِئْنَا"},
{"past_1s", "دَفِئْتُ"},
{"past_2d", "دَفِئْتُمَا"},
{"past_2fp", "دَفِئْتُنَّ"},
{"past_2fs", "دَفِئْتِ"},
{"past_2mp", "دَفِئْتُمْ"},
{"past_2ms", "دَفِئْتَ"},
{"past_3fd", "دَفِئَتَا"},
{"past_3fp", "دَفِئْنَ"},
{"past_3fs", "دَفِئَتْ"},
{"past_3md", "دَفِئَا"},
{"past_3mp", "دَفِئُوا"},
{"past_3ms", "دَفِئَ"},
},
},
{
label = "دَوِيَ (p249)", root = "دوي", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِدْوَيَا"},
{"imp_2fp", "اِدْوَيْنَ"},
{"imp_2fs", "اِدْوَيْ"},
{"imp_2mp", "اِدْوَوْا"},
{"imp_2ms", "اِدْوَ"},
{"ind_1p", "نَدْوَى"},
{"ind_1s", "أَدْوَى"},
{"ind_2d", "تَدْوَيَانِ"},
{"ind_2fp", "تَدْوَيْنَ"},
{"ind_2fs", "تَدْوَيْنَ"},
{"ind_2mp", "تَدْوَوْنَ"},
{"ind_2ms", "تَدْوَى"},
{"ind_3fd", "تَدْوَيَانِ"},
{"ind_3fp", "يَدْوَيْنَ"},
{"ind_3fs", "تَدْوَى"},
{"ind_3md", "يَدْوَيَانِ"},
{"ind_3mp", "يَدْوَوْنَ"},
{"ind_3ms", "يَدْوَى"},
{"past_1p", "دَوِينَا"},
{"past_1s", "دَوِيتُ"},
{"past_2d", "دَوِيتُمَا"},
{"past_2fp", "دَوِيتُنَّ"},
{"past_2fs", "دَوِيتِ"},
{"past_2mp", "دَوِيتُمْ"},
{"past_2ms", "دَوِيتَ"},
{"past_3fd", "دَوِيَتَا"},
{"past_3fp", "دَوِينَ"},
{"past_3fs", "دَوِيَتْ"},
{"past_3md", "دَوِيَا"},
{"past_3mp", "دَوُوا"},
{"past_3ms", "دَوِيَ"},
},
},
{
label = "سَوِيَ (p249)", root = "سوي", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِسْوَيَا"},
{"imp_2fp", "اِسْوَيْنَ"},
{"imp_2fs", "اِسْوَيْ"},
{"imp_2mp", "اِسْوَوْا"},
{"imp_2ms", "اِسْوَ"},
{"ind_1p", "نَسْوَى"},
{"ind_1s", "أَسْوَى"},
{"ind_2d", "تَسْوَيَانِ"},
{"ind_2fp", "تَسْوَيْنَ"},
{"ind_2fs", "تَسْوَيْنَ"},
{"ind_2mp", "تَسْوَوْنَ"},
{"ind_2ms", "تَسْوَى"},
{"ind_3fd", "تَسْوَيَانِ"},
{"ind_3fp", "يَسْوَيْنَ"},
{"ind_3fs", "تَسْوَى"},
{"ind_3md", "يَسْوَيَانِ"},
{"ind_3mp", "يَسْوَوْنَ"},
{"ind_3ms", "يَسْوَى"},
{"past_1p", "سَوِينَا"},
{"past_1s", "سَوِيتُ"},
{"past_2d", "سَوِيتُمَا"},
{"past_2fp", "سَوِيتُنَّ"},
{"past_2fs", "سَوِيتِ"},
{"past_2mp", "سَوِيتُمْ"},
{"past_2ms", "سَوِيتَ"},
{"past_3fd", "سَوِيَتَا"},
{"past_3fp", "سَوِينَ"},
{"past_3fs", "سَوِيَتْ"},
{"past_3md", "سَوِيَا"},
{"past_3mp", "سَوُوا"},
{"past_3ms", "سَوِيَ"},
},
},
{
label = "قَوِيَ (p250)", root = "قوي", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِقْوَيَا"},
{"imp_2fp", "اِقْوَيْنَ"},
{"imp_2fs", "اِقْوَيْ"},
{"imp_2mp", "اِقْوَوْا"},
{"imp_2ms", "اِقْوَ"},
{"ind_1p", "نَقْوَى"},
{"ind_1s", "أَقْوَى"},
{"ind_2d", "تَقْوَيَانِ"},
{"ind_2fp", "تَقْوَيْنَ"},
{"ind_2fs", "تَقْوَيْنَ"},
{"ind_2mp", "تَقْوَوْنَ"},
{"ind_2ms", "تَقْوَى"},
{"ind_3fd", "تَقْوَيَانِ"},
{"ind_3fp", "يَقْوَيْنَ"},
{"ind_3fs", "تَقْوَى"},
{"ind_3md", "يَقْوَيَانِ"},
{"ind_3mp", "يَقْوَوْنَ"},
{"ind_3ms", "يَقْوَى"},
{"past_1p", "قَوِينَا"},
{"past_1s", "قَوِيتُ"},
{"past_2d", "قَوِيتُمَا"},
{"past_2fp", "قَوِيتُنَّ"},
{"past_2fs", "قَوِيتِ"},
{"past_2mp", "قَوِيتُمْ"},
{"past_2ms", "قَوِيتَ"},
{"past_3fd", "قَوِيَتَا"},
{"past_3fp", "قَوِينَ"},
{"past_3fs", "قَوِيَتْ"},
{"past_3md", "قَوِيَا"},
{"past_3mp", "قَوُوا"},
{"past_3ms", "قَوِيَ"},
},
},
{
label = "وَرِمَ (p254)", root = "ورم", wazn = "فعِل يفعِل",
forms = {
{"imp_2d", "رِمَا"},
{"imp_2fp", "رِمْنَ"},
{"imp_2fs", "رِمِي"},
{"imp_2mp", "رِمُوا"},
{"imp_2ms", "رِمْ"},
{"ind_1p", "نَرِمُ"},
{"ind_1s", "أَرِمُ"},
{"ind_2d", "تَرِمَانِ"},
{"ind_2fp", "تَرِمْنَ"},
{"ind_2fs", "تَرِمِينَ"},
{"ind_2mp", "تَرِمُونَ"},
{"ind_2ms", "تَرِمُ"},
{"ind_3fd", "تَرِمَانِ"},
{"ind_3fp", "يَرِمْنَ"},
{"ind_3fs", "تَرِمُ"},
{"ind_3md", "يَرِمَانِ"},
{"ind_3mp", "يَرِمُونَ"},
{"ind_3ms", "يَرِمُ"},
{"past_1p", "وَرِمْنَا"},
{"past_1s", "وَرِمْتُ"},
{"past_2d", "وَرِمْتُمَا"},
{"past_2fp", "وَرِمْتُنَّ"},
{"past_2fs", "وَرِمْتِ"},
{"past_2mp", "وَرِمْتُمْ"},
{"past_2ms", "وَرِمْتَ"},
{"past_3fd", "وَرِمَتَا"},
{"past_3fp", "وَرِمْنَ"},
{"past_3fs", "وَرِمَتْ"},
{"past_3md", "وَرِمَا"},
{"past_3mp", "وَرِمُوا"},
{"past_3ms", "وَرِمَ"},
},
},
{
label = "وَرِثَ (p255)", root = "ورث", wazn = "فعِل يفعِل",
forms = {
{"imp_2d", "رِثَا"},
{"imp_2fp", "رِثْنَ"},
{"imp_2fs", "رِثِي"},
{"imp_2mp", "رِثُوا"},
{"imp_2ms", "رِثْ"},
{"ind_1p", "نَرِثُ"},
{"ind_1s", "أَرِثُ"},
{"ind_2d", "تَرِثَانِ"},
{"ind_2fp", "تَرِثْنَ"},
{"ind_2fs", "تَرِثِينَ"},
{"ind_2mp", "تَرِثُونَ"},
{"ind_2ms", "تَرِثُ"},
{"ind_3fd", "تَرِثَانِ"},
{"ind_3fp", "يَرِثْنَ"},
{"ind_3fs", "تَرِثُ"},
{"ind_3md", "يَرِثَانِ"},
{"ind_3mp", "يَرِثُونَ"},
{"ind_3ms", "يَرِثُ"},
{"past_1p", "وَرِثْنَا"},
{"past_1s", "وَرِثْتُ"},
{"past_2d", "وَرِثْتُمَا"},
{"past_2fp", "وَرِثْتُنَّ"},
{"past_2fs", "وَرِثْتِ"},
{"past_2mp", "وَرِثْتُمْ"},
{"past_2ms", "وَرِثْتَ"},
{"past_3fd", "وَرِثَتَا"},
{"past_3fp", "وَرِثْنَ"},
{"past_3fs", "وَرِثَتْ"},
{"past_3md", "وَرِثَا"},
{"past_3mp", "وَرِثُوا"},
{"past_3ms", "وَرِثَ"},
},
},
{
label = "يَئِسَ (p255)", root = "يئس", wazn = "فعِل يفعِل",
forms = {
{"imp_2d", "اِيئِسَا"},
{"imp_2fp", "اِيئِسْنَ"},
{"imp_2fs", "اِيئِسِي"},
{"imp_2mp", "اِيئِسُوا"},
{"imp_2ms", "اِيئِسْ"},
{"ind_1p", "نَيْئِسُ"},
{"ind_1s", "أَيْئِسُ"},
{"ind_2d", "تَيْئِسَانِ"},
{"ind_2fp", "تَيْئِسْنَ"},
{"ind_2fs", "تَيْئِسِينَ"},
{"ind_2mp", "تَيْئِسُونَ"},
{"ind_2ms", "تَيْئِسُ"},
{"ind_3fd", "تَيْئِسَانِ"},
{"ind_3fp", "يَيْئِسْنَ"},
{"ind_3fs", "تَيْئِسُ"},
{"ind_3md", "يَيْئِسَانِ"},
{"ind_3mp", "يَيْئِسُونَ"},
{"ind_3ms", "يَيْئِسُ"},
{"past_1p", "يَئِسْنَا"},
{"past_1s", "يَئِسْتُ"},
{"past_2d", "يَئِسْتُمَا"},
{"past_2fp", "يَئِسْتُنَّ"},
{"past_2fs", "يَئِسْتِ"},
{"past_2mp", "يَئِسْتُمْ"},
{"past_2ms", "يَئِسْتَ"},
{"past_3fd", "يَئِسَتَا"},
{"past_3fp", "يَئِسْنَ"},
{"past_3fs", "يَئِسَتْ"},
{"past_3md", "يَئِسَا"},
{"past_3mp", "يَئِسُوا"},
{"past_3ms", "يَئِسَ"},
},
},
{
label = "تابَعَ (p275)", root = "تبع", wazn = "فاعل",
forms = {
{"imp_2d", "تَابِعَا"},
{"imp_2fp", "تَابِعْنَ"},
{"imp_2fs", "تَابِعِي"},
{"imp_2mp", "تَابِعُوا"},
{"imp_2ms", "تَابِعْ"},
{"ind_1p", "نُتَابِعُ"},
{"ind_1s", "أُتَابِعُ"},
{"ind_2d", "تُتَابِعَانِ"},
{"ind_2fp", "تُتَابِعْنَ"},
{"ind_2fs", "تُتَابِعِينَ"},
{"ind_2mp", "تُتَابِعُونَ"},
{"ind_2ms", "تُتَابِعُ"},
{"ind_3fd", "تُتَابِعَانِ"},
{"ind_3fp", "يُتَابِعْنَ"},
{"ind_3fs", "تُتَابِعُ"},
{"ind_3md", "يُتَابِعَانِ"},
{"ind_3mp", "يُتَابِعُونَ"},
{"ind_3ms", "يُتَابِعُ"},
{"past_1p", "تَابَعْنَا"},
{"past_1s", "تَابَعْتُ"},
{"past_2d", "تَابَعْتُمَا"},
{"past_2fp", "تَابَعْتُنَّ"},
{"past_2fs", "تَابَعْتِ"},
{"past_2mp", "تَابَعْتُمْ"},
{"past_2ms", "تَابَعْتَ"},
{"past_3fd", "تَابَعَتَا"},
{"past_3fp", "تَابَعْنَ"},
{"past_3fs", "تَابَعَتْ"},
{"past_3md", "تَابَعَا"},
{"past_3mp", "تَابَعُوا"},
{"past_3ms", "تَابَعَ"},
},
},
{
label = "غادَرَ (p275)", root = "غدر", wazn = "فاعل",
forms = {
{"imp_2d", "غَادِرَا"},
{"imp_2fp", "غَادِرْنَ"},
{"imp_2fs", "غَادِرِي"},
{"imp_2mp", "غَادِرُوا"},
{"imp_2ms", "غَادِرْ"},
{"ind_1p", "نُغَادِرُ"},
{"ind_1s", "أُغَادِرُ"},
{"ind_2d", "تُغَادِرَانِ"},
{"ind_2fp", "تُغَادِرْنَ"},
{"ind_2fs", "تُغَادِرِينَ"},
{"ind_2mp", "تُغَادِرُونَ"},
{"ind_2ms", "تُغَادِرُ"},
{"ind_3fd", "تُغَادِرَانِ"},
{"ind_3fp", "يُغَادِرْنَ"},
{"ind_3fs", "تُغَادِرُ"},
{"ind_3md", "يُغَادِرَانِ"},
{"ind_3mp", "يُغَادِرُونَ"},
{"ind_3ms", "يُغَادِرُ"},
{"past_1p", "غَادَرْنَا"},
{"past_1s", "غَادَرْتُ"},
{"past_2d", "غَادَرْتُمَا"},
{"past_2fp", "غَادَرْتُنَّ"},
{"past_2fs", "غَادَرْتِ"},
{"past_2mp", "غَادَرْتُمْ"},
{"past_2ms", "غَادَرْتَ"},
{"past_3fd", "غَادَرَتَا"},
{"past_3fp", "غَادَرْنَ"},
{"past_3fs", "غَادَرَتْ"},
{"past_3md", "غَادَرَا"},
{"past_3mp", "غَادَرُوا"},
{"past_3ms", "غَادَرَ"},
},
},
{
label = "ضارَّ (p276)", root = "ضرر", wazn = "فاعل",
forms = {
{"imp_2d", "ضَارَّا"},
{"imp_2fp", "ضَارِرْنَ"},
{"imp_2fs", "ضَارِّي"},
{"imp_2mp", "ضَارُّوا"},
{"imp_2ms", "ضَارِرْ"},
{"ind_1p", "نُضَارُّ"},
{"ind_1s", "أُضَارُّ"},
{"ind_2d", "تُضَارَّانِ"},
{"ind_2fp", "تُضَارِرْنَ"},
{"ind_2fs", "تُضَارِّينَ"},
{"ind_2mp", "تُضَارُّونَ"},
{"ind_2ms", "تُضَارُّ"},
{"ind_3fd", "تُضَارَّانِ"},
{"ind_3fp", "يُضَارِرْنَ"},
{"ind_3fs", "تُضَارُّ"},
{"ind_3md", "يُضَارَّانِ"},
{"ind_3mp", "يُضَارُّونَ"},
{"ind_3ms", "يُضَارُّ"},
{"past_1p", "ضَارَرْنَا"},
{"past_1s", "ضَارَرْتُ"},
{"past_2d", "ضَارَرْتُمَا"},
{"past_2fp", "ضَارَرْتُنَّ"},
{"past_2fs", "ضَارَرْتِ"},
{"past_2mp", "ضَارَرْتُمْ"},
{"past_2ms", "ضَارَرْتَ"},
{"past_3fd", "ضَارَّتَا"},
{"past_3fp", "ضَارَرْنَ"},
{"past_3fs", "ضَارَّتْ"},
{"past_3md", "ضَارَّا"},
{"past_3mp", "ضَارُّوا"},
{"past_3ms", "ضَارَّ"},
},
},
{
label = "شادَّ (p276)", root = "شدد", wazn = "فاعل",
forms = {
{"imp_2d", "شَادَّا"},
{"imp_2fp", "شَادِدْنَ"},
{"imp_2fs", "شَادِّي"},
{"imp_2mp", "شَادُّوا"},
{"imp_2ms", "شَادِدْ"},
{"ind_1p", "نُشَادُّ"},
{"ind_1s", "أُشَادُّ"},
{"ind_2d", "تُشَادَّانِ"},
{"ind_2fp", "تُشَادِدْنَ"},
{"ind_2fs", "تُشَادِّينَ"},
{"ind_2mp", "تُشَادُّونَ"},
{"ind_2ms", "تُشَادُّ"},
{"ind_3fd", "تُشَادَّانِ"},
{"ind_3fp", "يُشَادِدْنَ"},
{"ind_3fs", "تُشَادُّ"},
{"ind_3md", "يُشَادَّانِ"},
{"ind_3mp", "يُشَادُّونَ"},
{"ind_3ms", "يُشَادُّ"},
{"past_1p", "شَادَدْنَا"},
{"past_1s", "شَادَدْتُ"},
{"past_2d", "شَادَدْتُمَا"},
{"past_2fp", "شَادَدْتُنَّ"},
{"past_2fs", "شَادَدْتِ"},
{"past_2mp", "شَادَدْتُمْ"},
{"past_2ms", "شَادَدْتَ"},
{"past_3fd", "شَادَّتَا"},
{"past_3fp", "شَادَدْنَ"},
{"past_3fs", "شَادَّتْ"},
{"past_3md", "شَادَّا"},
{"past_3mp", "شَادُّوا"},
{"past_3ms", "شَادَّ"},
},
},
{
label = "كافَأَ (p280)", root = "كفأ", wazn = "فاعل",
forms = {
{"imp_2d", "كَافِئَا"},
{"imp_2fp", "كَافِئْنَ"},
{"imp_2fs", "كَافِئِي"},
{"imp_2mp", "كَافِئُوا"},
{"imp_2ms", "كَافِئْ"},
{"ind_1p", "نُكَافِئُ"},
{"ind_1s", "أُكَافِئُ"},
{"ind_2d", "تُكَافِئَانِ"},
{"ind_2fp", "تُكَافِئْنَ"},
{"ind_2fs", "تُكَافِئِينَ"},
{"ind_2mp", "تُكَافِئُونَ"},
{"ind_2ms", "تُكَافِئُ"},
{"ind_3fd", "تُكَافِئَانِ"},
{"ind_3fp", "يُكَافِئْنَ"},
{"ind_3fs", "تُكَافِئُ"},
{"ind_3md", "يُكَافِئَانِ"},
{"ind_3mp", "يُكَافِئُونَ"},
{"ind_3ms", "يُكَافِئُ"},
{"past_1p", "كَافَأْنَا"},
{"past_1s", "كَافَأْتُ"},
{"past_2d", "كَافَأْتُمَا"},
{"past_2fp", "كَافَأْتُنَّ"},
{"past_2fs", "كَافَأْتِ"},
{"past_2mp", "كَافَأْتُمْ"},
{"past_2ms", "كَافَأْتَ"},
{"past_3fd", "كَافَأَتَا"},
{"past_3fp", "كَافَأْنَ"},
{"past_3fs", "كَافَأَتْ"},
{"past_3md", "كَافَآ"},
{"past_3mp", "كَافَؤُوا"},
{"past_3ms", "كَافَأَ"},
},
},
{
label = "وَاجَبَ (p281)", root = "وجب", wazn = "فاعل",
forms = {
{"imp_2d", "وَاجِبَا"},
{"imp_2fp", "وَاجِبْنَ"},
{"imp_2fs", "وَاجِبِي"},
{"imp_2mp", "وَاجِبُوا"},
{"imp_2ms", "وَاجِبْ"},
{"ind_1p", "نُوَاجِبُ"},
{"ind_1s", "أُوَاجِبُ"},
{"ind_2d", "تُوَاجِبَانِ"},
{"ind_2fp", "تُوَاجِبْنَ"},
{"ind_2fs", "تُوَاجِبِينَ"},
{"ind_2mp", "تُوَاجِبُونَ"},
{"ind_2ms", "تُوَاجِبُ"},
{"ind_3fd", "تُوَاجِبَانِ"},
{"ind_3fp", "يُوَاجِبْنَ"},
{"ind_3fs", "تُوَاجِبُ"},
{"ind_3md", "يُوَاجِبَانِ"},
{"ind_3mp", "يُوَاجِبُونَ"},
{"ind_3ms", "يُوَاجِبُ"},
{"past_1p", "وَاجَبْنَا"},
{"past_1s", "وَاجَبْتُ"},
{"past_2d", "وَاجَبْتُمَا"},
{"past_2fp", "وَاجَبْتُنَّ"},
{"past_2fs", "وَاجَبْتِ"},
{"past_2mp", "وَاجَبْتُمْ"},
{"past_2ms", "وَاجَبْتَ"},
{"past_3fd", "وَاجَبَتَا"},
{"past_3fp", "وَاجَبْنَ"},
{"past_3fs", "وَاجَبَتْ"},
{"past_3md", "وَاجَبَا"},
{"past_3mp", "وَاجَبُوا"},
{"past_3ms", "وَاجَبَ"},
},
},
}
pj93fo1nadmxjaunc1nbzkwnme7hwzm
وحدة:ar-verb/testcases/7
828
242211
1159020
1158888
2026-09-10T12:39:31Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159020
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 7 من 15. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/7")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_7()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
5np92bbqcgwhgzv6p5do3nadutis35n
1159078
1159020
2026-09-10T19:34:05Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159078
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 7 من 16. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/7")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_7()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
qasy1oqmcaafp09rrauzst905frki6l
نقاش الوحدة:ar-verb/testcases/7
829
242212
1159021
1158889
2026-09-10T12:39:32Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159021
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/7|الجزء 7 من 15]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، [[نقاش الوحدة:ar-verb/testcases/1|1]]، [[نقاش الوحدة:ar-verb/testcases/2|2]]، [[نقاش الوحدة:ar-verb/testcases/3|3]]، [[نقاش الوحدة:ar-verb/testcases/4|4]]، [[نقاش الوحدة:ar-verb/testcases/5|5]]، [[نقاش الوحدة:ar-verb/testcases/6|6]]، 7، [[نقاش الوحدة:ar-verb/testcases/8|8]]، [[نقاش الوحدة:ar-verb/testcases/9|9]]، [[نقاش الوحدة:ar-verb/testcases/10|10]]، [[نقاش الوحدة:ar-verb/testcases/11|11]]، [[نقاش الوحدة:ar-verb/testcases/12|12]]، [[نقاش الوحدة:ar-verb/testcases/13|13]]، [[نقاش الوحدة:ar-verb/testcases/14|14]]، [[نقاش الوحدة:ar-verb/testcases/15|15]] — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/7|run_tests}}
4dta766mb4s4b7ydyd8yw9qagmcmp27
1159079
1159021
2026-09-10T19:34:06Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159079
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/7|الجزء 7 من 16]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، [[نقاش الوحدة:ar-verb/testcases/1|1]]، [[نقاش الوحدة:ar-verb/testcases/2|2]]، [[نقاش الوحدة:ar-verb/testcases/3|3]]، [[نقاش الوحدة:ar-verb/testcases/4|4]]، [[نقاش الوحدة:ar-verb/testcases/5|5]]، [[نقاش الوحدة:ar-verb/testcases/6|6]]، 7، [[نقاش الوحدة:ar-verb/testcases/8|8]]، [[نقاش الوحدة:ar-verb/testcases/9|9]]، [[نقاش الوحدة:ar-verb/testcases/10|10]]، [[نقاش الوحدة:ar-verb/testcases/11|11]]، [[نقاش الوحدة:ar-verb/testcases/12|12]]، [[نقاش الوحدة:ar-verb/testcases/13|13]]، [[نقاش الوحدة:ar-verb/testcases/14|14]]، [[نقاش الوحدة:ar-verb/testcases/15|15]]، [[نقاش الوحدة:ar-verb/testcases/16|16]] — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/7|run_tests}}
silxkzhovqclbfwm4z50efik02y05xu
وحدة:ar-verb/testcases/بيانات/8
828
242225
1159022
1158890
2026-09-10T12:39:34Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159022
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 8 من 15.
return {
{
label = "يَاسَرَ (p281)", root = "يسر", wazn = "فاعل",
forms = {
{"imp_2d", "يَاسِرَا"},
{"imp_2fp", "يَاسِرْنَ"},
{"imp_2fs", "يَاسِرِي"},
{"imp_2mp", "يَاسِرُوا"},
{"imp_2ms", "يَاسِرْ"},
{"ind_1p", "نُيَاسِرُ"},
{"ind_1s", "أُيَاسِرُ"},
{"ind_2d", "تُيَاسِرَانِ"},
{"ind_2fp", "تُيَاسِرْنَ"},
{"ind_2fs", "تُيَاسِرِينَ"},
{"ind_2mp", "تُيَاسِرُونَ"},
{"ind_2ms", "تُيَاسِرُ"},
{"ind_3fd", "تُيَاسِرَانِ"},
{"ind_3fp", "يُيَاسِرْنَ"},
{"ind_3fs", "تُيَاسِرُ"},
{"ind_3md", "يُيَاسِرَانِ"},
{"ind_3mp", "يُيَاسِرُونَ"},
{"ind_3ms", "يُيَاسِرُ"},
{"past_1p", "يَاسَرْنَا"},
{"past_1s", "يَاسَرْتُ"},
{"past_2d", "يَاسَرْتُمَا"},
{"past_2fp", "يَاسَرْتُنَّ"},
{"past_2fs", "يَاسَرْتِ"},
{"past_2mp", "يَاسَرْتُمْ"},
{"past_2ms", "يَاسَرْتَ"},
{"past_3fd", "يَاسَرَتَا"},
{"past_3fp", "يَاسَرْنَ"},
{"past_3fs", "يَاسَرَتْ"},
{"past_3md", "يَاسَرَا"},
{"past_3mp", "يَاسَرُوا"},
{"past_3ms", "يَاسَرَ"},
},
},
{
label = "جاوَبَ (p282)", root = "جوب", wazn = "فاعل",
forms = {
{"imp_2d", "جَاوِبَا"},
{"imp_2fp", "جَاوِبْنَ"},
{"imp_2fs", "جَاوِبِي"},
{"imp_2mp", "جَاوِبُوا"},
{"imp_2ms", "جَاوِبْ"},
{"ind_1p", "نُجَاوِبُ"},
{"ind_1s", "أُجَاوِبُ"},
{"ind_2d", "تُجَاوِبَانِ"},
{"ind_2fp", "تُجَاوِبْنَ"},
{"ind_2fs", "تُجَاوِبِينَ"},
{"ind_2mp", "تُجَاوِبُونَ"},
{"ind_2ms", "تُجَاوِبُ"},
{"ind_3fd", "تُجَاوِبَانِ"},
{"ind_3fp", "يُجَاوِبْنَ"},
{"ind_3fs", "تُجَاوِبُ"},
{"ind_3md", "يُجَاوِبَانِ"},
{"ind_3mp", "يُجَاوِبُونَ"},
{"ind_3ms", "يُجَاوِبُ"},
{"past_1p", "جَاوَبْنَا"},
{"past_1s", "جَاوَبْتُ"},
{"past_2d", "جَاوَبْتُمَا"},
{"past_2fp", "جَاوَبْتُنَّ"},
{"past_2fs", "جَاوَبْتِ"},
{"past_2mp", "جَاوَبْتُمْ"},
{"past_2ms", "جَاوَبْتَ"},
{"past_3fd", "جَاوَبَتَا"},
{"past_3fp", "جَاوَبْنَ"},
{"past_3fs", "جَاوَبَتْ"},
{"past_3md", "جَاوَبَا"},
{"past_3mp", "جَاوَبُوا"},
{"past_3ms", "جَاوَبَ"},
},
},
{
label = "بايَعَ (p282)", root = "بيع", wazn = "فاعل",
forms = {
{"imp_2d", "بَايِعَا"},
{"imp_2fp", "بَايِعْنَ"},
{"imp_2fs", "بَايِعِي"},
{"imp_2mp", "بَايِعُوا"},
{"imp_2ms", "بَايِعْ"},
{"ind_1p", "نُبَايِعُ"},
{"ind_1s", "أُبَايِعُ"},
{"ind_2d", "تُبَايِعَانِ"},
{"ind_2fp", "تُبَايِعْنَ"},
{"ind_2fs", "تُبَايِعِينَ"},
{"ind_2mp", "تُبَايِعُونَ"},
{"ind_2ms", "تُبَايِعُ"},
{"ind_3fd", "تُبَايِعَانِ"},
{"ind_3fp", "يُبَايِعْنَ"},
{"ind_3fs", "تُبَايِعُ"},
{"ind_3md", "يُبَايِعَانِ"},
{"ind_3mp", "يُبَايِعُونَ"},
{"ind_3ms", "يُبَايِعُ"},
{"past_1p", "بَايَعْنَا"},
{"past_1s", "بَايَعْتُ"},
{"past_2d", "بَايَعْتُمَا"},
{"past_2fp", "بَايَعْتُنَّ"},
{"past_2fs", "بَايَعْتِ"},
{"past_2mp", "بَايَعْتُمْ"},
{"past_2ms", "بَايَعْتَ"},
{"past_3fd", "بَايَعَتَا"},
{"past_3fp", "بَايَعْنَ"},
{"past_3fs", "بَايَعَتْ"},
{"past_3md", "بَايَعَا"},
{"past_3mp", "بَايَعُوا"},
{"past_3ms", "بَايَعَ"},
},
},
{
label = "داوَى (p287)", root = "دوي", wazn = "فاعل",
forms = {
{"imp_2d", "دَاوِيَا"},
{"imp_2fp", "دَاوِينَ"},
{"imp_2fs", "دَاوِي"},
{"imp_2mp", "دَاوُوا"},
{"imp_2ms", "دَاوِ"},
{"ind_1p", "نُدَاوِي"},
{"ind_1s", "أُدَاوِي"},
{"ind_2d", "تُدَاوِيَانِ"},
{"ind_2fp", "تُدَاوِينَ"},
{"ind_2fs", "تُدَاوِينَ"},
{"ind_2mp", "تُدَاوُونَ"},
{"ind_2ms", "تُدَاوِي"},
{"ind_3fd", "تُدَاوِيَانِ"},
{"ind_3fp", "يُدَاوِينَ"},
{"ind_3fs", "تُدَاوِي"},
{"ind_3md", "يُدَاوِيَانِ"},
{"ind_3mp", "يُدَاوُونَ"},
{"ind_3ms", "يُدَاوِي"},
{"past_1p", "دَاوَيْنَا"},
{"past_1s", "دَاوَيْتُ"},
{"past_2d", "دَاوَيْتُمَا"},
{"past_2fp", "دَاوَيْتُنَّ"},
{"past_2fs", "دَاوَيْتِ"},
{"past_2mp", "دَاوَيْتُمْ"},
{"past_2ms", "دَاوَيْتَ"},
{"past_3fd", "دَاوَتَا"},
{"past_3fp", "دَاوَيْنَ"},
{"past_3fs", "دَاوَتْ"},
{"past_3md", "دَاوَيَا"},
{"past_3mp", "دَاوَوْا"},
{"past_3ms", "دَاوَى"},
},
},
{
label = "أَثْبَتَ (p290)", root = "ثبت", wazn = "أفعل",
forms = {
{"imp_2d", "أَثْبِتَا"},
{"imp_2fp", "أَثْبِتْنَ"},
{"imp_2fs", "أَثْبِتِي"},
{"imp_2mp", "أَثْبِتُوا"},
{"imp_2ms", "أَثْبِتْ"},
{"ind_1p", "نُثْبِتُ"},
{"ind_1s", "أُثْبِتُ"},
{"ind_2d", "تُثْبِتَانِ"},
{"ind_2fp", "تُثْبِتْنَ"},
{"ind_2fs", "تُثْبِتِينَ"},
{"ind_2mp", "تُثْبِتُونَ"},
{"ind_2ms", "تُثْبِتُ"},
{"ind_3fd", "تُثْبِتَانِ"},
{"ind_3fp", "يُثْبِتْنَ"},
{"ind_3fs", "تُثْبِتُ"},
{"ind_3md", "يُثْبِتَانِ"},
{"ind_3mp", "يُثْبِتُونَ"},
{"ind_3ms", "يُثْبِتُ"},
{"past_1p", "أَثْبَتْنَا"},
{"past_1s", "أَثْبَتُّ"},
{"past_2d", "أَثْبَتُّمَا"},
{"past_2fp", "أَثْبَتُّنَّ"},
{"past_2fs", "أَثْبَتِّ"},
{"past_2mp", "أَثْبَتُّمْ"},
{"past_2ms", "أَثْبَتَّ"},
{"past_3fd", "أَثْبَتَتَا"},
{"past_3fp", "أَثْبَتْنَ"},
{"past_3fs", "أَثْبَتَتْ"},
{"past_3md", "أَثْبَتَا"},
{"past_3mp", "أَثْبَتُوا"},
{"past_3ms", "أَثْبَتَ"},
},
},
{
label = "أَعْرَبَ (p290)", root = "عرب", wazn = "أفعل",
forms = {
{"imp_2d", "أَعْرِبَا"},
{"imp_2fp", "أَعْرِبْنَ"},
{"imp_2fs", "أَعْرِبِي"},
{"imp_2mp", "أَعْرِبُوا"},
{"imp_2ms", "أَعْرِبْ"},
{"ind_1p", "نُعْرِبُ"},
{"ind_1s", "أُعْرِبُ"},
{"ind_2d", "تُعْرِبَانِ"},
{"ind_2fp", "تُعْرِبْنَ"},
{"ind_2fs", "تُعْرِبِينَ"},
{"ind_2mp", "تُعْرِبُونَ"},
{"ind_2ms", "تُعْرِبُ"},
{"ind_3fd", "تُعْرِبَانِ"},
{"ind_3fp", "يُعْرِبْنَ"},
{"ind_3fs", "تُعْرِبُ"},
{"ind_3md", "يُعْرِبَانِ"},
{"ind_3mp", "يُعْرِبُونَ"},
{"ind_3ms", "يُعْرِبُ"},
{"past_1p", "أَعْرَبْنَا"},
{"past_1s", "أَعْرَبْتُ"},
{"past_2d", "أَعْرَبْتُمَا"},
{"past_2fp", "أَعْرَبْتُنَّ"},
{"past_2fs", "أَعْرَبْتِ"},
{"past_2mp", "أَعْرَبْتُمْ"},
{"past_2ms", "أَعْرَبْتَ"},
{"past_3fd", "أَعْرَبَتَا"},
{"past_3fp", "أَعْرَبْنَ"},
{"past_3fs", "أَعْرَبَتْ"},
{"past_3md", "أَعْرَبَا"},
{"past_3mp", "أَعْرَبُوا"},
{"past_3ms", "أَعْرَبَ"},
},
},
{
label = "أَحَبَّ (p291)", root = "حبب", wazn = "أفعل",
forms = {
{"imp_2d", "أَحِبَّا"},
{"imp_2fp", "أَحْبِبْنَ"},
{"imp_2fs", "أَحِبِّي"},
{"imp_2mp", "أَحِبُّوا"},
{"imp_2ms", "أَحْبِبْ"},
{"ind_1p", "نُحِبُّ"},
{"ind_1s", "أُحِبُّ"},
{"ind_2d", "تُحِبَّانِ"},
{"ind_2fp", "تُحْبِبْنَ"},
{"ind_2fs", "تُحِبِّينَ"},
{"ind_2mp", "تُحِبُّونَ"},
{"ind_2ms", "تُحِبُّ"},
{"ind_3fd", "تُحِبَّانِ"},
{"ind_3fp", "يُحْبِبْنَ"},
{"ind_3fs", "تُحِبُّ"},
{"ind_3md", "يُحِبَّانِ"},
{"ind_3mp", "يُحِبُّونَ"},
{"ind_3ms", "يُحِبُّ"},
{"past_1p", "أَحْبَبْنَا"},
{"past_1s", "أَحْبَبْتُ"},
{"past_2d", "أَحْبَبْتُمَا"},
{"past_2fp", "أَحْبَبْتُنَّ"},
{"past_2fs", "أَحْبَبْتِ"},
{"past_2mp", "أَحْبَبْتُمْ"},
{"past_2ms", "أَحْبَبْتَ"},
{"past_3fd", "أَحَبَّتَا"},
{"past_3fp", "أَحْبَبْنَ"},
{"past_3fs", "أَحَبَّتْ"},
{"past_3md", "أَحَبَّا"},
{"past_3mp", "أَحَبُّوا"},
{"past_3ms", "أَحَبَّ"},
},
},
{
label = "أَرَقَّ (p291)", root = "رقق", wazn = "أفعل",
forms = {
{"imp_2d", "أَرِقَّا"},
{"imp_2fp", "أَرْقِقْنَ"},
{"imp_2fs", "أَرِقِّي"},
{"imp_2mp", "أَرِقُّوا"},
{"imp_2ms", "أَرْقِقْ"},
{"ind_1p", "نُرِقُّ"},
{"ind_1s", "أُرِقُّ"},
{"ind_2d", "تُرِقَّانِ"},
{"ind_2fp", "تُرْقِقْنَ"},
{"ind_2fs", "تُرِقِّينَ"},
{"ind_2mp", "تُرِقُّونَ"},
{"ind_2ms", "تُرِقُّ"},
{"ind_3fd", "تُرِقَّانِ"},
{"ind_3fp", "يُرْقِقْنَ"},
{"ind_3fs", "تُرِقُّ"},
{"ind_3md", "يُرِقَّانِ"},
{"ind_3mp", "يُرِقُّونَ"},
{"ind_3ms", "يُرِقُّ"},
{"past_1p", "أَرْقَقْنَا"},
{"past_1s", "أَرْقَقْتُ"},
{"past_2d", "أَرْقَقْتُمَا"},
{"past_2fp", "أَرْقَقْتُنَّ"},
{"past_2fs", "أَرْقَقْتِ"},
{"past_2mp", "أَرْقَقْتُمْ"},
{"past_2ms", "أَرْقَقْتَ"},
{"past_3fd", "أَرَقَّتَا"},
{"past_3fp", "أَرْقَقْنَ"},
{"past_3fs", "أَرَقَّتْ"},
{"past_3md", "أَرَقَّا"},
{"past_3mp", "أَرَقُّوا"},
{"past_3ms", "أَرَقَّ"},
},
},
{
label = "أَخْطَأَ (p294)", root = "خطأ", wazn = "أفعل",
forms = {
{"imp_2d", "أَخْطِئَا"},
{"imp_2fp", "أَخْطِئْنَ"},
{"imp_2fs", "أَخْطِئِي"},
{"imp_2mp", "أَخْطِئُوا"},
{"imp_2ms", "أَخْطِئْ"},
{"ind_1p", "نُخْطِئُ"},
{"ind_1s", "أُخْطِئُ"},
{"ind_2d", "تُخْطِئَانِ"},
{"ind_2fp", "تُخْطِئْنَ"},
{"ind_2fs", "تُخْطِئِينَ"},
{"ind_2mp", "تُخْطِئُونَ"},
{"ind_2ms", "تُخْطِئُ"},
{"ind_3fd", "تُخْطِئَانِ"},
{"ind_3fp", "يُخْطِئْنَ"},
{"ind_3fs", "تُخْطِئُ"},
{"ind_3md", "يُخْطِئَانِ"},
{"ind_3mp", "يُخْطِئُونَ"},
{"ind_3ms", "يُخْطِئُ"},
{"past_1p", "أَخْطَأْنَا"},
{"past_1s", "أَخْطَأْتُ"},
{"past_2d", "أَخْطَأْتُمَا"},
{"past_2fp", "أَخْطَأْتُنَّ"},
{"past_2fs", "أَخْطَأْتِ"},
{"past_2mp", "أَخْطَأْتُمْ"},
{"past_2ms", "أَخْطَأْتَ"},
{"past_3fd", "أَخْطَأَتَا"},
{"past_3fp", "أَخْطَأْنَ"},
{"past_3fs", "أَخْطَأَتْ"},
{"past_3md", "أَخْطَآ"},
{"past_3mp", "أَخْطَؤُوا"},
{"past_3ms", "أَخْطَأَ"},
},
},
{
label = "أَنْبَأَ (p294)", root = "نبأ", wazn = "أفعل",
forms = {
{"imp_2d", "أَنْبِئَا"},
{"imp_2fp", "أَنْبِئْنَ"},
{"imp_2fs", "أَنْبِئِي"},
{"imp_2mp", "أَنْبِئُوا"},
{"imp_2ms", "أَنْبِئْ"},
{"ind_1p", "نُنْبِئُ"},
{"ind_1s", "أُنْبِئُ"},
{"ind_2d", "تُنْبِئَانِ"},
{"ind_2fp", "تُنْبِئْنَ"},
{"ind_2fs", "تُنْبِئِينَ"},
{"ind_2mp", "تُنْبِئُونَ"},
{"ind_2ms", "تُنْبِئُ"},
{"ind_3fd", "تُنْبِئَانِ"},
{"ind_3fp", "يُنْبِئْنَ"},
{"ind_3fs", "تُنْبِئُ"},
{"ind_3md", "يُنْبِئَانِ"},
{"ind_3mp", "يُنْبِئُونَ"},
{"ind_3ms", "يُنْبِئُ"},
{"past_1p", "أَنْبَأْنَا"},
{"past_1s", "أَنْبَأْتُ"},
{"past_2d", "أَنْبَأْتُمَا"},
{"past_2fp", "أَنْبَأْتُنَّ"},
{"past_2fs", "أَنْبَأْتِ"},
{"past_2mp", "أَنْبَأْتُمْ"},
{"past_2ms", "أَنْبَأْتَ"},
{"past_3fd", "أَنْبَأَتَا"},
{"past_3fp", "أَنْبَأْنَ"},
{"past_3fs", "أَنْبَأَتْ"},
{"past_3md", "أَنْبَآ"},
{"past_3mp", "أَنْبَؤُوا"},
{"past_3ms", "أَنْبَأَ"},
},
},
{
label = "أَوْحَشَ (p295)", root = "وحش", wazn = "أفعل",
forms = {
{"imp_2d", "أَوْحِشَا"},
{"imp_2fp", "أَوْحِشْنَ"},
{"imp_2fs", "أَوْحِشِي"},
{"imp_2mp", "أَوْحِشُوا"},
{"imp_2ms", "أَوْحِشْ"},
{"ind_1p", "نُوحِشُ"},
{"ind_1s", "أُوحِشُ"},
{"ind_2d", "تُوحِشَانِ"},
{"ind_2fp", "تُوحِشْنَ"},
{"ind_2fs", "تُوحِشِينَ"},
{"ind_2mp", "تُوحِشُونَ"},
{"ind_2ms", "تُوحِشُ"},
{"ind_3fd", "تُوحِشَانِ"},
{"ind_3fp", "يُوحِشْنَ"},
{"ind_3fs", "تُوحِشُ"},
{"ind_3md", "يُوحِشَانِ"},
{"ind_3mp", "يُوحِشُونَ"},
{"ind_3ms", "يُوحِشُ"},
{"past_1p", "أَوْحَشْنَا"},
{"past_1s", "أَوْحَشْتُ"},
{"past_2d", "أَوْحَشْتُمَا"},
{"past_2fp", "أَوْحَشْتُنَّ"},
{"past_2fs", "أَوْحَشْتِ"},
{"past_2mp", "أَوْحَشْتُمْ"},
{"past_2ms", "أَوْحَشْتَ"},
{"past_3fd", "أَوْحَشَتَا"},
{"past_3fp", "أَوْحَشْنَ"},
{"past_3fs", "أَوْحَشَتْ"},
{"past_3md", "أَوْحَشَا"},
{"past_3mp", "أَوْحَشُوا"},
{"past_3ms", "أَوْحَشَ"},
},
},
{
label = "أَيْقَظَ (p295)", root = "يقظ", wazn = "أفعل",
forms = {
{"imp_2d", "أَيْقِظَا"},
{"imp_2fp", "أَيْقِظْنَ"},
{"imp_2fs", "أَيْقِظِي"},
{"imp_2mp", "أَيْقِظُوا"},
{"imp_2ms", "أَيْقِظْ"},
{"ind_1p", "نُوقِظُ"},
{"ind_1s", "أُوقِظُ"},
{"ind_2d", "تُوقِظَانِ"},
{"ind_2fp", "تُوقِظْنَ"},
{"ind_2fs", "تُوقِظِينَ"},
{"ind_2mp", "تُوقِظُونَ"},
{"ind_2ms", "تُوقِظُ"},
{"ind_3fd", "تُوقِظَانِ"},
{"ind_3fp", "يُوقِظْنَ"},
{"ind_3fs", "تُوقِظُ"},
{"ind_3md", "يُوقِظَانِ"},
{"ind_3mp", "يُوقِظُونَ"},
{"ind_3ms", "يُوقِظُ"},
{"past_1p", "أَيْقَظْنَا"},
{"past_1s", "أَيْقَظْتُ"},
{"past_2d", "أَيْقَظْتُمَا"},
{"past_2fp", "أَيْقَظْتُنَّ"},
{"past_2fs", "أَيْقَظْتِ"},
{"past_2mp", "أَيْقَظْتُمْ"},
{"past_2ms", "أَيْقَظْتَ"},
{"past_3fd", "أَيْقَظَتَا"},
{"past_3fp", "أَيْقَظْنَ"},
{"past_3fs", "أَيْقَظَتْ"},
{"past_3md", "أَيْقَظَا"},
{"past_3mp", "أَيْقَظُوا"},
{"past_3ms", "أَيْقَظَ"},
},
},
{
label = "أَهْوَى (p302)", root = "هوي", wazn = "أفعل",
forms = {
{"imp_2d", "أَهْوِيَا"},
{"imp_2fp", "أَهْوِينَ"},
{"imp_2fs", "أَهْوِي"},
{"imp_2mp", "أَهْوُوا"},
{"imp_2ms", "أَهْوِ"},
{"ind_1p", "نُهْوِي"},
{"ind_1s", "أُهْوِي"},
{"ind_2d", "تُهْوِيَانِ"},
{"ind_2fp", "تُهْوِينَ"},
{"ind_2fs", "تُهْوِينَ"},
{"ind_2mp", "تُهْوُونَ"},
{"ind_2ms", "تُهْوِي"},
{"ind_3fd", "تُهْوِيَانِ"},
{"ind_3fp", "يُهْوِينَ"},
{"ind_3fs", "تُهْوِي"},
{"ind_3md", "يُهْوِيَانِ"},
{"ind_3mp", "يُهْوُونَ"},
{"ind_3ms", "يُهْوِي"},
{"past_1p", "أَهْوَيْنَا"},
{"past_1s", "أَهْوَيْتُ"},
{"past_2d", "أَهْوَيْتُمَا"},
{"past_2fp", "أَهْوَيْتُنَّ"},
{"past_2fs", "أَهْوَيْتِ"},
{"past_2mp", "أَهْوَيْتُمْ"},
{"past_2ms", "أَهْوَيْتَ"},
{"past_3fd", "أَهْوَتَا"},
{"past_3fp", "أَهْوَيْنَ"},
{"past_3fs", "أَهْوَتْ"},
{"past_3md", "أَهْوَيَا"},
{"past_3mp", "أَهْوَوْا"},
{"past_3ms", "أَهْوَى"},
},
},
{
label = "تَكَأَّدَ (p309)", root = "كأد", wazn = "تفعّل",
forms = {
{"imp_2d", "تَكَأَّدَا"},
{"imp_2fp", "تَكَأَّدْنَ"},
{"imp_2fs", "تَكَأَّدِي"},
{"imp_2mp", "تَكَأَّدُوا"},
{"imp_2ms", "تَكَأَّدْ"},
{"ind_1p", "نَتَكَأَّدُ"},
{"ind_1s", "أَتَكَأَّدُ"},
{"ind_2d", "تَتَكَأَّدَانِ"},
{"ind_2fp", "تَتَكَأَّدْنَ"},
{"ind_2fs", "تَتَكَأَّدِينَ"},
{"ind_2mp", "تَتَكَأَّدُونَ"},
{"ind_2ms", "تَتَكَأَّدُ"},
{"ind_3fd", "تَتَكَأَّدَانِ"},
{"ind_3fp", "يَتَكَأَّدْنَ"},
{"ind_3fs", "تَتَكَأَّدُ"},
{"ind_3md", "يَتَكَأَّدَانِ"},
{"ind_3mp", "يَتَكَأَّدُونَ"},
{"ind_3ms", "يَتَكَأَّدُ"},
{"past_1p", "تَكَأَّدْنَا"},
{"past_1s", "تَكَأَّدْتُ"},
{"past_2d", "تَكَأَّدْتُمَا"},
{"past_2fp", "تَكَأَّدْتُنَّ"},
{"past_2fs", "تَكَأَّدْتِ"},
{"past_2mp", "تَكَأَّدْتُمْ"},
{"past_2ms", "تَكَأَّدْتَ"},
{"past_3fd", "تَكَأَّدَتَا"},
{"past_3fp", "تَكَأَّدْنَ"},
{"past_3fs", "تَكَأَّدَتْ"},
{"past_3md", "تَكَأَّدَا"},
{"past_3mp", "تَكَأَّدُوا"},
{"past_3ms", "تَكَأَّدَ"},
},
},
{
label = "تَسَوَّلَ (p309)", root = "سول", wazn = "تفعّل",
forms = {
{"imp_2d", "تَسَوَّلَا"},
{"imp_2fp", "تَسَوَّلْنَ"},
{"imp_2fs", "تَسَوَّلِي"},
{"imp_2mp", "تَسَوَّلُوا"},
{"imp_2ms", "تَسَوَّلْ"},
{"ind_1p", "نَتَسَوَّلُ"},
{"ind_1s", "أَتَسَوَّلُ"},
{"ind_2d", "تَتَسَوَّلَانِ"},
{"ind_2fp", "تَتَسَوَّلْنَ"},
{"ind_2fs", "تَتَسَوَّلِينَ"},
{"ind_2mp", "تَتَسَوَّلُونَ"},
{"ind_2ms", "تَتَسَوَّلُ"},
{"ind_3fd", "تَتَسَوَّلَانِ"},
{"ind_3fp", "يَتَسَوَّلْنَ"},
{"ind_3fs", "تَتَسَوَّلُ"},
{"ind_3md", "يَتَسَوَّلَانِ"},
{"ind_3mp", "يَتَسَوَّلُونَ"},
{"ind_3ms", "يَتَسَوَّلُ"},
{"past_1p", "تَسَوَّلْنَا"},
{"past_1s", "تَسَوَّلْتُ"},
{"past_2d", "تَسَوَّلْتُمَا"},
{"past_2fp", "تَسَوَّلْتُنَّ"},
{"past_2fs", "تَسَوَّلْتِ"},
{"past_2mp", "تَسَوَّلْتُمْ"},
{"past_2ms", "تَسَوَّلْتَ"},
{"past_3fd", "تَسَوَّلَتَا"},
{"past_3fp", "تَسَوَّلْنَ"},
{"past_3fs", "تَسَوَّلَتْ"},
{"past_3md", "تَسَوَّلَا"},
{"past_3mp", "تَسَوَّلُوا"},
{"past_3ms", "تَسَوَّلَ"},
},
},
{
label = "تَراصَّ (p323)", root = "رصص", wazn = "تفاعل",
forms = {
{"imp_2d", "تَرَاصَّا"},
{"imp_2fp", "تَرَاصَصْنَ"},
{"imp_2fs", "تَرَاصِّي"},
{"imp_2mp", "تَرَاصُّوا"},
{"imp_2ms", "تَرَاصَصْ"},
{"ind_1p", "نَتَرَاصُّ"},
{"ind_1s", "أَتَرَاصُّ"},
{"ind_2d", "تَتَرَاصَّانِ"},
{"ind_2fp", "تَتَرَاصَصْنَ"},
{"ind_2fs", "تَتَرَاصِّينَ"},
{"ind_2mp", "تَتَرَاصُّونَ"},
{"ind_2ms", "تَتَرَاصُّ"},
{"ind_3fd", "تَتَرَاصَّانِ"},
{"ind_3fp", "يَتَرَاصَصْنَ"},
{"ind_3fs", "تَتَرَاصُّ"},
{"ind_3md", "يَتَرَاصَّانِ"},
{"ind_3mp", "يَتَرَاصُّونَ"},
{"ind_3ms", "يَتَرَاصُّ"},
{"past_1p", "تَرَاصَصْنَا"},
{"past_1s", "تَرَاصَصْتُ"},
{"past_2d", "تَرَاصَصْتُمَا"},
{"past_2fp", "تَرَاصَصْتُنَّ"},
{"past_2fs", "تَرَاصَصْتِ"},
{"past_2mp", "تَرَاصَصْتُمْ"},
{"past_2ms", "تَرَاصَصْتَ"},
{"past_3fd", "تَرَاصَّتَا"},
{"past_3fp", "تَرَاصَصْنَ"},
{"past_3fs", "تَرَاصَّتْ"},
{"past_3md", "تَرَاصَّا"},
{"past_3mp", "تَرَاصُّوا"},
{"past_3ms", "تَرَاصَّ"},
},
},
{
label = "تَمارَّ (p323)", root = "مرر", wazn = "تفاعل",
forms = {
{"imp_2d", "تَمَارَّا"},
{"imp_2fp", "تَمَارَرْنَ"},
{"imp_2fs", "تَمَارِّي"},
{"imp_2mp", "تَمَارُّوا"},
{"imp_2ms", "تَمَارَرْ"},
{"ind_1p", "نَتَمَارُّ"},
{"ind_1s", "أَتَمَارُّ"},
{"ind_2d", "تَتَمَارَّانِ"},
{"ind_2fp", "تَتَمَارَرْنَ"},
{"ind_2fs", "تَتَمَارِّينَ"},
{"ind_2mp", "تَتَمَارُّونَ"},
{"ind_2ms", "تَتَمَارُّ"},
{"ind_3fd", "تَتَمَارَّانِ"},
{"ind_3fp", "يَتَمَارَرْنَ"},
{"ind_3fs", "تَتَمَارُّ"},
{"ind_3md", "يَتَمَارَّانِ"},
{"ind_3mp", "يَتَمَارُّونَ"},
{"ind_3ms", "يَتَمَارُّ"},
{"past_1p", "تَمَارَرْنَا"},
{"past_1s", "تَمَارَرْتُ"},
{"past_2d", "تَمَارَرْتُمَا"},
{"past_2fp", "تَمَارَرْتُنَّ"},
{"past_2fs", "تَمَارَرْتِ"},
{"past_2mp", "تَمَارَرْتُمْ"},
{"past_2ms", "تَمَارَرْتَ"},
{"past_3fd", "تَمَارَّتَا"},
{"past_3fp", "تَمَارَرْنَ"},
{"past_3fs", "تَمَارَّتْ"},
{"past_3md", "تَمَارَّا"},
{"past_3mp", "تَمَارُّوا"},
{"past_3ms", "تَمَارَّ"},
},
},
{
label = "تَخاطَأَ (p327)", root = "خطأ", wazn = "تفاعل",
forms = {
{"imp_2d", "تَخَاطَآ"},
{"imp_2fp", "تَخَاطَأْنَ"},
{"imp_2fs", "تَخَاطَئِي"},
{"imp_2mp", "تَخَاطَؤُوا"},
{"imp_2ms", "تَخَاطَأْ"},
{"ind_1p", "نَتَخَاطَأُ"},
{"ind_1s", "أَتَخَاطَأُ"},
{"ind_2d", "تَتَخَاطَآنِ"},
{"ind_2fp", "تَتَخَاطَأْنَ"},
{"ind_2fs", "تَتَخَاطَئِينَ"},
{"ind_2mp", "تَتَخَاطَؤُونَ"},
{"ind_2ms", "تَتَخَاطَأُ"},
{"ind_3fd", "تَتَخَاطَآنِ"},
{"ind_3fp", "يَتَخَاطَأْنَ"},
{"ind_3fs", "تَتَخَاطَأُ"},
{"ind_3md", "يَتَخَاطَآنِ"},
{"ind_3mp", "يَتَخَاطَؤُونَ"},
{"ind_3ms", "يَتَخَاطَأُ"},
{"past_1p", "تَخَاطَأْنَا"},
{"past_1s", "تَخَاطَأْتُ"},
{"past_2d", "تَخَاطَأْتُمَا"},
{"past_2fp", "تَخَاطَأْتُنَّ"},
{"past_2fs", "تَخَاطَأْتِ"},
{"past_2mp", "تَخَاطَأْتُمْ"},
{"past_2ms", "تَخَاطَأْتَ"},
{"past_3fd", "تَخَاطَأَتَا"},
{"past_3fp", "تَخَاطَأْنَ"},
{"past_3fs", "تَخَاطَأَتْ"},
{"past_3md", "تَخَاطَآ"},
{"past_3mp", "تَخَاطَؤُوا"},
{"past_3ms", "تَخَاطَأَ"},
},
},
{
label = "تَرافَأَ (p327)", root = "رفأ", wazn = "تفاعل",
forms = {
{"imp_2d", "تَرَافَآ"},
{"imp_2fp", "تَرَافَأْنَ"},
{"imp_2fs", "تَرَافَئِي"},
{"imp_2mp", "تَرَافَؤُوا"},
{"imp_2ms", "تَرَافَأْ"},
{"ind_1p", "نَتَرَافَأُ"},
{"ind_1s", "أَتَرَافَأُ"},
{"ind_2d", "تَتَرَافَآنِ"},
{"ind_2fp", "تَتَرَافَأْنَ"},
{"ind_2fs", "تَتَرَافَئِينَ"},
{"ind_2mp", "تَتَرَافَؤُونَ"},
{"ind_2ms", "تَتَرَافَأُ"},
{"ind_3fd", "تَتَرَافَآنِ"},
{"ind_3fp", "يَتَرَافَأْنَ"},
{"ind_3fs", "تَتَرَافَأُ"},
{"ind_3md", "يَتَرَافَآنِ"},
{"ind_3mp", "يَتَرَافَؤُونَ"},
{"ind_3ms", "يَتَرَافَأُ"},
{"past_1p", "تَرَافَأْنَا"},
{"past_1s", "تَرَافَأْتُ"},
{"past_2d", "تَرَافَأْتُمَا"},
{"past_2fp", "تَرَافَأْتُنَّ"},
{"past_2fs", "تَرَافَأْتِ"},
{"past_2mp", "تَرَافَأْتُمْ"},
{"past_2ms", "تَرَافَأْتَ"},
{"past_3fd", "تَرَافَأَتَا"},
{"past_3fp", "تَرَافَأْنَ"},
{"past_3fs", "تَرَافَأَتْ"},
{"past_3md", "تَرَافَآ"},
{"past_3mp", "تَرَافَؤُوا"},
{"past_3ms", "تَرَافَأَ"},
},
},
{
label = "تَوَارَدَ (p329)", root = "ورد", wazn = "تفاعل",
forms = {
{"imp_2d", "تَوَارَدَا"},
{"imp_2fp", "تَوَارَدْنَ"},
{"imp_2fs", "تَوَارَدِي"},
{"imp_2mp", "تَوَارَدُوا"},
{"imp_2ms", "تَوَارَدْ"},
{"ind_1p", "نَتَوَارَدُ"},
{"ind_1s", "أَتَوَارَدُ"},
{"ind_2d", "تَتَوَارَدَانِ"},
{"ind_2fp", "تَتَوَارَدْنَ"},
{"ind_2fs", "تَتَوَارَدِينَ"},
{"ind_2mp", "تَتَوَارَدُونَ"},
{"ind_2ms", "تَتَوَارَدُ"},
{"ind_3fd", "تَتَوَارَدَانِ"},
{"ind_3fp", "يَتَوَارَدْنَ"},
{"ind_3fs", "تَتَوَارَدُ"},
{"ind_3md", "يَتَوَارَدَانِ"},
{"ind_3mp", "يَتَوَارَدُونَ"},
{"ind_3ms", "يَتَوَارَدُ"},
{"past_1p", "تَوَارَدْنَا"},
{"past_1s", "تَوَارَدْتُ"},
{"past_2d", "تَوَارَدْتُمَا"},
{"past_2fp", "تَوَارَدْتُنَّ"},
{"past_2fs", "تَوَارَدْتِ"},
{"past_2mp", "تَوَارَدْتُمْ"},
{"past_2ms", "تَوَارَدْتَ"},
{"past_3fd", "تَوَارَدَتَا"},
{"past_3fp", "تَوَارَدْنَ"},
{"past_3fs", "تَوَارَدَتْ"},
{"past_3md", "تَوَارَدَا"},
{"past_3mp", "تَوَارَدُوا"},
{"past_3ms", "تَوَارَدَ"},
},
},
{
label = "تَيَامَنَ (p329)", root = "يمن", wazn = "تفاعل",
forms = {
{"imp_2d", "تَيَامَنَا"},
{"imp_2fp", "تَيَامَنَّ"},
{"imp_2fs", "تَيَامَنِي"},
{"imp_2mp", "تَيَامَنُوا"},
{"imp_2ms", "تَيَامَنْ"},
{"ind_1p", "نَتَيَامَنُ"},
{"ind_1s", "أَتَيَامَنُ"},
{"ind_2d", "تَتَيَامَنَانِ"},
{"ind_2fp", "تَتَيَامَنَّ"},
{"ind_2fs", "تَتَيَامَنِينَ"},
{"ind_2mp", "تَتَيَامَنُونَ"},
{"ind_2ms", "تَتَيَامَنُ"},
{"ind_3fd", "تَتَيَامَنَانِ"},
{"ind_3fp", "يَتَيَامَنَّ"},
{"ind_3fs", "تَتَيَامَنُ"},
{"ind_3md", "يَتَيَامَنَانِ"},
{"ind_3mp", "يَتَيَامَنُونَ"},
{"ind_3ms", "يَتَيَامَنُ"},
{"past_1p", "تَيَامَنَّا"},
{"past_1s", "تَيَامَنْتُ"},
{"past_2d", "تَيَامَنْتُمَا"},
{"past_2fp", "تَيَامَنْتُنَّ"},
{"past_2fs", "تَيَامَنْتِ"},
{"past_2mp", "تَيَامَنْتُمْ"},
{"past_2ms", "تَيَامَنْتَ"},
{"past_3fd", "تَيَامَنَتَا"},
{"past_3fp", "تَيَامَنَّ"},
{"past_3fs", "تَيَامَنَتْ"},
{"past_3md", "تَيَامَنَا"},
{"past_3mp", "تَيَامَنُوا"},
{"past_3ms", "تَيَامَنَ"},
},
},
{
label = "تَداوَلَ (p330)", root = "دول", wazn = "تفاعل",
forms = {
{"imp_2d", "تَدَاوَلَا"},
{"imp_2fp", "تَدَاوَلْنَ"},
{"imp_2fs", "تَدَاوَلِي"},
{"imp_2mp", "تَدَاوَلُوا"},
{"imp_2ms", "تَدَاوَلْ"},
{"ind_1p", "نَتَدَاوَلُ"},
{"ind_1s", "أَتَدَاوَلُ"},
{"ind_2d", "تَتَدَاوَلَانِ"},
{"ind_2fp", "تَتَدَاوَلْنَ"},
{"ind_2fs", "تَتَدَاوَلِينَ"},
{"ind_2mp", "تَتَدَاوَلُونَ"},
{"ind_2ms", "تَتَدَاوَلُ"},
{"ind_3fd", "تَتَدَاوَلَانِ"},
{"ind_3fp", "يَتَدَاوَلْنَ"},
{"ind_3fs", "تَتَدَاوَلُ"},
{"ind_3md", "يَتَدَاوَلَانِ"},
{"ind_3mp", "يَتَدَاوَلُونَ"},
{"ind_3ms", "يَتَدَاوَلُ"},
{"past_1p", "تَدَاوَلْنَا"},
{"past_1s", "تَدَاوَلْتُ"},
{"past_2d", "تَدَاوَلْتُمَا"},
{"past_2fp", "تَدَاوَلْتُنَّ"},
{"past_2fs", "تَدَاوَلْتِ"},
{"past_2mp", "تَدَاوَلْتُمْ"},
{"past_2ms", "تَدَاوَلْتَ"},
{"past_3fd", "تَدَاوَلَتَا"},
{"past_3fp", "تَدَاوَلْنَ"},
{"past_3fs", "تَدَاوَلَتْ"},
{"past_3md", "تَدَاوَلَا"},
{"past_3mp", "تَدَاوَلُوا"},
{"past_3ms", "تَدَاوَلَ"},
},
},
{
label = "تَقايَضَ (p330)", root = "قيض", wazn = "تفاعل",
forms = {
{"imp_2d", "تَقَايَضَا"},
{"imp_2fp", "تَقَايَضْنَ"},
{"imp_2fs", "تَقَايَضِي"},
{"imp_2mp", "تَقَايَضُوا"},
{"imp_2ms", "تَقَايَضْ"},
{"ind_1p", "نَتَقَايَضُ"},
{"ind_1s", "أَتَقَايَضُ"},
{"ind_2d", "تَتَقَايَضَانِ"},
{"ind_2fp", "تَتَقَايَضْنَ"},
{"ind_2fs", "تَتَقَايَضِينَ"},
{"ind_2mp", "تَتَقَايَضُونَ"},
{"ind_2ms", "تَتَقَايَضُ"},
{"ind_3fd", "تَتَقَايَضَانِ"},
{"ind_3fp", "يَتَقَايَضْنَ"},
{"ind_3fs", "تَتَقَايَضُ"},
{"ind_3md", "يَتَقَايَضَانِ"},
{"ind_3mp", "يَتَقَايَضُونَ"},
{"ind_3ms", "يَتَقَايَضُ"},
{"past_1p", "تَقَايَضْنَا"},
{"past_1s", "تَقَايَضْتُ"},
{"past_2d", "تَقَايَضْتُمَا"},
{"past_2fp", "تَقَايَضْتُنَّ"},
{"past_2fs", "تَقَايَضْتِ"},
{"past_2mp", "تَقَايَضْتُمْ"},
{"past_2ms", "تَقَايَضْتَ"},
{"past_3fd", "تَقَايَضَتَا"},
{"past_3fp", "تَقَايَضْنَ"},
{"past_3fs", "تَقَايَضَتْ"},
{"past_3md", "تَقَايَضَا"},
{"past_3mp", "تَقَايَضُوا"},
{"past_3ms", "تَقَايَضَ"},
},
},
{
label = "اِنْخَرَطَ (p338)", root = "خرط", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْخَرِطَا"},
{"imp_2fp", "اِنْخَرِطْنَ"},
{"imp_2fs", "اِنْخَرِطِي"},
{"imp_2mp", "اِنْخَرِطُوا"},
{"imp_2ms", "اِنْخَرِطْ"},
{"ind_1p", "نَنْخَرِطُ"},
{"ind_1s", "أَنْخَرِطُ"},
{"ind_2d", "تَنْخَرِطَانِ"},
{"ind_2fp", "تَنْخَرِطْنَ"},
{"ind_2fs", "تَنْخَرِطِينَ"},
{"ind_2mp", "تَنْخَرِطُونَ"},
{"ind_2ms", "تَنْخَرِطُ"},
{"ind_3fd", "تَنْخَرِطَانِ"},
{"ind_3fp", "يَنْخَرِطْنَ"},
{"ind_3fs", "تَنْخَرِطُ"},
{"ind_3md", "يَنْخَرِطَانِ"},
{"ind_3mp", "يَنْخَرِطُونَ"},
{"ind_3ms", "يَنْخَرِطُ"},
{"past_1p", "اِنْخَرَطْنَا"},
{"past_1s", "اِنْخَرَطْتُ"},
{"past_2d", "اِنْخَرَطْتُمَا"},
{"past_2fp", "اِنْخَرَطْتُنَّ"},
{"past_2fs", "اِنْخَرَطْتِ"},
{"past_2mp", "اِنْخَرَطْتُمْ"},
{"past_2ms", "اِنْخَرَطْتَ"},
{"past_3fd", "اِنْخَرَطَتَا"},
{"past_3fp", "اِنْخَرَطْنَ"},
{"past_3fs", "اِنْخَرَطَتْ"},
{"past_3md", "اِنْخَرَطَا"},
{"past_3mp", "اِنْخَرَطُوا"},
{"past_3ms", "اِنْخَرَطَ"},
},
},
{
label = "اِنْطَلَقَ (p338)", root = "طلق", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْطَلِقَا"},
{"imp_2fp", "اِنْطَلِقْنَ"},
{"imp_2fs", "اِنْطَلِقِي"},
{"imp_2mp", "اِنْطَلِقُوا"},
{"imp_2ms", "اِنْطَلِقْ"},
{"ind_1p", "نَنْطَلِقُ"},
{"ind_1s", "أَنْطَلِقُ"},
{"ind_2d", "تَنْطَلِقَانِ"},
{"ind_2fp", "تَنْطَلِقْنَ"},
{"ind_2fs", "تَنْطَلِقِينَ"},
{"ind_2mp", "تَنْطَلِقُونَ"},
{"ind_2ms", "تَنْطَلِقُ"},
{"ind_3fd", "تَنْطَلِقَانِ"},
{"ind_3fp", "يَنْطَلِقْنَ"},
{"ind_3fs", "تَنْطَلِقُ"},
{"ind_3md", "يَنْطَلِقَانِ"},
{"ind_3mp", "يَنْطَلِقُونَ"},
{"ind_3ms", "يَنْطَلِقُ"},
{"past_1p", "اِنْطَلَقْنَا"},
{"past_1s", "اِنْطَلَقْتُ"},
{"past_2d", "اِنْطَلَقْتُمَا"},
{"past_2fp", "اِنْطَلَقْتُنَّ"},
{"past_2fs", "اِنْطَلَقْتِ"},
{"past_2mp", "اِنْطَلَقْتُمْ"},
{"past_2ms", "اِنْطَلَقْتَ"},
{"past_3fd", "اِنْطَلَقَتَا"},
{"past_3fp", "اِنْطَلَقْنَ"},
{"past_3fs", "اِنْطَلَقَتْ"},
{"past_3md", "اِنْطَلَقَا"},
{"past_3mp", "اِنْطَلَقُوا"},
{"past_3ms", "اِنْطَلَقَ"},
},
},
{
label = "فَئِدَ (p234)", root = "فئد", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِفْأَدَا"},
{"imp_2fp", "اِفْأَدْنَ"},
{"imp_2fs", "اِفْأَدِي"},
{"imp_2mp", "اِفْأَدُوا"},
{"imp_2ms", "اِفْأَدْ"},
{"ind_1p", "نَفْأَدُ"},
{"ind_1s", "أَفْأَدُ"},
{"ind_2d", "تَفْأَدَانِ"},
{"ind_2fp", "تَفْأَدْنَ"},
{"ind_2fs", "تَفْأَدِينَ"},
{"ind_2mp", "تَفْأَدُونَ"},
{"ind_2ms", "تَفْأَدُ"},
{"ind_3fd", "تَفْأَدَانِ"},
{"ind_3fp", "يَفْأَدْنَ"},
{"ind_3fs", "تَفْأَدُ"},
{"ind_3md", "يَفْأَدَانِ"},
{"ind_3mp", "يَفْأَدُونَ"},
{"ind_3ms", "يَفْأَدُ"},
{"past_1p", "فَئِدْنَا"},
{"past_1s", "فَئِدْتُ"},
{"past_2d", "فَئِدْتُمَا"},
{"past_2fp", "فَئِدْتُنَّ"},
{"past_2fs", "فَئِدْتِ"},
{"past_2mp", "فَئِدْتُمْ"},
{"past_2ms", "فَئِدْتَ"},
{"past_3fd", "فَئِدَتَا"},
{"past_3fp", "فَئِدْنَ"},
{"past_3fs", "فَئِدَتْ"},
{"past_3md", "فَئِدَا"},
{"past_3mp", "فَئِدُوا"},
{"past_3ms", "فَئِدَ"},
},
},
{
label = "بَرِئَ (p237)", root = "برئ", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِبْرَآ"},
{"imp_2fp", "اِبْرَأْنَ"},
{"imp_2fs", "اِبْرَئِي"},
{"imp_2mp", "اِبْرَؤُوا"},
{"imp_2ms", "اِبْرَأْ"},
{"ind_1p", "نَبْرَأُ"},
{"ind_1s", "أَبْرَأُ"},
{"ind_2d", "تَبْرَآنِ"},
{"ind_2fp", "تَبْرَأْنَ"},
{"ind_2fs", "تَبْرَئِينَ"},
{"ind_2mp", "تَبْرَؤُونَ"},
{"ind_2ms", "تَبْرَأُ"},
{"ind_3fd", "تَبْرَآنِ"},
{"ind_3fp", "يَبْرَأْنَ"},
{"ind_3fs", "تَبْرَأُ"},
{"ind_3md", "يَبْرَآنِ"},
{"ind_3mp", "يَبْرَؤُونَ"},
{"ind_3ms", "يَبْرَأُ"},
{"past_1p", "بَرِئْنَا"},
{"past_1s", "بَرِئْتُ"},
{"past_2d", "بَرِئْتُمَا"},
{"past_2fp", "بَرِئْتُنَّ"},
{"past_2fs", "بَرِئْتِ"},
{"past_2mp", "بَرِئْتُمْ"},
{"past_2ms", "بَرِئْتَ"},
{"past_3fd", "بَرِئَتَا"},
{"past_3fp", "بَرِئْنَ"},
{"past_3fs", "بَرِئَتْ"},
{"past_3md", "بَرِئَا"},
{"past_3mp", "بَرِئُوا"},
{"past_3ms", "بَرِئَ"},
},
},
{
label = "عَيِيَ (p250)", root = "عيي", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِعْيَيَا"},
{"imp_2fp", "اِعْيَيْنَ"},
{"imp_2fs", "اِعْيَيْ"},
{"imp_2mp", "اِعْيَوْا"},
{"imp_2ms", "اِعْيَ"},
{"ind_1p", "نَعْيَا"},
{"ind_1s", "أَعْيَا"},
{"ind_2d", "تَعْيَيَانِ"},
{"ind_2fp", "تَعْيَيْنَ"},
{"ind_2fs", "تَعْيَيْنَ"},
{"ind_2mp", "تَعْيَوْنَ"},
{"ind_2ms", "تَعْيَا"},
{"ind_3fd", "تَعْيَيَانِ"},
{"ind_3fp", "يَعْيَيْنَ"},
{"ind_3fs", "تَعْيَا"},
{"ind_3md", "يَعْيَيَانِ"},
{"ind_3mp", "يَعْيَوْنَ"},
{"past_1p", "عَيِينَا"},
{"past_1s", "عَيِيتُ"},
{"past_2d", "عَيِيتُمَا"},
{"past_2fp", "عَيِيتُنَّ"},
{"past_2fs", "عَيِيتِ"},
{"past_2mp", "عَيِيتُمْ"},
{"past_2ms", "عَيِيتَ"},
{"past_3fd", "عَيِيَتَا"},
{"past_3fp", "عَيِينَ"},
{"past_3fs", "عَيِيَتْ"},
{"past_3md", "عَيِيَا"},
{"past_3mp", "عَيُوا"},
{"past_3ms", "عَيِيَ"},
},
},
{
label = "باطَأَ (p280)", root = "بطأ", wazn = "فاعل",
forms = {
{"imp_2d", "بَاطِئَا"},
{"imp_2fp", "بَاطِئْنَ"},
{"imp_2fs", "بَاطِئِي"},
{"imp_2mp", "بَاطِئُوا"},
{"imp_2ms", "بَاطِئْ"},
{"ind_1p", "نُبَاطِئُ"},
{"ind_1s", "أُبَاطِئُ"},
{"ind_2d", "تُبَاطِئَانِ"},
{"ind_2fp", "تُبَاطِئْنَ"},
{"ind_2fs", "تُبَاطِئِينَ"},
{"ind_2mp", "تُبَاطِئُونَ"},
{"ind_2ms", "تُبَاطِئُ"},
{"ind_3fd", "تُبَاطِئَانِ"},
{"ind_3fp", "يُبَاطِئْنَ"},
{"ind_3fs", "تُبَاطِئُ"},
{"ind_3md", "يُبَاطِئَانِ"},
{"ind_3mp", "يُبَاطِئُونَ"},
{"ind_3ms", "يُبَاطِئُ"},
{"past_1p", "بَاطَأْنَا"},
{"past_1s", "بَاطَأْتُ"},
{"past_2d", "بَاطَأْتُمَا"},
{"past_2fp", "بَاطَأْتُنَّ"},
{"past_2fs", "بَاطَأْتِ"},
{"past_2mp", "بَاطَأْتُمْ"},
{"past_2ms", "بَاطَأْتَ"},
{"past_3fd", "بَاطَأَتَا"},
{"past_3fp", "بَاطَأْنَ"},
{"past_3fs", "بَاطَأَتْ"},
{"past_3md", "بَاطَآ"},
{"past_3mp", "بَاطَؤُوا"},
{"past_3ms", "بَاطَأَ"},
},
},
{
label = "عايا (p287)", root = "عيي", wazn = "فاعل",
forms = {
{"imp_2d", "عَايِيَا"},
{"imp_2fp", "عَايِينَ"},
{"imp_2fs", "عَايِي"},
{"imp_2mp", "عَايُوا"},
{"imp_2ms", "عَايِ"},
{"ind_1p", "نُعَايِي"},
{"ind_1s", "أُعَايِي"},
{"ind_2d", "تُعَايِيَانِ"},
{"ind_2fp", "تُعَايِينَ"},
{"ind_2fs", "تُعَايِينَ"},
{"ind_2mp", "تُعَايُونَ"},
{"ind_2ms", "تُعَايِي"},
{"ind_3fd", "تُعَايِيَانِ"},
{"ind_3fp", "يُعَايِينَ"},
{"ind_3fs", "تُعَايِي"},
{"ind_3md", "يُعَايِيَانِ"},
{"ind_3mp", "يُعَايُونَ"},
{"ind_3ms", "يُعَايِي"},
{"past_1p", "عَايَيْنَا"},
{"past_1s", "عَايَيْتُ"},
{"past_2d", "عَايَيْتُمَا"},
{"past_2fp", "عَايَيْتُنَّ"},
{"past_2fs", "عَايَيْتِ"},
{"past_2mp", "عَايَيْتُمْ"},
{"past_2ms", "عَايَيْتَ"},
{"past_3fd", "عَايَتَا"},
{"past_3fp", "عَايَيْنَ"},
{"past_3fs", "عَايَتْ"},
{"past_3mp", "عَايَوْا"},
{"past_3ms", "عَايَا"},
},
},
}
9ob6dt8xj1edzi08wct941z5bsa9zbk
1159080
1159022
2026-09-10T19:34:08Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159080
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 8 من 16.
return {
{
label = "يَاسَرَ (p281)", root = "يسر", wazn = "فاعل",
forms = {
{"imp_2d", "يَاسِرَا"},
{"imp_2fp", "يَاسِرْنَ"},
{"imp_2fs", "يَاسِرِي"},
{"imp_2mp", "يَاسِرُوا"},
{"imp_2ms", "يَاسِرْ"},
{"ind_1p", "نُيَاسِرُ"},
{"ind_1s", "أُيَاسِرُ"},
{"ind_2d", "تُيَاسِرَانِ"},
{"ind_2fp", "تُيَاسِرْنَ"},
{"ind_2fs", "تُيَاسِرِينَ"},
{"ind_2mp", "تُيَاسِرُونَ"},
{"ind_2ms", "تُيَاسِرُ"},
{"ind_3fd", "تُيَاسِرَانِ"},
{"ind_3fp", "يُيَاسِرْنَ"},
{"ind_3fs", "تُيَاسِرُ"},
{"ind_3md", "يُيَاسِرَانِ"},
{"ind_3mp", "يُيَاسِرُونَ"},
{"ind_3ms", "يُيَاسِرُ"},
{"past_1p", "يَاسَرْنَا"},
{"past_1s", "يَاسَرْتُ"},
{"past_2d", "يَاسَرْتُمَا"},
{"past_2fp", "يَاسَرْتُنَّ"},
{"past_2fs", "يَاسَرْتِ"},
{"past_2mp", "يَاسَرْتُمْ"},
{"past_2ms", "يَاسَرْتَ"},
{"past_3fd", "يَاسَرَتَا"},
{"past_3fp", "يَاسَرْنَ"},
{"past_3fs", "يَاسَرَتْ"},
{"past_3md", "يَاسَرَا"},
{"past_3mp", "يَاسَرُوا"},
{"past_3ms", "يَاسَرَ"},
},
},
{
label = "جاوَبَ (p282)", root = "جوب", wazn = "فاعل",
forms = {
{"imp_2d", "جَاوِبَا"},
{"imp_2fp", "جَاوِبْنَ"},
{"imp_2fs", "جَاوِبِي"},
{"imp_2mp", "جَاوِبُوا"},
{"imp_2ms", "جَاوِبْ"},
{"ind_1p", "نُجَاوِبُ"},
{"ind_1s", "أُجَاوِبُ"},
{"ind_2d", "تُجَاوِبَانِ"},
{"ind_2fp", "تُجَاوِبْنَ"},
{"ind_2fs", "تُجَاوِبِينَ"},
{"ind_2mp", "تُجَاوِبُونَ"},
{"ind_2ms", "تُجَاوِبُ"},
{"ind_3fd", "تُجَاوِبَانِ"},
{"ind_3fp", "يُجَاوِبْنَ"},
{"ind_3fs", "تُجَاوِبُ"},
{"ind_3md", "يُجَاوِبَانِ"},
{"ind_3mp", "يُجَاوِبُونَ"},
{"ind_3ms", "يُجَاوِبُ"},
{"past_1p", "جَاوَبْنَا"},
{"past_1s", "جَاوَبْتُ"},
{"past_2d", "جَاوَبْتُمَا"},
{"past_2fp", "جَاوَبْتُنَّ"},
{"past_2fs", "جَاوَبْتِ"},
{"past_2mp", "جَاوَبْتُمْ"},
{"past_2ms", "جَاوَبْتَ"},
{"past_3fd", "جَاوَبَتَا"},
{"past_3fp", "جَاوَبْنَ"},
{"past_3fs", "جَاوَبَتْ"},
{"past_3md", "جَاوَبَا"},
{"past_3mp", "جَاوَبُوا"},
{"past_3ms", "جَاوَبَ"},
},
},
{
label = "بايَعَ (p282)", root = "بيع", wazn = "فاعل",
forms = {
{"imp_2d", "بَايِعَا"},
{"imp_2fp", "بَايِعْنَ"},
{"imp_2fs", "بَايِعِي"},
{"imp_2mp", "بَايِعُوا"},
{"imp_2ms", "بَايِعْ"},
{"ind_1p", "نُبَايِعُ"},
{"ind_1s", "أُبَايِعُ"},
{"ind_2d", "تُبَايِعَانِ"},
{"ind_2fp", "تُبَايِعْنَ"},
{"ind_2fs", "تُبَايِعِينَ"},
{"ind_2mp", "تُبَايِعُونَ"},
{"ind_2ms", "تُبَايِعُ"},
{"ind_3fd", "تُبَايِعَانِ"},
{"ind_3fp", "يُبَايِعْنَ"},
{"ind_3fs", "تُبَايِعُ"},
{"ind_3md", "يُبَايِعَانِ"},
{"ind_3mp", "يُبَايِعُونَ"},
{"ind_3ms", "يُبَايِعُ"},
{"past_1p", "بَايَعْنَا"},
{"past_1s", "بَايَعْتُ"},
{"past_2d", "بَايَعْتُمَا"},
{"past_2fp", "بَايَعْتُنَّ"},
{"past_2fs", "بَايَعْتِ"},
{"past_2mp", "بَايَعْتُمْ"},
{"past_2ms", "بَايَعْتَ"},
{"past_3fd", "بَايَعَتَا"},
{"past_3fp", "بَايَعْنَ"},
{"past_3fs", "بَايَعَتْ"},
{"past_3md", "بَايَعَا"},
{"past_3mp", "بَايَعُوا"},
{"past_3ms", "بَايَعَ"},
},
},
{
label = "داوَى (p287)", root = "دوي", wazn = "فاعل",
forms = {
{"imp_2d", "دَاوِيَا"},
{"imp_2fp", "دَاوِينَ"},
{"imp_2fs", "دَاوِي"},
{"imp_2mp", "دَاوُوا"},
{"imp_2ms", "دَاوِ"},
{"ind_1p", "نُدَاوِي"},
{"ind_1s", "أُدَاوِي"},
{"ind_2d", "تُدَاوِيَانِ"},
{"ind_2fp", "تُدَاوِينَ"},
{"ind_2fs", "تُدَاوِينَ"},
{"ind_2mp", "تُدَاوُونَ"},
{"ind_2ms", "تُدَاوِي"},
{"ind_3fd", "تُدَاوِيَانِ"},
{"ind_3fp", "يُدَاوِينَ"},
{"ind_3fs", "تُدَاوِي"},
{"ind_3md", "يُدَاوِيَانِ"},
{"ind_3mp", "يُدَاوُونَ"},
{"ind_3ms", "يُدَاوِي"},
{"past_1p", "دَاوَيْنَا"},
{"past_1s", "دَاوَيْتُ"},
{"past_2d", "دَاوَيْتُمَا"},
{"past_2fp", "دَاوَيْتُنَّ"},
{"past_2fs", "دَاوَيْتِ"},
{"past_2mp", "دَاوَيْتُمْ"},
{"past_2ms", "دَاوَيْتَ"},
{"past_3fd", "دَاوَتَا"},
{"past_3fp", "دَاوَيْنَ"},
{"past_3fs", "دَاوَتْ"},
{"past_3md", "دَاوَيَا"},
{"past_3mp", "دَاوَوْا"},
{"past_3ms", "دَاوَى"},
},
},
{
label = "أَثْبَتَ (p290)", root = "ثبت", wazn = "أفعل",
forms = {
{"imp_2d", "أَثْبِتَا"},
{"imp_2fp", "أَثْبِتْنَ"},
{"imp_2fs", "أَثْبِتِي"},
{"imp_2mp", "أَثْبِتُوا"},
{"imp_2ms", "أَثْبِتْ"},
{"ind_1p", "نُثْبِتُ"},
{"ind_1s", "أُثْبِتُ"},
{"ind_2d", "تُثْبِتَانِ"},
{"ind_2fp", "تُثْبِتْنَ"},
{"ind_2fs", "تُثْبِتِينَ"},
{"ind_2mp", "تُثْبِتُونَ"},
{"ind_2ms", "تُثْبِتُ"},
{"ind_3fd", "تُثْبِتَانِ"},
{"ind_3fp", "يُثْبِتْنَ"},
{"ind_3fs", "تُثْبِتُ"},
{"ind_3md", "يُثْبِتَانِ"},
{"ind_3mp", "يُثْبِتُونَ"},
{"ind_3ms", "يُثْبِتُ"},
{"past_1p", "أَثْبَتْنَا"},
{"past_1s", "أَثْبَتُّ"},
{"past_2d", "أَثْبَتُّمَا"},
{"past_2fp", "أَثْبَتُّنَّ"},
{"past_2fs", "أَثْبَتِّ"},
{"past_2mp", "أَثْبَتُّمْ"},
{"past_2ms", "أَثْبَتَّ"},
{"past_3fd", "أَثْبَتَتَا"},
{"past_3fp", "أَثْبَتْنَ"},
{"past_3fs", "أَثْبَتَتْ"},
{"past_3md", "أَثْبَتَا"},
{"past_3mp", "أَثْبَتُوا"},
{"past_3ms", "أَثْبَتَ"},
},
},
{
label = "أَعْرَبَ (p290)", root = "عرب", wazn = "أفعل",
forms = {
{"imp_2d", "أَعْرِبَا"},
{"imp_2fp", "أَعْرِبْنَ"},
{"imp_2fs", "أَعْرِبِي"},
{"imp_2mp", "أَعْرِبُوا"},
{"imp_2ms", "أَعْرِبْ"},
{"ind_1p", "نُعْرِبُ"},
{"ind_1s", "أُعْرِبُ"},
{"ind_2d", "تُعْرِبَانِ"},
{"ind_2fp", "تُعْرِبْنَ"},
{"ind_2fs", "تُعْرِبِينَ"},
{"ind_2mp", "تُعْرِبُونَ"},
{"ind_2ms", "تُعْرِبُ"},
{"ind_3fd", "تُعْرِبَانِ"},
{"ind_3fp", "يُعْرِبْنَ"},
{"ind_3fs", "تُعْرِبُ"},
{"ind_3md", "يُعْرِبَانِ"},
{"ind_3mp", "يُعْرِبُونَ"},
{"ind_3ms", "يُعْرِبُ"},
{"past_1p", "أَعْرَبْنَا"},
{"past_1s", "أَعْرَبْتُ"},
{"past_2d", "أَعْرَبْتُمَا"},
{"past_2fp", "أَعْرَبْتُنَّ"},
{"past_2fs", "أَعْرَبْتِ"},
{"past_2mp", "أَعْرَبْتُمْ"},
{"past_2ms", "أَعْرَبْتَ"},
{"past_3fd", "أَعْرَبَتَا"},
{"past_3fp", "أَعْرَبْنَ"},
{"past_3fs", "أَعْرَبَتْ"},
{"past_3md", "أَعْرَبَا"},
{"past_3mp", "أَعْرَبُوا"},
{"past_3ms", "أَعْرَبَ"},
},
},
{
label = "أَحَبَّ (p291)", root = "حبب", wazn = "أفعل",
forms = {
{"imp_2d", "أَحِبَّا"},
{"imp_2fp", "أَحْبِبْنَ"},
{"imp_2fs", "أَحِبِّي"},
{"imp_2mp", "أَحِبُّوا"},
{"imp_2ms", "أَحْبِبْ"},
{"ind_1p", "نُحِبُّ"},
{"ind_1s", "أُحِبُّ"},
{"ind_2d", "تُحِبَّانِ"},
{"ind_2fp", "تُحْبِبْنَ"},
{"ind_2fs", "تُحِبِّينَ"},
{"ind_2mp", "تُحِبُّونَ"},
{"ind_2ms", "تُحِبُّ"},
{"ind_3fd", "تُحِبَّانِ"},
{"ind_3fp", "يُحْبِبْنَ"},
{"ind_3fs", "تُحِبُّ"},
{"ind_3md", "يُحِبَّانِ"},
{"ind_3mp", "يُحِبُّونَ"},
{"ind_3ms", "يُحِبُّ"},
{"past_1p", "أَحْبَبْنَا"},
{"past_1s", "أَحْبَبْتُ"},
{"past_2d", "أَحْبَبْتُمَا"},
{"past_2fp", "أَحْبَبْتُنَّ"},
{"past_2fs", "أَحْبَبْتِ"},
{"past_2mp", "أَحْبَبْتُمْ"},
{"past_2ms", "أَحْبَبْتَ"},
{"past_3fd", "أَحَبَّتَا"},
{"past_3fp", "أَحْبَبْنَ"},
{"past_3fs", "أَحَبَّتْ"},
{"past_3md", "أَحَبَّا"},
{"past_3mp", "أَحَبُّوا"},
{"past_3ms", "أَحَبَّ"},
},
},
{
label = "أَرَقَّ (p291)", root = "رقق", wazn = "أفعل",
forms = {
{"imp_2d", "أَرِقَّا"},
{"imp_2fp", "أَرْقِقْنَ"},
{"imp_2fs", "أَرِقِّي"},
{"imp_2mp", "أَرِقُّوا"},
{"imp_2ms", "أَرْقِقْ"},
{"ind_1p", "نُرِقُّ"},
{"ind_1s", "أُرِقُّ"},
{"ind_2d", "تُرِقَّانِ"},
{"ind_2fp", "تُرْقِقْنَ"},
{"ind_2fs", "تُرِقِّينَ"},
{"ind_2mp", "تُرِقُّونَ"},
{"ind_2ms", "تُرِقُّ"},
{"ind_3fd", "تُرِقَّانِ"},
{"ind_3fp", "يُرْقِقْنَ"},
{"ind_3fs", "تُرِقُّ"},
{"ind_3md", "يُرِقَّانِ"},
{"ind_3mp", "يُرِقُّونَ"},
{"ind_3ms", "يُرِقُّ"},
{"past_1p", "أَرْقَقْنَا"},
{"past_1s", "أَرْقَقْتُ"},
{"past_2d", "أَرْقَقْتُمَا"},
{"past_2fp", "أَرْقَقْتُنَّ"},
{"past_2fs", "أَرْقَقْتِ"},
{"past_2mp", "أَرْقَقْتُمْ"},
{"past_2ms", "أَرْقَقْتَ"},
{"past_3fd", "أَرَقَّتَا"},
{"past_3fp", "أَرْقَقْنَ"},
{"past_3fs", "أَرَقَّتْ"},
{"past_3md", "أَرَقَّا"},
{"past_3mp", "أَرَقُّوا"},
{"past_3ms", "أَرَقَّ"},
},
},
{
label = "أَخْطَأَ (p294)", root = "خطأ", wazn = "أفعل",
forms = {
{"imp_2d", "أَخْطِئَا"},
{"imp_2fp", "أَخْطِئْنَ"},
{"imp_2fs", "أَخْطِئِي"},
{"imp_2mp", "أَخْطِئُوا"},
{"imp_2ms", "أَخْطِئْ"},
{"ind_1p", "نُخْطِئُ"},
{"ind_1s", "أُخْطِئُ"},
{"ind_2d", "تُخْطِئَانِ"},
{"ind_2fp", "تُخْطِئْنَ"},
{"ind_2fs", "تُخْطِئِينَ"},
{"ind_2mp", "تُخْطِئُونَ"},
{"ind_2ms", "تُخْطِئُ"},
{"ind_3fd", "تُخْطِئَانِ"},
{"ind_3fp", "يُخْطِئْنَ"},
{"ind_3fs", "تُخْطِئُ"},
{"ind_3md", "يُخْطِئَانِ"},
{"ind_3mp", "يُخْطِئُونَ"},
{"ind_3ms", "يُخْطِئُ"},
{"past_1p", "أَخْطَأْنَا"},
{"past_1s", "أَخْطَأْتُ"},
{"past_2d", "أَخْطَأْتُمَا"},
{"past_2fp", "أَخْطَأْتُنَّ"},
{"past_2fs", "أَخْطَأْتِ"},
{"past_2mp", "أَخْطَأْتُمْ"},
{"past_2ms", "أَخْطَأْتَ"},
{"past_3fd", "أَخْطَأَتَا"},
{"past_3fp", "أَخْطَأْنَ"},
{"past_3fs", "أَخْطَأَتْ"},
{"past_3md", "أَخْطَآ"},
{"past_3mp", "أَخْطَؤُوا"},
{"past_3ms", "أَخْطَأَ"},
},
},
{
label = "أَنْبَأَ (p294)", root = "نبأ", wazn = "أفعل",
forms = {
{"imp_2d", "أَنْبِئَا"},
{"imp_2fp", "أَنْبِئْنَ"},
{"imp_2fs", "أَنْبِئِي"},
{"imp_2mp", "أَنْبِئُوا"},
{"imp_2ms", "أَنْبِئْ"},
{"ind_1p", "نُنْبِئُ"},
{"ind_1s", "أُنْبِئُ"},
{"ind_2d", "تُنْبِئَانِ"},
{"ind_2fp", "تُنْبِئْنَ"},
{"ind_2fs", "تُنْبِئِينَ"},
{"ind_2mp", "تُنْبِئُونَ"},
{"ind_2ms", "تُنْبِئُ"},
{"ind_3fd", "تُنْبِئَانِ"},
{"ind_3fp", "يُنْبِئْنَ"},
{"ind_3fs", "تُنْبِئُ"},
{"ind_3md", "يُنْبِئَانِ"},
{"ind_3mp", "يُنْبِئُونَ"},
{"ind_3ms", "يُنْبِئُ"},
{"past_1p", "أَنْبَأْنَا"},
{"past_1s", "أَنْبَأْتُ"},
{"past_2d", "أَنْبَأْتُمَا"},
{"past_2fp", "أَنْبَأْتُنَّ"},
{"past_2fs", "أَنْبَأْتِ"},
{"past_2mp", "أَنْبَأْتُمْ"},
{"past_2ms", "أَنْبَأْتَ"},
{"past_3fd", "أَنْبَأَتَا"},
{"past_3fp", "أَنْبَأْنَ"},
{"past_3fs", "أَنْبَأَتْ"},
{"past_3md", "أَنْبَآ"},
{"past_3mp", "أَنْبَؤُوا"},
{"past_3ms", "أَنْبَأَ"},
},
},
{
label = "أَوْحَشَ (p295)", root = "وحش", wazn = "أفعل",
forms = {
{"imp_2d", "أَوْحِشَا"},
{"imp_2fp", "أَوْحِشْنَ"},
{"imp_2fs", "أَوْحِشِي"},
{"imp_2mp", "أَوْحِشُوا"},
{"imp_2ms", "أَوْحِشْ"},
{"ind_1p", "نُوحِشُ"},
{"ind_1s", "أُوحِشُ"},
{"ind_2d", "تُوحِشَانِ"},
{"ind_2fp", "تُوحِشْنَ"},
{"ind_2fs", "تُوحِشِينَ"},
{"ind_2mp", "تُوحِشُونَ"},
{"ind_2ms", "تُوحِشُ"},
{"ind_3fd", "تُوحِشَانِ"},
{"ind_3fp", "يُوحِشْنَ"},
{"ind_3fs", "تُوحِشُ"},
{"ind_3md", "يُوحِشَانِ"},
{"ind_3mp", "يُوحِشُونَ"},
{"ind_3ms", "يُوحِشُ"},
{"past_1p", "أَوْحَشْنَا"},
{"past_1s", "أَوْحَشْتُ"},
{"past_2d", "أَوْحَشْتُمَا"},
{"past_2fp", "أَوْحَشْتُنَّ"},
{"past_2fs", "أَوْحَشْتِ"},
{"past_2mp", "أَوْحَشْتُمْ"},
{"past_2ms", "أَوْحَشْتَ"},
{"past_3fd", "أَوْحَشَتَا"},
{"past_3fp", "أَوْحَشْنَ"},
{"past_3fs", "أَوْحَشَتْ"},
{"past_3md", "أَوْحَشَا"},
{"past_3mp", "أَوْحَشُوا"},
{"past_3ms", "أَوْحَشَ"},
},
},
{
label = "أَيْقَظَ (p295)", root = "يقظ", wazn = "أفعل",
forms = {
{"imp_2d", "أَيْقِظَا"},
{"imp_2fp", "أَيْقِظْنَ"},
{"imp_2fs", "أَيْقِظِي"},
{"imp_2mp", "أَيْقِظُوا"},
{"imp_2ms", "أَيْقِظْ"},
{"ind_1p", "نُوقِظُ"},
{"ind_1s", "أُوقِظُ"},
{"ind_2d", "تُوقِظَانِ"},
{"ind_2fp", "تُوقِظْنَ"},
{"ind_2fs", "تُوقِظِينَ"},
{"ind_2mp", "تُوقِظُونَ"},
{"ind_2ms", "تُوقِظُ"},
{"ind_3fd", "تُوقِظَانِ"},
{"ind_3fp", "يُوقِظْنَ"},
{"ind_3fs", "تُوقِظُ"},
{"ind_3md", "يُوقِظَانِ"},
{"ind_3mp", "يُوقِظُونَ"},
{"ind_3ms", "يُوقِظُ"},
{"past_1p", "أَيْقَظْنَا"},
{"past_1s", "أَيْقَظْتُ"},
{"past_2d", "أَيْقَظْتُمَا"},
{"past_2fp", "أَيْقَظْتُنَّ"},
{"past_2fs", "أَيْقَظْتِ"},
{"past_2mp", "أَيْقَظْتُمْ"},
{"past_2ms", "أَيْقَظْتَ"},
{"past_3fd", "أَيْقَظَتَا"},
{"past_3fp", "أَيْقَظْنَ"},
{"past_3fs", "أَيْقَظَتْ"},
{"past_3md", "أَيْقَظَا"},
{"past_3mp", "أَيْقَظُوا"},
{"past_3ms", "أَيْقَظَ"},
},
},
{
label = "أَهْوَى (p302)", root = "هوي", wazn = "أفعل",
forms = {
{"imp_2d", "أَهْوِيَا"},
{"imp_2fp", "أَهْوِينَ"},
{"imp_2fs", "أَهْوِي"},
{"imp_2mp", "أَهْوُوا"},
{"imp_2ms", "أَهْوِ"},
{"ind_1p", "نُهْوِي"},
{"ind_1s", "أُهْوِي"},
{"ind_2d", "تُهْوِيَانِ"},
{"ind_2fp", "تُهْوِينَ"},
{"ind_2fs", "تُهْوِينَ"},
{"ind_2mp", "تُهْوُونَ"},
{"ind_2ms", "تُهْوِي"},
{"ind_3fd", "تُهْوِيَانِ"},
{"ind_3fp", "يُهْوِينَ"},
{"ind_3fs", "تُهْوِي"},
{"ind_3md", "يُهْوِيَانِ"},
{"ind_3mp", "يُهْوُونَ"},
{"ind_3ms", "يُهْوِي"},
{"past_1p", "أَهْوَيْنَا"},
{"past_1s", "أَهْوَيْتُ"},
{"past_2d", "أَهْوَيْتُمَا"},
{"past_2fp", "أَهْوَيْتُنَّ"},
{"past_2fs", "أَهْوَيْتِ"},
{"past_2mp", "أَهْوَيْتُمْ"},
{"past_2ms", "أَهْوَيْتَ"},
{"past_3fd", "أَهْوَتَا"},
{"past_3fp", "أَهْوَيْنَ"},
{"past_3fs", "أَهْوَتْ"},
{"past_3md", "أَهْوَيَا"},
{"past_3mp", "أَهْوَوْا"},
{"past_3ms", "أَهْوَى"},
},
},
{
label = "تَكَأَّدَ (p309)", root = "كأد", wazn = "تفعّل",
forms = {
{"imp_2d", "تَكَأَّدَا"},
{"imp_2fp", "تَكَأَّدْنَ"},
{"imp_2fs", "تَكَأَّدِي"},
{"imp_2mp", "تَكَأَّدُوا"},
{"imp_2ms", "تَكَأَّدْ"},
{"ind_1p", "نَتَكَأَّدُ"},
{"ind_1s", "أَتَكَأَّدُ"},
{"ind_2d", "تَتَكَأَّدَانِ"},
{"ind_2fp", "تَتَكَأَّدْنَ"},
{"ind_2fs", "تَتَكَأَّدِينَ"},
{"ind_2mp", "تَتَكَأَّدُونَ"},
{"ind_2ms", "تَتَكَأَّدُ"},
{"ind_3fd", "تَتَكَأَّدَانِ"},
{"ind_3fp", "يَتَكَأَّدْنَ"},
{"ind_3fs", "تَتَكَأَّدُ"},
{"ind_3md", "يَتَكَأَّدَانِ"},
{"ind_3mp", "يَتَكَأَّدُونَ"},
{"ind_3ms", "يَتَكَأَّدُ"},
{"past_1p", "تَكَأَّدْنَا"},
{"past_1s", "تَكَأَّدْتُ"},
{"past_2d", "تَكَأَّدْتُمَا"},
{"past_2fp", "تَكَأَّدْتُنَّ"},
{"past_2fs", "تَكَأَّدْتِ"},
{"past_2mp", "تَكَأَّدْتُمْ"},
{"past_2ms", "تَكَأَّدْتَ"},
{"past_3fd", "تَكَأَّدَتَا"},
{"past_3fp", "تَكَأَّدْنَ"},
{"past_3fs", "تَكَأَّدَتْ"},
{"past_3md", "تَكَأَّدَا"},
{"past_3mp", "تَكَأَّدُوا"},
{"past_3ms", "تَكَأَّدَ"},
},
},
{
label = "تَسَوَّلَ (p309)", root = "سول", wazn = "تفعّل",
forms = {
{"imp_2d", "تَسَوَّلَا"},
{"imp_2fp", "تَسَوَّلْنَ"},
{"imp_2fs", "تَسَوَّلِي"},
{"imp_2mp", "تَسَوَّلُوا"},
{"imp_2ms", "تَسَوَّلْ"},
{"ind_1p", "نَتَسَوَّلُ"},
{"ind_1s", "أَتَسَوَّلُ"},
{"ind_2d", "تَتَسَوَّلَانِ"},
{"ind_2fp", "تَتَسَوَّلْنَ"},
{"ind_2fs", "تَتَسَوَّلِينَ"},
{"ind_2mp", "تَتَسَوَّلُونَ"},
{"ind_2ms", "تَتَسَوَّلُ"},
{"ind_3fd", "تَتَسَوَّلَانِ"},
{"ind_3fp", "يَتَسَوَّلْنَ"},
{"ind_3fs", "تَتَسَوَّلُ"},
{"ind_3md", "يَتَسَوَّلَانِ"},
{"ind_3mp", "يَتَسَوَّلُونَ"},
{"ind_3ms", "يَتَسَوَّلُ"},
{"past_1p", "تَسَوَّلْنَا"},
{"past_1s", "تَسَوَّلْتُ"},
{"past_2d", "تَسَوَّلْتُمَا"},
{"past_2fp", "تَسَوَّلْتُنَّ"},
{"past_2fs", "تَسَوَّلْتِ"},
{"past_2mp", "تَسَوَّلْتُمْ"},
{"past_2ms", "تَسَوَّلْتَ"},
{"past_3fd", "تَسَوَّلَتَا"},
{"past_3fp", "تَسَوَّلْنَ"},
{"past_3fs", "تَسَوَّلَتْ"},
{"past_3md", "تَسَوَّلَا"},
{"past_3mp", "تَسَوَّلُوا"},
{"past_3ms", "تَسَوَّلَ"},
},
},
{
label = "تَراصَّ (p323)", root = "رصص", wazn = "تفاعل",
forms = {
{"imp_2d", "تَرَاصَّا"},
{"imp_2fp", "تَرَاصَصْنَ"},
{"imp_2fs", "تَرَاصِّي"},
{"imp_2mp", "تَرَاصُّوا"},
{"imp_2ms", "تَرَاصَصْ"},
{"ind_1p", "نَتَرَاصُّ"},
{"ind_1s", "أَتَرَاصُّ"},
{"ind_2d", "تَتَرَاصَّانِ"},
{"ind_2fp", "تَتَرَاصَصْنَ"},
{"ind_2fs", "تَتَرَاصِّينَ"},
{"ind_2mp", "تَتَرَاصُّونَ"},
{"ind_2ms", "تَتَرَاصُّ"},
{"ind_3fd", "تَتَرَاصَّانِ"},
{"ind_3fp", "يَتَرَاصَصْنَ"},
{"ind_3fs", "تَتَرَاصُّ"},
{"ind_3md", "يَتَرَاصَّانِ"},
{"ind_3mp", "يَتَرَاصُّونَ"},
{"ind_3ms", "يَتَرَاصُّ"},
{"past_1p", "تَرَاصَصْنَا"},
{"past_1s", "تَرَاصَصْتُ"},
{"past_2d", "تَرَاصَصْتُمَا"},
{"past_2fp", "تَرَاصَصْتُنَّ"},
{"past_2fs", "تَرَاصَصْتِ"},
{"past_2mp", "تَرَاصَصْتُمْ"},
{"past_2ms", "تَرَاصَصْتَ"},
{"past_3fd", "تَرَاصَّتَا"},
{"past_3fp", "تَرَاصَصْنَ"},
{"past_3fs", "تَرَاصَّتْ"},
{"past_3md", "تَرَاصَّا"},
{"past_3mp", "تَرَاصُّوا"},
{"past_3ms", "تَرَاصَّ"},
},
},
{
label = "تَمارَّ (p323)", root = "مرر", wazn = "تفاعل",
forms = {
{"imp_2d", "تَمَارَّا"},
{"imp_2fp", "تَمَارَرْنَ"},
{"imp_2fs", "تَمَارِّي"},
{"imp_2mp", "تَمَارُّوا"},
{"imp_2ms", "تَمَارَرْ"},
{"ind_1p", "نَتَمَارُّ"},
{"ind_1s", "أَتَمَارُّ"},
{"ind_2d", "تَتَمَارَّانِ"},
{"ind_2fp", "تَتَمَارَرْنَ"},
{"ind_2fs", "تَتَمَارِّينَ"},
{"ind_2mp", "تَتَمَارُّونَ"},
{"ind_2ms", "تَتَمَارُّ"},
{"ind_3fd", "تَتَمَارَّانِ"},
{"ind_3fp", "يَتَمَارَرْنَ"},
{"ind_3fs", "تَتَمَارُّ"},
{"ind_3md", "يَتَمَارَّانِ"},
{"ind_3mp", "يَتَمَارُّونَ"},
{"ind_3ms", "يَتَمَارُّ"},
{"past_1p", "تَمَارَرْنَا"},
{"past_1s", "تَمَارَرْتُ"},
{"past_2d", "تَمَارَرْتُمَا"},
{"past_2fp", "تَمَارَرْتُنَّ"},
{"past_2fs", "تَمَارَرْتِ"},
{"past_2mp", "تَمَارَرْتُمْ"},
{"past_2ms", "تَمَارَرْتَ"},
{"past_3fd", "تَمَارَّتَا"},
{"past_3fp", "تَمَارَرْنَ"},
{"past_3fs", "تَمَارَّتْ"},
{"past_3md", "تَمَارَّا"},
{"past_3mp", "تَمَارُّوا"},
{"past_3ms", "تَمَارَّ"},
},
},
{
label = "تَخاطَأَ (p327)", root = "خطأ", wazn = "تفاعل",
forms = {
{"imp_2d", "تَخَاطَآ"},
{"imp_2fp", "تَخَاطَأْنَ"},
{"imp_2fs", "تَخَاطَئِي"},
{"imp_2mp", "تَخَاطَؤُوا"},
{"imp_2ms", "تَخَاطَأْ"},
{"ind_1p", "نَتَخَاطَأُ"},
{"ind_1s", "أَتَخَاطَأُ"},
{"ind_2d", "تَتَخَاطَآنِ"},
{"ind_2fp", "تَتَخَاطَأْنَ"},
{"ind_2fs", "تَتَخَاطَئِينَ"},
{"ind_2mp", "تَتَخَاطَؤُونَ"},
{"ind_2ms", "تَتَخَاطَأُ"},
{"ind_3fd", "تَتَخَاطَآنِ"},
{"ind_3fp", "يَتَخَاطَأْنَ"},
{"ind_3fs", "تَتَخَاطَأُ"},
{"ind_3md", "يَتَخَاطَآنِ"},
{"ind_3mp", "يَتَخَاطَؤُونَ"},
{"ind_3ms", "يَتَخَاطَأُ"},
{"past_1p", "تَخَاطَأْنَا"},
{"past_1s", "تَخَاطَأْتُ"},
{"past_2d", "تَخَاطَأْتُمَا"},
{"past_2fp", "تَخَاطَأْتُنَّ"},
{"past_2fs", "تَخَاطَأْتِ"},
{"past_2mp", "تَخَاطَأْتُمْ"},
{"past_2ms", "تَخَاطَأْتَ"},
{"past_3fd", "تَخَاطَأَتَا"},
{"past_3fp", "تَخَاطَأْنَ"},
{"past_3fs", "تَخَاطَأَتْ"},
{"past_3md", "تَخَاطَآ"},
{"past_3mp", "تَخَاطَؤُوا"},
{"past_3ms", "تَخَاطَأَ"},
},
},
{
label = "تَرافَأَ (p327)", root = "رفأ", wazn = "تفاعل",
forms = {
{"imp_2d", "تَرَافَآ"},
{"imp_2fp", "تَرَافَأْنَ"},
{"imp_2fs", "تَرَافَئِي"},
{"imp_2mp", "تَرَافَؤُوا"},
{"imp_2ms", "تَرَافَأْ"},
{"ind_1p", "نَتَرَافَأُ"},
{"ind_1s", "أَتَرَافَأُ"},
{"ind_2d", "تَتَرَافَآنِ"},
{"ind_2fp", "تَتَرَافَأْنَ"},
{"ind_2fs", "تَتَرَافَئِينَ"},
{"ind_2mp", "تَتَرَافَؤُونَ"},
{"ind_2ms", "تَتَرَافَأُ"},
{"ind_3fd", "تَتَرَافَآنِ"},
{"ind_3fp", "يَتَرَافَأْنَ"},
{"ind_3fs", "تَتَرَافَأُ"},
{"ind_3md", "يَتَرَافَآنِ"},
{"ind_3mp", "يَتَرَافَؤُونَ"},
{"ind_3ms", "يَتَرَافَأُ"},
{"past_1p", "تَرَافَأْنَا"},
{"past_1s", "تَرَافَأْتُ"},
{"past_2d", "تَرَافَأْتُمَا"},
{"past_2fp", "تَرَافَأْتُنَّ"},
{"past_2fs", "تَرَافَأْتِ"},
{"past_2mp", "تَرَافَأْتُمْ"},
{"past_2ms", "تَرَافَأْتَ"},
{"past_3fd", "تَرَافَأَتَا"},
{"past_3fp", "تَرَافَأْنَ"},
{"past_3fs", "تَرَافَأَتْ"},
{"past_3md", "تَرَافَآ"},
{"past_3mp", "تَرَافَؤُوا"},
{"past_3ms", "تَرَافَأَ"},
},
},
{
label = "تَوَارَدَ (p329)", root = "ورد", wazn = "تفاعل",
forms = {
{"imp_2d", "تَوَارَدَا"},
{"imp_2fp", "تَوَارَدْنَ"},
{"imp_2fs", "تَوَارَدِي"},
{"imp_2mp", "تَوَارَدُوا"},
{"imp_2ms", "تَوَارَدْ"},
{"ind_1p", "نَتَوَارَدُ"},
{"ind_1s", "أَتَوَارَدُ"},
{"ind_2d", "تَتَوَارَدَانِ"},
{"ind_2fp", "تَتَوَارَدْنَ"},
{"ind_2fs", "تَتَوَارَدِينَ"},
{"ind_2mp", "تَتَوَارَدُونَ"},
{"ind_2ms", "تَتَوَارَدُ"},
{"ind_3fd", "تَتَوَارَدَانِ"},
{"ind_3fp", "يَتَوَارَدْنَ"},
{"ind_3fs", "تَتَوَارَدُ"},
{"ind_3md", "يَتَوَارَدَانِ"},
{"ind_3mp", "يَتَوَارَدُونَ"},
{"ind_3ms", "يَتَوَارَدُ"},
{"past_1p", "تَوَارَدْنَا"},
{"past_1s", "تَوَارَدْتُ"},
{"past_2d", "تَوَارَدْتُمَا"},
{"past_2fp", "تَوَارَدْتُنَّ"},
{"past_2fs", "تَوَارَدْتِ"},
{"past_2mp", "تَوَارَدْتُمْ"},
{"past_2ms", "تَوَارَدْتَ"},
{"past_3fd", "تَوَارَدَتَا"},
{"past_3fp", "تَوَارَدْنَ"},
{"past_3fs", "تَوَارَدَتْ"},
{"past_3md", "تَوَارَدَا"},
{"past_3mp", "تَوَارَدُوا"},
{"past_3ms", "تَوَارَدَ"},
},
},
{
label = "تَيَامَنَ (p329)", root = "يمن", wazn = "تفاعل",
forms = {
{"imp_2d", "تَيَامَنَا"},
{"imp_2fp", "تَيَامَنَّ"},
{"imp_2fs", "تَيَامَنِي"},
{"imp_2mp", "تَيَامَنُوا"},
{"imp_2ms", "تَيَامَنْ"},
{"ind_1p", "نَتَيَامَنُ"},
{"ind_1s", "أَتَيَامَنُ"},
{"ind_2d", "تَتَيَامَنَانِ"},
{"ind_2fp", "تَتَيَامَنَّ"},
{"ind_2fs", "تَتَيَامَنِينَ"},
{"ind_2mp", "تَتَيَامَنُونَ"},
{"ind_2ms", "تَتَيَامَنُ"},
{"ind_3fd", "تَتَيَامَنَانِ"},
{"ind_3fp", "يَتَيَامَنَّ"},
{"ind_3fs", "تَتَيَامَنُ"},
{"ind_3md", "يَتَيَامَنَانِ"},
{"ind_3mp", "يَتَيَامَنُونَ"},
{"ind_3ms", "يَتَيَامَنُ"},
{"past_1p", "تَيَامَنَّا"},
{"past_1s", "تَيَامَنْتُ"},
{"past_2d", "تَيَامَنْتُمَا"},
{"past_2fp", "تَيَامَنْتُنَّ"},
{"past_2fs", "تَيَامَنْتِ"},
{"past_2mp", "تَيَامَنْتُمْ"},
{"past_2ms", "تَيَامَنْتَ"},
{"past_3fd", "تَيَامَنَتَا"},
{"past_3fp", "تَيَامَنَّ"},
{"past_3fs", "تَيَامَنَتْ"},
{"past_3md", "تَيَامَنَا"},
{"past_3mp", "تَيَامَنُوا"},
{"past_3ms", "تَيَامَنَ"},
},
},
{
label = "تَداوَلَ (p330)", root = "دول", wazn = "تفاعل",
forms = {
{"imp_2d", "تَدَاوَلَا"},
{"imp_2fp", "تَدَاوَلْنَ"},
{"imp_2fs", "تَدَاوَلِي"},
{"imp_2mp", "تَدَاوَلُوا"},
{"imp_2ms", "تَدَاوَلْ"},
{"ind_1p", "نَتَدَاوَلُ"},
{"ind_1s", "أَتَدَاوَلُ"},
{"ind_2d", "تَتَدَاوَلَانِ"},
{"ind_2fp", "تَتَدَاوَلْنَ"},
{"ind_2fs", "تَتَدَاوَلِينَ"},
{"ind_2mp", "تَتَدَاوَلُونَ"},
{"ind_2ms", "تَتَدَاوَلُ"},
{"ind_3fd", "تَتَدَاوَلَانِ"},
{"ind_3fp", "يَتَدَاوَلْنَ"},
{"ind_3fs", "تَتَدَاوَلُ"},
{"ind_3md", "يَتَدَاوَلَانِ"},
{"ind_3mp", "يَتَدَاوَلُونَ"},
{"ind_3ms", "يَتَدَاوَلُ"},
{"past_1p", "تَدَاوَلْنَا"},
{"past_1s", "تَدَاوَلْتُ"},
{"past_2d", "تَدَاوَلْتُمَا"},
{"past_2fp", "تَدَاوَلْتُنَّ"},
{"past_2fs", "تَدَاوَلْتِ"},
{"past_2mp", "تَدَاوَلْتُمْ"},
{"past_2ms", "تَدَاوَلْتَ"},
{"past_3fd", "تَدَاوَلَتَا"},
{"past_3fp", "تَدَاوَلْنَ"},
{"past_3fs", "تَدَاوَلَتْ"},
{"past_3md", "تَدَاوَلَا"},
{"past_3mp", "تَدَاوَلُوا"},
{"past_3ms", "تَدَاوَلَ"},
},
},
{
label = "تَقايَضَ (p330)", root = "قيض", wazn = "تفاعل",
forms = {
{"imp_2d", "تَقَايَضَا"},
{"imp_2fp", "تَقَايَضْنَ"},
{"imp_2fs", "تَقَايَضِي"},
{"imp_2mp", "تَقَايَضُوا"},
{"imp_2ms", "تَقَايَضْ"},
{"ind_1p", "نَتَقَايَضُ"},
{"ind_1s", "أَتَقَايَضُ"},
{"ind_2d", "تَتَقَايَضَانِ"},
{"ind_2fp", "تَتَقَايَضْنَ"},
{"ind_2fs", "تَتَقَايَضِينَ"},
{"ind_2mp", "تَتَقَايَضُونَ"},
{"ind_2ms", "تَتَقَايَضُ"},
{"ind_3fd", "تَتَقَايَضَانِ"},
{"ind_3fp", "يَتَقَايَضْنَ"},
{"ind_3fs", "تَتَقَايَضُ"},
{"ind_3md", "يَتَقَايَضَانِ"},
{"ind_3mp", "يَتَقَايَضُونَ"},
{"ind_3ms", "يَتَقَايَضُ"},
{"past_1p", "تَقَايَضْنَا"},
{"past_1s", "تَقَايَضْتُ"},
{"past_2d", "تَقَايَضْتُمَا"},
{"past_2fp", "تَقَايَضْتُنَّ"},
{"past_2fs", "تَقَايَضْتِ"},
{"past_2mp", "تَقَايَضْتُمْ"},
{"past_2ms", "تَقَايَضْتَ"},
{"past_3fd", "تَقَايَضَتَا"},
{"past_3fp", "تَقَايَضْنَ"},
{"past_3fs", "تَقَايَضَتْ"},
{"past_3md", "تَقَايَضَا"},
{"past_3mp", "تَقَايَضُوا"},
{"past_3ms", "تَقَايَضَ"},
},
},
{
label = "اِنْخَرَطَ (p338)", root = "خرط", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْخَرِطَا"},
{"imp_2fp", "اِنْخَرِطْنَ"},
{"imp_2fs", "اِنْخَرِطِي"},
{"imp_2mp", "اِنْخَرِطُوا"},
{"imp_2ms", "اِنْخَرِطْ"},
{"ind_1p", "نَنْخَرِطُ"},
{"ind_1s", "أَنْخَرِطُ"},
{"ind_2d", "تَنْخَرِطَانِ"},
{"ind_2fp", "تَنْخَرِطْنَ"},
{"ind_2fs", "تَنْخَرِطِينَ"},
{"ind_2mp", "تَنْخَرِطُونَ"},
{"ind_2ms", "تَنْخَرِطُ"},
{"ind_3fd", "تَنْخَرِطَانِ"},
{"ind_3fp", "يَنْخَرِطْنَ"},
{"ind_3fs", "تَنْخَرِطُ"},
{"ind_3md", "يَنْخَرِطَانِ"},
{"ind_3mp", "يَنْخَرِطُونَ"},
{"ind_3ms", "يَنْخَرِطُ"},
{"past_1p", "اِنْخَرَطْنَا"},
{"past_1s", "اِنْخَرَطْتُ"},
{"past_2d", "اِنْخَرَطْتُمَا"},
{"past_2fp", "اِنْخَرَطْتُنَّ"},
{"past_2fs", "اِنْخَرَطْتِ"},
{"past_2mp", "اِنْخَرَطْتُمْ"},
{"past_2ms", "اِنْخَرَطْتَ"},
{"past_3fd", "اِنْخَرَطَتَا"},
{"past_3fp", "اِنْخَرَطْنَ"},
{"past_3fs", "اِنْخَرَطَتْ"},
{"past_3md", "اِنْخَرَطَا"},
{"past_3mp", "اِنْخَرَطُوا"},
{"past_3ms", "اِنْخَرَطَ"},
},
},
{
label = "اِنْطَلَقَ (p338)", root = "طلق", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْطَلِقَا"},
{"imp_2fp", "اِنْطَلِقْنَ"},
{"imp_2fs", "اِنْطَلِقِي"},
{"imp_2mp", "اِنْطَلِقُوا"},
{"imp_2ms", "اِنْطَلِقْ"},
{"ind_1p", "نَنْطَلِقُ"},
{"ind_1s", "أَنْطَلِقُ"},
{"ind_2d", "تَنْطَلِقَانِ"},
{"ind_2fp", "تَنْطَلِقْنَ"},
{"ind_2fs", "تَنْطَلِقِينَ"},
{"ind_2mp", "تَنْطَلِقُونَ"},
{"ind_2ms", "تَنْطَلِقُ"},
{"ind_3fd", "تَنْطَلِقَانِ"},
{"ind_3fp", "يَنْطَلِقْنَ"},
{"ind_3fs", "تَنْطَلِقُ"},
{"ind_3md", "يَنْطَلِقَانِ"},
{"ind_3mp", "يَنْطَلِقُونَ"},
{"ind_3ms", "يَنْطَلِقُ"},
{"past_1p", "اِنْطَلَقْنَا"},
{"past_1s", "اِنْطَلَقْتُ"},
{"past_2d", "اِنْطَلَقْتُمَا"},
{"past_2fp", "اِنْطَلَقْتُنَّ"},
{"past_2fs", "اِنْطَلَقْتِ"},
{"past_2mp", "اِنْطَلَقْتُمْ"},
{"past_2ms", "اِنْطَلَقْتَ"},
{"past_3fd", "اِنْطَلَقَتَا"},
{"past_3fp", "اِنْطَلَقْنَ"},
{"past_3fs", "اِنْطَلَقَتْ"},
{"past_3md", "اِنْطَلَقَا"},
{"past_3mp", "اِنْطَلَقُوا"},
{"past_3ms", "اِنْطَلَقَ"},
},
},
{
label = "فَئِدَ (p234)", root = "فئد", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِفْأَدَا"},
{"imp_2fp", "اِفْأَدْنَ"},
{"imp_2fs", "اِفْأَدِي"},
{"imp_2mp", "اِفْأَدُوا"},
{"imp_2ms", "اِفْأَدْ"},
{"ind_1p", "نَفْأَدُ"},
{"ind_1s", "أَفْأَدُ"},
{"ind_2d", "تَفْأَدَانِ"},
{"ind_2fp", "تَفْأَدْنَ"},
{"ind_2fs", "تَفْأَدِينَ"},
{"ind_2mp", "تَفْأَدُونَ"},
{"ind_2ms", "تَفْأَدُ"},
{"ind_3fd", "تَفْأَدَانِ"},
{"ind_3fp", "يَفْأَدْنَ"},
{"ind_3fs", "تَفْأَدُ"},
{"ind_3md", "يَفْأَدَانِ"},
{"ind_3mp", "يَفْأَدُونَ"},
{"ind_3ms", "يَفْأَدُ"},
{"past_1p", "فَئِدْنَا"},
{"past_1s", "فَئِدْتُ"},
{"past_2d", "فَئِدْتُمَا"},
{"past_2fp", "فَئِدْتُنَّ"},
{"past_2fs", "فَئِدْتِ"},
{"past_2mp", "فَئِدْتُمْ"},
{"past_2ms", "فَئِدْتَ"},
{"past_3fd", "فَئِدَتَا"},
{"past_3fp", "فَئِدْنَ"},
{"past_3fs", "فَئِدَتْ"},
{"past_3md", "فَئِدَا"},
{"past_3mp", "فَئِدُوا"},
{"past_3ms", "فَئِدَ"},
},
},
{
label = "بَرِئَ (p237)", root = "برئ", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِبْرَآ"},
{"imp_2fp", "اِبْرَأْنَ"},
{"imp_2fs", "اِبْرَئِي"},
{"imp_2mp", "اِبْرَؤُوا"},
{"imp_2ms", "اِبْرَأْ"},
{"ind_1p", "نَبْرَأُ"},
{"ind_1s", "أَبْرَأُ"},
{"ind_2d", "تَبْرَآنِ"},
{"ind_2fp", "تَبْرَأْنَ"},
{"ind_2fs", "تَبْرَئِينَ"},
{"ind_2mp", "تَبْرَؤُونَ"},
{"ind_2ms", "تَبْرَأُ"},
{"ind_3fd", "تَبْرَآنِ"},
{"ind_3fp", "يَبْرَأْنَ"},
{"ind_3fs", "تَبْرَأُ"},
{"ind_3md", "يَبْرَآنِ"},
{"ind_3mp", "يَبْرَؤُونَ"},
{"ind_3ms", "يَبْرَأُ"},
{"past_1p", "بَرِئْنَا"},
{"past_1s", "بَرِئْتُ"},
{"past_2d", "بَرِئْتُمَا"},
{"past_2fp", "بَرِئْتُنَّ"},
{"past_2fs", "بَرِئْتِ"},
{"past_2mp", "بَرِئْتُمْ"},
{"past_2ms", "بَرِئْتَ"},
{"past_3fd", "بَرِئَتَا"},
{"past_3fp", "بَرِئْنَ"},
{"past_3fs", "بَرِئَتْ"},
{"past_3md", "بَرِئَا"},
{"past_3mp", "بَرِئُوا"},
{"past_3ms", "بَرِئَ"},
},
},
{
label = "عَيِيَ (p250)", root = "عيي", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِعْيَيَا"},
{"imp_2fp", "اِعْيَيْنَ"},
{"imp_2fs", "اِعْيَيْ"},
{"imp_2mp", "اِعْيَوْا"},
{"imp_2ms", "اِعْيَ"},
{"ind_1p", "نَعْيَا"},
{"ind_1s", "أَعْيَا"},
{"ind_2d", "تَعْيَيَانِ"},
{"ind_2fp", "تَعْيَيْنَ"},
{"ind_2fs", "تَعْيَيْنَ"},
{"ind_2mp", "تَعْيَوْنَ"},
{"ind_2ms", "تَعْيَا"},
{"ind_3fd", "تَعْيَيَانِ"},
{"ind_3fp", "يَعْيَيْنَ"},
{"ind_3fs", "تَعْيَا"},
{"ind_3md", "يَعْيَيَانِ"},
{"ind_3mp", "يَعْيَوْنَ"},
{"past_1p", "عَيِينَا"},
{"past_1s", "عَيِيتُ"},
{"past_2d", "عَيِيتُمَا"},
{"past_2fp", "عَيِيتُنَّ"},
{"past_2fs", "عَيِيتِ"},
{"past_2mp", "عَيِيتُمْ"},
{"past_2ms", "عَيِيتَ"},
{"past_3fd", "عَيِيَتَا"},
{"past_3fp", "عَيِينَ"},
{"past_3fs", "عَيِيَتْ"},
{"past_3md", "عَيِيَا"},
{"past_3mp", "عَيُوا"},
{"past_3ms", "عَيِيَ"},
},
},
{
label = "باطَأَ (p280)", root = "بطأ", wazn = "فاعل",
forms = {
{"imp_2d", "بَاطِئَا"},
{"imp_2fp", "بَاطِئْنَ"},
{"imp_2fs", "بَاطِئِي"},
{"imp_2mp", "بَاطِئُوا"},
{"imp_2ms", "بَاطِئْ"},
{"ind_1p", "نُبَاطِئُ"},
{"ind_1s", "أُبَاطِئُ"},
{"ind_2d", "تُبَاطِئَانِ"},
{"ind_2fp", "تُبَاطِئْنَ"},
{"ind_2fs", "تُبَاطِئِينَ"},
{"ind_2mp", "تُبَاطِئُونَ"},
{"ind_2ms", "تُبَاطِئُ"},
{"ind_3fd", "تُبَاطِئَانِ"},
{"ind_3fp", "يُبَاطِئْنَ"},
{"ind_3fs", "تُبَاطِئُ"},
{"ind_3md", "يُبَاطِئَانِ"},
{"ind_3mp", "يُبَاطِئُونَ"},
{"ind_3ms", "يُبَاطِئُ"},
{"past_1p", "بَاطَأْنَا"},
{"past_1s", "بَاطَأْتُ"},
{"past_2d", "بَاطَأْتُمَا"},
{"past_2fp", "بَاطَأْتُنَّ"},
{"past_2fs", "بَاطَأْتِ"},
{"past_2mp", "بَاطَأْتُمْ"},
{"past_2ms", "بَاطَأْتَ"},
{"past_3fd", "بَاطَأَتَا"},
{"past_3fp", "بَاطَأْنَ"},
{"past_3fs", "بَاطَأَتْ"},
{"past_3md", "بَاطَآ"},
{"past_3mp", "بَاطَؤُوا"},
{"past_3ms", "بَاطَأَ"},
},
},
{
label = "عايا (p287)", root = "عيي", wazn = "فاعل",
forms = {
{"imp_2d", "عَايِيَا"},
{"imp_2fp", "عَايِينَ"},
{"imp_2fs", "عَايِي"},
{"imp_2mp", "عَايُوا"},
{"imp_2ms", "عَايِ"},
{"ind_1p", "نُعَايِي"},
{"ind_1s", "أُعَايِي"},
{"ind_2d", "تُعَايِيَانِ"},
{"ind_2fp", "تُعَايِينَ"},
{"ind_2fs", "تُعَايِينَ"},
{"ind_2mp", "تُعَايُونَ"},
{"ind_2ms", "تُعَايِي"},
{"ind_3fd", "تُعَايِيَانِ"},
{"ind_3fp", "يُعَايِينَ"},
{"ind_3fs", "تُعَايِي"},
{"ind_3md", "يُعَايِيَانِ"},
{"ind_3mp", "يُعَايُونَ"},
{"ind_3ms", "يُعَايِي"},
{"past_1p", "عَايَيْنَا"},
{"past_1s", "عَايَيْتُ"},
{"past_2d", "عَايَيْتُمَا"},
{"past_2fp", "عَايَيْتُنَّ"},
{"past_2fs", "عَايَيْتِ"},
{"past_2mp", "عَايَيْتُمْ"},
{"past_2ms", "عَايَيْتَ"},
{"past_3fd", "عَايَتَا"},
{"past_3fp", "عَايَيْنَ"},
{"past_3fs", "عَايَتْ"},
{"past_3mp", "عَايَوْا"},
{"past_3ms", "عَايَا"},
},
},
}
m4lnndaycpy24mygz100gwvyg9btf5o
وحدة:ar-verb/testcases/8
828
242226
1159023
1158891
2026-09-10T12:39:35Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159023
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 8 من 15. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/8")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_8()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
qsutene1t6hrlla623ejruw8r3oel8x
1159081
1159023
2026-09-10T19:34:09Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159081
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 8 من 16. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/8")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_8()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
10741fk5stqw2o3m41cqzykb1pml23o
نقاش الوحدة:ar-verb/testcases/8
829
242227
1159024
1158892
2026-09-10T12:39:36Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159024
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/8|الجزء 8 من 15]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، [[نقاش الوحدة:ar-verb/testcases/1|1]]، [[نقاش الوحدة:ar-verb/testcases/2|2]]، [[نقاش الوحدة:ar-verb/testcases/3|3]]، [[نقاش الوحدة:ar-verb/testcases/4|4]]، [[نقاش الوحدة:ar-verb/testcases/5|5]]، [[نقاش الوحدة:ar-verb/testcases/6|6]]، [[نقاش الوحدة:ar-verb/testcases/7|7]]، 8، [[نقاش الوحدة:ar-verb/testcases/9|9]]، [[نقاش الوحدة:ar-verb/testcases/10|10]]، [[نقاش الوحدة:ar-verb/testcases/11|11]]، [[نقاش الوحدة:ar-verb/testcases/12|12]]، [[نقاش الوحدة:ar-verb/testcases/13|13]]، [[نقاش الوحدة:ar-verb/testcases/14|14]]، [[نقاش الوحدة:ar-verb/testcases/15|15]] — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/8|run_tests}}
bog3l2wel4bcxjoir3dqb6urn4j5l40
1159082
1159024
2026-09-10T19:34:09Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159082
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/8|الجزء 8 من 16]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، [[نقاش الوحدة:ar-verb/testcases/1|1]]، [[نقاش الوحدة:ar-verb/testcases/2|2]]، [[نقاش الوحدة:ar-verb/testcases/3|3]]، [[نقاش الوحدة:ar-verb/testcases/4|4]]، [[نقاش الوحدة:ar-verb/testcases/5|5]]، [[نقاش الوحدة:ar-verb/testcases/6|6]]، [[نقاش الوحدة:ar-verb/testcases/7|7]]، 8، [[نقاش الوحدة:ar-verb/testcases/9|9]]، [[نقاش الوحدة:ar-verb/testcases/10|10]]، [[نقاش الوحدة:ar-verb/testcases/11|11]]، [[نقاش الوحدة:ar-verb/testcases/12|12]]، [[نقاش الوحدة:ar-verb/testcases/13|13]]، [[نقاش الوحدة:ar-verb/testcases/14|14]]، [[نقاش الوحدة:ar-verb/testcases/15|15]]، [[نقاش الوحدة:ar-verb/testcases/16|16]] — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/8|run_tests}}
jj0gte2ij2fqlpv1l39u2c4gxe9tbqv
وحدة:ar-verb/testcases/بيانات/9
828
242291
1159025
1158921
2026-09-10T12:39:38Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159025
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 9 من 15.
return {
{
label = "أَحْيا (p302)", root = "حيي", wazn = "أفعل",
forms = {
{"imp_2d", "أَحِيَّا"},
{"imp_2fp", "أَحْيِينَ"},
{"imp_2fs", "أَحْيِي"},
{"imp_2mp", "أَحْيُوا"},
{"imp_2ms", "أَحْيِ"},
{"ind_1p", "نُحْيِي"},
{"ind_1s", "أُحْيِي"},
{"ind_2d", "تُحِيَّانِ"},
{"ind_2fs", "تُحْيِينَ"},
{"ind_2mp", "تُحْيُونَ"},
{"ind_2ms", "تُحْيِي"},
{"ind_3fd", "تُحِيَّانِ"},
{"ind_3fp", "يُحْيِينَ"},
{"ind_3fs", "تُحْيِي"},
{"ind_3md", "يُحِيَّانِ"},
{"ind_3mp", "يُحْيُونَ"},
{"ind_3ms", "يُحْيِي"},
{"past_1p", "أَحْيَيْنَا"},
{"past_1s", "أَحْيَيْتُ"},
{"past_2d", "أَحْيَيْتُمَا"},
{"past_2fp", "أَحْيَيْتُنَّ"},
{"past_2fs", "أَحْيَيْتِ"},
{"past_2mp", "أَحْيَيْتُمْ"},
{"past_2ms", "أَحْيَيْتَ"},
{"past_3fd", "أَحْيَتَا"},
{"past_3fp", "أَحْيَيْنَ"},
{"past_3fs", "أَحْيَتْ"},
{"past_3md", "أَحَيَّا"},
{"past_3mp", "أَحْيَوْا"},
{"past_3ms", "أَحْيَا"},
},
},
{
label = "تَوانَى (p335)", root = "وني", wazn = "تفاعل",
forms = {
{"imp_2d", "تَوَانَيَا"},
{"imp_2fp", "تَوَانَيْنَ"},
{"imp_2fs", "تَوَانَيْ"},
{"imp_2mp", "تَوَانَوْا"},
{"imp_2ms", "تَوَانَ"},
{"ind_1p", "نَتَوَانَى"},
{"ind_1s", "أَتَوَانَى"},
{"ind_2d", "تَتَوَانَيَانِ"},
{"ind_2fp", "تَتَوَانَيْنَ"},
{"ind_2fs", "تَتَوَانَيْنَ"},
{"ind_2mp", "تَتَوَانَوْنَ"},
{"ind_2ms", "تَتَوَانَى"},
{"ind_3fd", "تَتَوَانَيَانِ"},
{"ind_3fp", "يَتَوَانَيْنَ"},
{"ind_3fs", "تَتَوَانَى"},
{"ind_3md", "يَتَوَانَيَانِ"},
{"ind_3mp", "يَتَوَانَوْنَ"},
{"ind_3ms", "يَتَوَانَى"},
{"past_1p", "تَوَانَيْنَا"},
{"past_1s", "تَوَانَيْتُ"},
{"past_2d", "تَوَانَيْتُمَا"},
{"past_2fp", "تَوَانَيْتُنَّ"},
{"past_2fs", "تَوَانَيْتِ"},
{"past_2mp", "تَوَانَيْتُمْ"},
{"past_2ms", "تَوَانَيْتَ"},
{"past_3fd", "تَوَانَتَا"},
{"past_3fp", "تَوَانَيْنَ"},
{"past_3fs", "تَوَانَتْ"},
{"past_3md", "تَوَانَيَا"},
{"past_3mp", "تَوَانَوْا"},
{"past_3ms", "تَوَانَى"},
},
},
{
label = "تَوَارَى (p335)", root = "وري", wazn = "تفاعل",
forms = {
{"imp_2d", "تَوَارَيَا"},
{"imp_2fp", "تَوَارَيْنَ"},
{"imp_2fs", "تَوَارَيْ"},
{"imp_2mp", "تَوَارَوْا"},
{"imp_2ms", "تَوَارَ"},
{"ind_1p", "نَتَوَارَى"},
{"ind_1s", "أَتَوَارَى"},
{"ind_2d", "تَتَوَارَيَانِ"},
{"ind_2fp", "تَتَوَارَيْنَ"},
{"ind_2fs", "تَتَوَارَيْنَ"},
{"ind_2mp", "تَتَوَارَوْنَ"},
{"ind_2ms", "تَتَوَارَى"},
{"ind_3fd", "تَتَوَارَيَانِ"},
{"ind_3fp", "يَتَوَارَيْنَ"},
{"ind_3fs", "تَتَوَارَى"},
{"ind_3md", "يَتَوَارَيَانِ"},
{"ind_3mp", "يَتَوَارَوْنَ"},
{"ind_3ms", "يَتَوَارَى"},
{"past_1p", "تَوَارَيْنَا"},
{"past_1s", "تَوَارَيْتُ"},
{"past_2d", "تَوَارَيْتُمَا"},
{"past_2fp", "تَوَارَيْتُنَّ"},
{"past_2fs", "تَوَارَيْتِ"},
{"past_2mp", "تَوَارَيْتُمْ"},
{"past_2ms", "تَوَارَيْتَ"},
{"past_3fd", "تَوَارَتَا"},
{"past_3fp", "تَوَارَيْنَ"},
{"past_3fs", "تَوَارَتْ"},
{"past_3md", "تَوَارَيَا"},
{"past_3mp", "تَوَارَوْا"},
{"past_3ms", "تَوَارَى"},
},
},
{
label = "اِنْشَقَّ (p340)", root = "شقق", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْشَقَّا"},
{"imp_2fp", "اِنْشَقِقْنَ"},
{"imp_2fs", "اِنْشَقِّي"},
{"imp_2mp", "اِنْشَقُّوا"},
{"imp_2ms", "اِنْشَقِقْ"},
{"ind_1p", "نَنْشَقُّ"},
{"ind_1s", "أَنْشَقُّ"},
{"ind_2d", "تَنْشَقَّانِ"},
{"ind_2fp", "تَنْشَقِقْنَ"},
{"ind_2fs", "تَنْشَقِّينَ"},
{"ind_2mp", "تَنْشَقُّونَ"},
{"ind_2ms", "تَنْشَقُّ"},
{"ind_3fd", "تَنْشَقَّانِ"},
{"ind_3fp", "يَنْشَقِقْنَ"},
{"ind_3fs", "تَنْشَقُّ"},
{"ind_3md", "يَنْشَقَّانِ"},
{"ind_3mp", "يَنْشَقُّونَ"},
{"ind_3ms", "يَنْشَقُّ"},
{"past_1p", "اِنْشَقَقْنَا"},
{"past_1s", "اِنْشَقَقْتُ"},
{"past_2d", "اِنْشَقَقْتُمَا"},
{"past_2fp", "اِنْشَقَقْتُنَّ"},
{"past_2fs", "اِنْشَقَقْتِ"},
{"past_2mp", "اِنْشَقَقْتُمْ"},
{"past_2ms", "اِنْشَقَقْتَ"},
{"past_3fd", "اِنْشَقَّتَا"},
{"past_3fp", "اِنْشَقَقْنَ"},
{"past_3fs", "اِنْشَقَّتْ"},
{"past_3md", "اِنْشَقَّا"},
{"past_3mp", "اِنْشَقُّوا"},
{"past_3ms", "اِنْشَقَّ"},
},
},
{
label = "اِنْدَسَّ (p340)", root = "دسس", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْدَسَّا"},
{"imp_2fp", "اِنْدَسِسْنَ"},
{"imp_2fs", "اِنْدَسِّي"},
{"imp_2mp", "اِنْدَسُّوا"},
{"imp_2ms", "اِنْدَسِسْ"},
{"ind_1p", "نَنْدَسُّ"},
{"ind_1s", "أَنْدَسُّ"},
{"ind_2d", "تَنْدَسَّانِ"},
{"ind_2fp", "تَنْدَسِسْنَ"},
{"ind_2fs", "تَنْدَسِّينَ"},
{"ind_2mp", "تَنْدَسُّونَ"},
{"ind_2ms", "تَنْدَسُّ"},
{"ind_3fd", "تَنْدَسَّانِ"},
{"ind_3fp", "يَنْدَسِسْنَ"},
{"ind_3fs", "تَنْدَسُّ"},
{"ind_3md", "يَنْدَسَّانِ"},
{"ind_3mp", "يَنْدَسُّونَ"},
{"ind_3ms", "يَنْدَسُّ"},
{"past_1p", "اِنْدَسَسْنَا"},
{"past_1s", "اِنْدَسَسْتُ"},
{"past_2d", "اِنْدَسَسْتُمَا"},
{"past_2fp", "اِنْدَسَسْتُنَّ"},
{"past_2fs", "اِنْدَسَسْتِ"},
{"past_2mp", "اِنْدَسَسْتُمْ"},
{"past_2ms", "اِنْدَسَسْتَ"},
{"past_3fd", "اِنْدَسَّتَا"},
{"past_3fp", "اِنْدَسَسْنَ"},
{"past_3fs", "اِنْدَسَّتْ"},
{"past_3md", "اِنْدَسَّا"},
{"past_3mp", "اِنْدَسُّوا"},
{"past_3ms", "اِنْدَسَّ"},
},
},
{
label = "اِنْدَرَأَ (p342)", root = "درأ", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْدَرِئَا"},
{"imp_2fp", "اِنْدَرِئْنَ"},
{"imp_2fs", "اِنْدَرِئِي"},
{"imp_2mp", "اِنْدَرِئُوا"},
{"imp_2ms", "اِنْدَرِئْ"},
{"ind_1p", "نَنْدَرِئُ"},
{"ind_1s", "أَنْدَرِئُ"},
{"ind_2d", "تَنْدَرِئَانِ"},
{"ind_2fp", "تَنْدَرِئْنَ"},
{"ind_2fs", "تَنْدَرِئِينَ"},
{"ind_2mp", "تَنْدَرِئُونَ"},
{"ind_2ms", "تَنْدَرِئُ"},
{"ind_3fd", "تَنْدَرِئَانِ"},
{"ind_3fp", "يَنْدَرِئْنَ"},
{"ind_3fs", "تَنْدَرِئُ"},
{"ind_3md", "يَنْدَرِئَانِ"},
{"ind_3mp", "يَنْدَرِئُونَ"},
{"ind_3ms", "يَنْدَرِئُ"},
{"past_1p", "اِنْدَرَأْنَا"},
{"past_1s", "اِنْدَرَأْتُ"},
{"past_2d", "اِنْدَرَأْتُمَا"},
{"past_2fp", "اِنْدَرَأْتُنَّ"},
{"past_2fs", "اِنْدَرَأْتِ"},
{"past_2mp", "اِنْدَرَأْتُمْ"},
{"past_2ms", "اِنْدَرَأْتَ"},
{"past_3fd", "اِنْدَرَأَتَا"},
{"past_3fp", "اِنْدَرَأْنَ"},
{"past_3fs", "اِنْدَرَأَتْ"},
{"past_3md", "اِنْدَرَآ"},
{"past_3mp", "اِنْدَرَؤُوا"},
{"past_3ms", "اِنْدَرَأَ"},
},
},
{
label = "اِنْكَفَأَ (p342)", root = "كفأ", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْكَفِئَا"},
{"imp_2fp", "اِنْكَفِئْنَ"},
{"imp_2fs", "اِنْكَفِئِي"},
{"imp_2mp", "اِنْكَفِئُوا"},
{"imp_2ms", "اِنْكَفِئْ"},
{"ind_1p", "نَنْكَفِئُ"},
{"ind_1s", "أَنْكَفِئُ"},
{"ind_2d", "تَنْكَفِئَانِ"},
{"ind_2fp", "تَنْكَفِئْنَ"},
{"ind_2fs", "تَنْكَفِئِينَ"},
{"ind_2mp", "تَنْكَفِئُونَ"},
{"ind_2ms", "تَنْكَفِئُ"},
{"ind_3fd", "تَنْكَفِئَانِ"},
{"ind_3fp", "يَنْكَفِئْنَ"},
{"ind_3fs", "تَنْكَفِئُ"},
{"ind_3md", "يَنْكَفِئَانِ"},
{"ind_3mp", "يَنْكَفِئُونَ"},
{"ind_3ms", "يَنْكَفِئُ"},
{"past_1p", "اِنْكَفَأْنَا"},
{"past_1s", "اِنْكَفَأْتُ"},
{"past_2d", "اِنْكَفَأْتُمَا"},
{"past_2fp", "اِنْكَفَأْتُنَّ"},
{"past_2fs", "اِنْكَفَأْتِ"},
{"past_2mp", "اِنْكَفَأْتُمْ"},
{"past_2ms", "اِنْكَفَأْتَ"},
{"past_3fd", "اِنْكَفَأَتَا"},
{"past_3fp", "اِنْكَفَأْنَ"},
{"past_3fs", "اِنْكَفَأَتْ"},
{"past_3md", "اِنْكَفَآ"},
{"past_3mp", "اِنْكَفَؤُوا"},
{"past_3ms", "اِنْكَفَأَ"},
},
},
{
label = "اِنْزَوَى (p348)", root = "زوي", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْزَوِيَا"},
{"imp_2fp", "اِنْزَوِينَ"},
{"imp_2fs", "اِنْزَوِي"},
{"imp_2mp", "اِنْزَوُوا"},
{"imp_2ms", "اِنْزَوِ"},
{"ind_1p", "نَنْزَوِي"},
{"ind_1s", "أَنْزَوِي"},
{"ind_2d", "تَنْزَوِيَانِ"},
{"ind_2fp", "تَنْزَوِينَ"},
{"ind_2fs", "تَنْزَوِينَ"},
{"ind_2mp", "تَنْزَوُونَ"},
{"ind_2ms", "تَنْزَوِي"},
{"ind_3fd", "تَنْزَوِيَانِ"},
{"ind_3fp", "يَنْزَوِينَ"},
{"ind_3fs", "تَنْزَوِي"},
{"ind_3md", "يَنْزَوِيَانِ"},
{"ind_3mp", "يَنْزَوُونَ"},
{"ind_3ms", "يَنْزَوِي"},
{"past_1p", "اِنْزَوَيْنَا"},
{"past_1s", "اِنْزَوَيْتُ"},
{"past_2d", "اِنْزَوَيْتُمَا"},
{"past_2fp", "اِنْزَوَيْتُنَّ"},
{"past_2fs", "اِنْزَوَيْتِ"},
{"past_2mp", "اِنْزَوَيْتُمْ"},
{"past_2ms", "اِنْزَوَيْتَ"},
{"past_3fd", "اِنْزَوَتَا"},
{"past_3fp", "اِنْزَوَيْنَ"},
{"past_3fs", "اِنْزَوَتْ"},
{"past_3md", "اِنْزَوَيَا"},
{"past_3mp", "اِنْزَوَوْا"},
{"past_3ms", "اِنْزَوَى"},
},
},
{
label = "اِنْشَوَى (p348)", root = "شوي", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْشَوِيَا"},
{"imp_2fp", "اِنْشَوِينَ"},
{"imp_2fs", "اِنْشَوِي"},
{"imp_2mp", "اِنْشَوُوا"},
{"imp_2ms", "اِنْشَوِ"},
{"ind_1p", "نَنْشَوِي"},
{"ind_1s", "أَنْشَوِي"},
{"ind_2d", "تَنْشَوِيَانِ"},
{"ind_2fp", "تَنْشَوِينَ"},
{"ind_2fs", "تَنْشَوِينَ"},
{"ind_2mp", "تَنْشَوُونَ"},
{"ind_2ms", "تَنْشَوِي"},
{"ind_3fd", "تَنْشَوِيَانِ"},
{"ind_3fp", "يَنْشَوِينَ"},
{"ind_3fs", "تَنْشَوِي"},
{"ind_3md", "يَنْشَوِيَانِ"},
{"ind_3mp", "يَنْشَوُونَ"},
{"ind_3ms", "يَنْشَوِي"},
{"past_1p", "اِنْشَوَيْنَا"},
{"past_1s", "اِنْشَوَيْتُ"},
{"past_2d", "اِنْشَوَيْتُمَا"},
{"past_2fp", "اِنْشَوَيْتُنَّ"},
{"past_2fs", "اِنْشَوَيْتِ"},
{"past_2mp", "اِنْشَوَيْتُمْ"},
{"past_2ms", "اِنْشَوَيْتَ"},
{"past_3fd", "اِنْشَوَتَا"},
{"past_3fp", "اِنْشَوَيْنَ"},
{"past_3fs", "اِنْشَوَتْ"},
{"past_3md", "اِنْشَوَيَا"},
{"past_3mp", "اِنْشَوَوْا"},
{"past_3ms", "اِنْشَوَى"},
},
},
{
label = "اِرْتَبَطَ (p350)", root = "ربط", wazn = "افتعل",
forms = {
{"imp_2d", "اِرْتَبِطَا"},
{"imp_2fp", "اِرْتَبِطْنَ"},
{"imp_2fs", "اِرْتَبِطِي"},
{"imp_2mp", "اِرْتَبِطُوا"},
{"imp_2ms", "اِرْتَبِطْ"},
{"ind_1p", "نَرْتَبِطُ"},
{"ind_1s", "أَرْتَبِطُ"},
{"ind_2d", "تَرْتَبِطَانِ"},
{"ind_2fp", "تَرْتَبِطْنَ"},
{"ind_2fs", "تَرْتَبِطِينَ"},
{"ind_2mp", "تَرْتَبِطُونَ"},
{"ind_2ms", "تَرْتَبِطُ"},
{"ind_3fd", "تَرْتَبِطَانِ"},
{"ind_3fp", "يَرْتَبِطْنَ"},
{"ind_3fs", "تَرْتَبِطُ"},
{"ind_3md", "يَرْتَبِطَانِ"},
{"ind_3mp", "يَرْتَبِطُونَ"},
{"ind_3ms", "يَرْتَبِطُ"},
{"past_1p", "اِرْتَبَطْنَا"},
{"past_1s", "اِرْتَبَطْتُ"},
{"past_2d", "اِرْتَبَطْتُمَا"},
{"past_2fp", "اِرْتَبَطْتُنَّ"},
{"past_2fs", "اِرْتَبَطْتِ"},
{"past_2mp", "اِرْتَبَطْتُمْ"},
{"past_2ms", "اِرْتَبَطْتَ"},
{"past_3fd", "اِرْتَبَطَتَا"},
{"past_3fp", "اِرْتَبَطْنَ"},
{"past_3fs", "اِرْتَبَطَتْ"},
{"past_3md", "اِرْتَبَطَا"},
{"past_3mp", "اِرْتَبَطُوا"},
{"past_3ms", "اِرْتَبَطَ"},
},
},
{
label = "اِمْتَزَجَ (p350)", root = "مزج", wazn = "افتعل",
forms = {
{"imp_2d", "اِمْتَزِجَا"},
{"imp_2fp", "اِمْتَزِجْنَ"},
{"imp_2fs", "اِمْتَزِجِي"},
{"imp_2mp", "اِمْتَزِجُوا"},
{"imp_2ms", "اِمْتَزِجْ"},
{"ind_1p", "نَمْتَزِجُ"},
{"ind_1s", "أَمْتَزِجُ"},
{"ind_2d", "تَمْتَزِجَانِ"},
{"ind_2fp", "تَمْتَزِجْنَ"},
{"ind_2fs", "تَمْتَزِجِينَ"},
{"ind_2mp", "تَمْتَزِجُونَ"},
{"ind_2ms", "تَمْتَزِجُ"},
{"ind_3fd", "تَمْتَزِجَانِ"},
{"ind_3fp", "يَمْتَزِجْنَ"},
{"ind_3fs", "تَمْتَزِجُ"},
{"ind_3md", "يَمْتَزِجَانِ"},
{"ind_3mp", "يَمْتَزِجُونَ"},
{"ind_3ms", "يَمْتَزِجُ"},
{"past_1p", "اِمْتَزَجْنَا"},
{"past_1s", "اِمْتَزَجْتُ"},
{"past_2d", "اِمْتَزَجْتُمَا"},
{"past_2fp", "اِمْتَزَجْتُنَّ"},
{"past_2fs", "اِمْتَزَجْتِ"},
{"past_2mp", "اِمْتَزَجْتُمْ"},
{"past_2ms", "اِمْتَزَجْتَ"},
{"past_3fd", "اِمْتَزَجَتَا"},
{"past_3fp", "اِمْتَزَجْنَ"},
{"past_3fs", "اِمْتَزَجَتْ"},
{"past_3md", "اِمْتَزَجَا"},
{"past_3mp", "اِمْتَزَجُوا"},
{"past_3ms", "اِمْتَزَجَ"},
},
},
{
label = "اِزْدَحَمَ (p351)", root = "زحم", wazn = "افتعل",
forms = {
{"imp_2d", "اِزْدَحِمَا"},
{"imp_2fp", "اِزْدَحِمْنَ"},
{"imp_2fs", "اِزْدَحِمِي"},
{"imp_2mp", "اِزْدَحِمُوا"},
{"imp_2ms", "اِزْدَحِمْ"},
{"ind_1p", "نَزْدَحِمُ"},
{"ind_1s", "أَزْدَحِمُ"},
{"ind_2d", "تَزْدَحِمَانِ"},
{"ind_2fp", "تَزْدَحِمْنَ"},
{"ind_2fs", "تَزْدَحِمِينَ"},
{"ind_2mp", "تَزْدَحِمُونَ"},
{"ind_2ms", "تَزْدَحِمُ"},
{"ind_3fd", "تَزْدَحِمَانِ"},
{"ind_3fp", "يَزْدَحِمْنَ"},
{"ind_3fs", "تَزْدَحِمُ"},
{"ind_3md", "يَزْدَحِمَانِ"},
{"ind_3mp", "يَزْدَحِمُونَ"},
{"ind_3ms", "يَزْدَحِمُ"},
{"past_1p", "اِزْدَحَمْنَا"},
{"past_1s", "اِزْدَحَمْتُ"},
{"past_2d", "اِزْدَحَمْتُمَا"},
{"past_2fp", "اِزْدَحَمْتُنَّ"},
{"past_2fs", "اِزْدَحَمْتِ"},
{"past_2mp", "اِزْدَحَمْتُمْ"},
{"past_2ms", "اِزْدَحَمْتَ"},
{"past_3fd", "اِزْدَحَمَتَا"},
{"past_3fp", "اِزْدَحَمْنَ"},
{"past_3fs", "اِزْدَحَمَتْ"},
{"past_3md", "اِزْدَحَمَا"},
{"past_3mp", "اِزْدَحَمُوا"},
{"past_3ms", "اِزْدَحَمَ"},
},
},
{
label = "اِضْطَلَعَ (p351)", root = "ضلع", wazn = "افتعل",
forms = {
{"imp_2d", "اِضْطَلِعَا"},
{"imp_2fp", "اِضْطَلِعْنَ"},
{"imp_2fs", "اِضْطَلِعِي"},
{"imp_2mp", "اِضْطَلِعُوا"},
{"imp_2ms", "اِضْطَلِعْ"},
{"ind_1p", "نَضْطَلِعُ"},
{"ind_1s", "أَضْطَلِعُ"},
{"ind_2d", "تَضْطَلِعَانِ"},
{"ind_2fp", "تَضْطَلِعْنَ"},
{"ind_2fs", "تَضْطَلِعِينَ"},
{"ind_2mp", "تَضْطَلِعُونَ"},
{"ind_2ms", "تَضْطَلِعُ"},
{"ind_3fd", "تَضْطَلِعَانِ"},
{"ind_3fp", "يَضْطَلِعْنَ"},
{"ind_3fs", "تَضْطَلِعُ"},
{"ind_3md", "يَضْطَلِعَانِ"},
{"ind_3mp", "يَضْطَلِعُونَ"},
{"ind_3ms", "يَضْطَلِعُ"},
{"past_1p", "اِضْطَلَعْنَا"},
{"past_1s", "اِضْطَلَعْتُ"},
{"past_2d", "اِضْطَلَعْتُمَا"},
{"past_2fp", "اِضْطَلَعْتُنَّ"},
{"past_2fs", "اِضْطَلَعْتِ"},
{"past_2mp", "اِضْطَلَعْتُمْ"},
{"past_2ms", "اِضْطَلَعْتَ"},
{"past_3fd", "اِضْطَلَعَتَا"},
{"past_3fp", "اِضْطَلَعْنَ"},
{"past_3fs", "اِضْطَلَعَتْ"},
{"past_3md", "اِضْطَلَعَا"},
{"past_3mp", "اِضْطَلَعُوا"},
{"past_3ms", "اِضْطَلَعَ"},
},
},
{
label = "اِرْتَدَّ (p355)", root = "ردد", wazn = "افتعل",
forms = {
{"imp_2d", "اِرْتَدَّا"},
{"imp_2fp", "اِرْتَدِدْنَ"},
{"imp_2fs", "اِرْتَدِّي"},
{"imp_2mp", "اِرْتَدُّوا"},
{"imp_2ms", "اِرْتَدِدْ"},
{"ind_1p", "نَرْتَدُّ"},
{"ind_1s", "أَرْتَدُّ"},
{"ind_2d", "تَرْتَدَّانِ"},
{"ind_2fp", "تَرْتَدِدْنَ"},
{"ind_2fs", "تَرْتَدِّينَ"},
{"ind_2mp", "تَرْتَدُّونَ"},
{"ind_2ms", "تَرْتَدُّ"},
{"ind_3fd", "تَرْتَدَّانِ"},
{"ind_3fp", "يَرْتَدِدْنَ"},
{"ind_3fs", "تَرْتَدُّ"},
{"ind_3md", "يَرْتَدَّانِ"},
{"ind_3mp", "يَرْتَدُّونَ"},
{"ind_3ms", "يَرْتَدُّ"},
{"past_1p", "اِرْتَدَدْنَا"},
{"past_1s", "اِرْتَدَدْتُ"},
{"past_2d", "اِرْتَدَدْتُمَا"},
{"past_2fp", "اِرْتَدَدْتُنَّ"},
{"past_2fs", "اِرْتَدَدْتِ"},
{"past_2mp", "اِرْتَدَدْتُمْ"},
{"past_2ms", "اِرْتَدَدْتَ"},
{"past_3fd", "اِرْتَدَّتَا"},
{"past_3fp", "اِرْتَدَدْنَ"},
{"past_3fs", "اِرْتَدَّتْ"},
{"past_3md", "اِرْتَدَّا"},
{"past_3mp", "اِرْتَدُّوا"},
{"past_3ms", "اِرْتَدَّ"},
},
},
{
label = "اِحْتَلَّ (p355)", root = "حلل", wazn = "افتعل",
forms = {
{"imp_2d", "اِحْتَلَّا"},
{"imp_2fp", "اِحْتَلِلْنَ"},
{"imp_2fs", "اِحْتَلِّي"},
{"imp_2mp", "اِحْتَلُّوا"},
{"imp_2ms", "اِحْتَلِلْ"},
{"ind_1p", "نَحْتَلُّ"},
{"ind_1s", "أَحْتَلُّ"},
{"ind_2d", "تَحْتَلَّانِ"},
{"ind_2fp", "تَحْتَلِلْنَ"},
{"ind_2fs", "تَحْتَلِّينَ"},
{"ind_2mp", "تَحْتَلُّونَ"},
{"ind_2ms", "تَحْتَلُّ"},
{"ind_3fd", "تَحْتَلَّانِ"},
{"ind_3fp", "يَحْتَلِلْنَ"},
{"ind_3fs", "تَحْتَلُّ"},
{"ind_3md", "يَحْتَلَّانِ"},
{"ind_3mp", "يَحْتَلُّونَ"},
{"ind_3ms", "يَحْتَلُّ"},
{"past_1p", "اِحْتَلَلْنَا"},
{"past_1s", "اِحْتَلَلْتُ"},
{"past_2d", "اِحْتَلَلْتُمَا"},
{"past_2fp", "اِحْتَلَلْتُنَّ"},
{"past_2fs", "اِحْتَلَلْتِ"},
{"past_2mp", "اِحْتَلَلْتُمْ"},
{"past_2ms", "اِحْتَلَلْتَ"},
{"past_3fd", "اِحْتَلَّتَا"},
{"past_3fp", "اِحْتَلَلْنَ"},
{"past_3fs", "اِحْتَلَّتْ"},
{"past_3md", "اِحْتَلَّا"},
{"past_3mp", "اِحْتَلُّوا"},
{"past_3ms", "اِحْتَلَّ"},
},
},
{
label = "اِصْطَفَّ (p356)", root = "صفف", wazn = "افتعل",
forms = {
{"imp_2d", "اِصْطَفَّا"},
{"imp_2fp", "اِصْطَفِفْنَ"},
{"imp_2fs", "اِصْطَفِّي"},
{"imp_2mp", "اِصْطَفُّوا"},
{"imp_2ms", "اِصْطَفِفْ"},
{"ind_1p", "نَصْطَفُّ"},
{"ind_1s", "أَصْطَفُّ"},
{"ind_2d", "تَصْطَفَّانِ"},
{"ind_2fp", "تَصْطَفِفْنَ"},
{"ind_2fs", "تَصْطَفِّينَ"},
{"ind_2mp", "تَصْطَفُّونَ"},
{"ind_2ms", "تَصْطَفُّ"},
{"ind_3fd", "تَصْطَفَّانِ"},
{"ind_3fp", "يَصْطَفِفْنَ"},
{"ind_3fs", "تَصْطَفُّ"},
{"ind_3md", "يَصْطَفَّانِ"},
{"ind_3mp", "يَصْطَفُّونَ"},
{"ind_3ms", "يَصْطَفُّ"},
{"past_1p", "اِصْطَفَفْنَا"},
{"past_1s", "اِصْطَفَفْتُ"},
{"past_2d", "اِصْطَفَفْتُمَا"},
{"past_2fp", "اِصْطَفَفْتُنَّ"},
{"past_2fs", "اِصْطَفَفْتِ"},
{"past_2mp", "اِصْطَفَفْتُمْ"},
{"past_2ms", "اِصْطَفَفْتَ"},
{"past_3fd", "اِصْطَفَّتَا"},
{"past_3fp", "اِصْطَفَفْنَ"},
{"past_3fs", "اِصْطَفَّتْ"},
{"past_3md", "اِصْطَفَّا"},
{"past_3mp", "اِصْطَفُّوا"},
{"past_3ms", "اِصْطَفَّ"},
},
},
{
label = "اِزْدَمَّ (p356)", root = "زمم", wazn = "افتعل",
forms = {
{"imp_2d", "اِزْدَمَّا"},
{"imp_2fp", "اِزْدَمِمْنَ"},
{"imp_2fs", "اِزْدَمِّي"},
{"imp_2mp", "اِزْدَمُّوا"},
{"imp_2ms", "اِزْدَمِمْ"},
{"ind_1p", "نَزْدَمُّ"},
{"ind_1s", "أَزْدَمُّ"},
{"ind_2d", "تَزْدَمَّانِ"},
{"ind_2fp", "تَزْدَمِمْنَ"},
{"ind_2fs", "تَزْدَمِّينَ"},
{"ind_2mp", "تَزْدَمُّونَ"},
{"ind_2ms", "تَزْدَمُّ"},
{"ind_3fd", "تَزْدَمَّانِ"},
{"ind_3fp", "يَزْدَمِمْنَ"},
{"ind_3fs", "تَزْدَمُّ"},
{"ind_3md", "يَزْدَمَّانِ"},
{"ind_3mp", "يَزْدَمُّونَ"},
{"ind_3ms", "يَزْدَمُّ"},
{"past_1p", "اِزْدَمَمْنَا"},
{"past_1s", "اِزْدَمَمْتُ"},
{"past_2d", "اِزْدَمَمْتُمَا"},
{"past_2fp", "اِزْدَمَمْتُنَّ"},
{"past_2fs", "اِزْدَمَمْتِ"},
{"past_2mp", "اِزْدَمَمْتُمْ"},
{"past_2ms", "اِزْدَمَمْتَ"},
{"past_3fd", "اِزْدَمَّتَا"},
{"past_3fp", "اِزْدَمَمْنَ"},
{"past_3fs", "اِزْدَمَّتْ"},
{"past_3md", "اِزْدَمَّا"},
{"past_3mp", "اِزْدَمُّوا"},
{"past_3ms", "اِزْدَمَّ"},
},
},
{
label = "اِئْتَمَنَ (p358)", root = "ئمن", wazn = "افتعل",
forms = {
{"imp_2d", "اِئْتَمِنَا"},
{"imp_2fp", "اِئْتَمِنَّ"},
{"imp_2fs", "اِئْتَمِنِي"},
{"imp_2mp", "اِئْتَمِنُوا"},
{"imp_2ms", "اِئْتَمِنْ"},
{"ind_1p", "نَأْتَمِنُ"},
{"ind_1s", "أَأْتَمِنُ"},
{"ind_2d", "تَأْتَمِنَانِ"},
{"ind_2fp", "تَأْتَمِنَّ"},
{"ind_2fs", "تَأْتَمِنِينَ"},
{"ind_2mp", "تَأْتَمِنُونَ"},
{"ind_2ms", "تَأْتَمِنُ"},
{"ind_3fd", "تَأْتَمِنَانِ"},
{"ind_3fp", "يَأْتَمِنَّ"},
{"ind_3fs", "تَأْتَمِنُ"},
{"ind_3md", "يَأْتَمِنَانِ"},
{"ind_3mp", "يَأْتَمِنُونَ"},
{"ind_3ms", "يَأْتَمِنُ"},
{"past_1p", "اِئْتَمَنَّا"},
{"past_1s", "اِئْتَمَنْتُ"},
{"past_2d", "اِئْتَمَنْتُمَا"},
{"past_2fp", "اِئْتَمَنْتُنَّ"},
{"past_2fs", "اِئْتَمَنْتِ"},
{"past_2mp", "اِئْتَمَنْتُمْ"},
{"past_2ms", "اِئْتَمَنْتَ"},
{"past_3fd", "اِئْتَمَنَتَا"},
{"past_3fp", "اِئْتَمَنَّ"},
{"past_3fs", "اِئْتَمَنَتْ"},
{"past_3md", "اِئْتَمَنَا"},
{"past_3mp", "اِئْتَمَنُوا"},
{"past_3ms", "اِئْتَمَنَ"},
},
},
{
label = "اِئْتَشَرَ (p358)", root = "ئشر", wazn = "افتعل",
forms = {
{"imp_2d", "اِئْتَشِرَا"},
{"imp_2fp", "اِئْتَشِرْنَ"},
{"imp_2fs", "اِئْتَشِرِي"},
{"imp_2mp", "اِئْتَشِرُوا"},
{"imp_2ms", "اِئْتَشِرْ"},
{"ind_1p", "نَأْتَشِرُ"},
{"ind_1s", "أَأْتَشِرُ"},
{"ind_2d", "تَأْتَشِرَانِ"},
{"ind_2fp", "تَأْتَشِرْنَ"},
{"ind_2fs", "تَأْتَشِرِينَ"},
{"ind_2mp", "تَأْتَشِرُونَ"},
{"ind_2ms", "تَأْتَشِرُ"},
{"ind_3fd", "تَأْتَشِرَانِ"},
{"ind_3fp", "يَأْتَشِرْنَ"},
{"ind_3fs", "تَأْتَشِرُ"},
{"ind_3md", "يَأْتَشِرَانِ"},
{"ind_3mp", "يَأْتَشِرُونَ"},
{"ind_3ms", "يَأْتَشِرُ"},
{"past_1p", "اِئْتَشَرْنَا"},
{"past_1s", "اِئْتَشَرْتُ"},
{"past_2d", "اِئْتَشَرْتُمَا"},
{"past_2fp", "اِئْتَشَرْتُنَّ"},
{"past_2fs", "اِئْتَشَرْتِ"},
{"past_2mp", "اِئْتَشَرْتُمْ"},
{"past_2ms", "اِئْتَشَرْتَ"},
{"past_3fd", "اِئْتَشَرَتَا"},
{"past_3fp", "اِئْتَشَرْنَ"},
{"past_3fs", "اِئْتَشَرَتْ"},
{"past_3md", "اِئْتَشَرَا"},
{"past_3mp", "اِئْتَشَرُوا"},
{"past_3ms", "اِئْتَشَرَ"},
},
},
{
label = "اِبْتَدَأَ (p362)", root = "بدأ", wazn = "افتعل",
forms = {
{"imp_2d", "اِبْتَدِئَا"},
{"imp_2fp", "اِبْتَدِئْنَ"},
{"imp_2fs", "اِبْتَدِئِي"},
{"imp_2mp", "اِبْتَدِئُوا"},
{"imp_2ms", "اِبْتَدِئْ"},
{"ind_1p", "نَبْتَدِئُ"},
{"ind_1s", "أَبْتَدِئُ"},
{"ind_2d", "تَبْتَدِئَانِ"},
{"ind_2fp", "تَبْتَدِئْنَ"},
{"ind_2fs", "تَبْتَدِئِينَ"},
{"ind_2mp", "تَبْتَدِئُونَ"},
{"ind_2ms", "تَبْتَدِئُ"},
{"ind_3fd", "تَبْتَدِئَانِ"},
{"ind_3fp", "يَبْتَدِئْنَ"},
{"ind_3fs", "تَبْتَدِئُ"},
{"ind_3md", "يَبْتَدِئَانِ"},
{"ind_3mp", "يَبْتَدِئُونَ"},
{"ind_3ms", "يَبْتَدِئُ"},
{"past_1p", "اِبْتَدَأْنَا"},
{"past_1s", "اِبْتَدَأْتُ"},
{"past_2d", "اِبْتَدَأْتُمَا"},
{"past_2fp", "اِبْتَدَأْتُنَّ"},
{"past_2fs", "اِبْتَدَأْتِ"},
{"past_2mp", "اِبْتَدَأْتُمْ"},
{"past_2ms", "اِبْتَدَأْتَ"},
{"past_3fd", "اِبْتَدَأَتَا"},
{"past_3fp", "اِبْتَدَأْنَ"},
{"past_3fs", "اِبْتَدَأَتْ"},
{"past_3md", "اِبْتَدَآ"},
{"past_3mp", "اِبْتَدَؤُوا"},
{"past_3ms", "اِبْتَدَأَ"},
},
},
{
label = "اِلْتَجَأَ (p362)", root = "لجأ", wazn = "افتعل",
forms = {
{"imp_2d", "اِلْتَجِئَا"},
{"imp_2fp", "اِلْتَجِئْنَ"},
{"imp_2fs", "اِلْتَجِئِي"},
{"imp_2mp", "اِلْتَجِئُوا"},
{"imp_2ms", "اِلْتَجِئْ"},
{"ind_1p", "نَلْتَجِئُ"},
{"ind_1s", "أَلْتَجِئُ"},
{"ind_2d", "تَلْتَجِئَانِ"},
{"ind_2fp", "تَلْتَجِئْنَ"},
{"ind_2fs", "تَلْتَجِئِينَ"},
{"ind_2ms", "تَلْتَجِئُ"},
{"ind_3fd", "تَلْتَجِئَانِ"},
{"ind_3fp", "يَلْتَجِئْنَ"},
{"ind_3fs", "تَلْتَجِئُ"},
{"ind_3md", "يَلْتَجِئَانِ"},
{"ind_3ms", "يَلْتَجِئُ"},
{"past_1p", "اِلْتَجَأْنَا"},
{"past_1s", "اِلْتَجَأْتُ"},
{"past_2d", "اِلْتَجَأْتُمَا"},
{"past_2fp", "اِلْتَجَأْتُنَّ"},
{"past_2fs", "اِلْتَجَأْتِ"},
{"past_2mp", "اِلْتَجَأْتُمْ"},
{"past_2ms", "اِلْتَجَأْتَ"},
{"past_3fd", "اِلْتَجَأَتَا"},
{"past_3fp", "اِلْتَجَأْنَ"},
{"past_3fs", "اِلْتَجَأَتْ"},
{"past_3md", "اِلْتَجَآ"},
{"past_3mp", "اِلْتَجَؤُوا"},
{"past_3ms", "اِلْتَجَأَ"},
},
},
{
label = "اِسْتَوَى (p371)", root = "سوي", wazn = "افتعل",
forms = {
{"imp_2d", "اِسْتَوِيَا"},
{"imp_2fp", "اِسْتَوِينَ"},
{"imp_2fs", "اِسْتَوِي"},
{"imp_2mp", "اِسْتَوُوا"},
{"imp_2ms", "اِسْتَوِ"},
{"ind_1p", "نَسْتَوِي"},
{"ind_1s", "أَسْتَوِي"},
{"ind_2d", "تَسْتَوِيَانِ"},
{"ind_2fp", "تَسْتَوِينَ"},
{"ind_2fs", "تَسْتَوِينَ"},
{"ind_2mp", "تَسْتَوُونَ"},
{"ind_2ms", "تَسْتَوِي"},
{"ind_3fd", "تَسْتَوِيَانِ"},
{"ind_3fp", "يَسْتَوِينَ"},
{"ind_3fs", "تَسْتَوِي"},
{"ind_3md", "يَسْتَوِيَانِ"},
{"ind_3mp", "يَسْتَوُونَ"},
{"ind_3ms", "يَسْتَوِي"},
{"past_1p", "اِسْتَوَيْنَا"},
{"past_1s", "اِسْتَوَيْتُ"},
{"past_2d", "اِسْتَوَيْتُمَا"},
{"past_2fp", "اِسْتَوَيْتُنَّ"},
{"past_2fs", "اِسْتَوَيْتِ"},
{"past_2mp", "اِسْتَوَيْتُمْ"},
{"past_2ms", "اِسْتَوَيْتَ"},
{"past_3fd", "اِسْتَوَتَا"},
{"past_3fp", "اِسْتَوَيْنَ"},
{"past_3fs", "اِسْتَوَتْ"},
{"past_3md", "اِسْتَوَيَا"},
{"past_3mp", "اِسْتَوَوْا"},
{"past_3ms", "اِسْتَوَى"},
},
},
{
label = "اِلْتَوَى (p371)", root = "لوي", wazn = "افتعل",
forms = {
{"imp_2d", "اِلْتَوِيَا"},
{"imp_2fp", "اِلْتَوِينَ"},
{"imp_2fs", "اِلْتَوِي"},
{"imp_2mp", "اِلْتَوُوا"},
{"imp_2ms", "اِلْتَوِ"},
{"ind_1p", "نَلْتَوِي"},
{"ind_1s", "أَلْتَوِي"},
{"ind_2d", "تَلْتَوِيَانِ"},
{"ind_2fp", "تَلْتَوِينَ"},
{"ind_2fs", "تَلْتَوِينَ"},
{"ind_2mp", "تَلْتَوُونَ"},
{"ind_2ms", "تَلْتَوِي"},
{"ind_3fd", "تَلْتَوِيَانِ"},
{"ind_3fs", "تَلْتَوِي"},
{"ind_3md", "يَلْتَوِيَانِ"},
{"ind_3mp", "يَلْتَوُونَ"},
{"ind_3ms", "يَلْتَوِي"},
{"past_1p", "اِلْتَوَيْنَا"},
{"past_1s", "اِلْتَوَيْتُ"},
{"past_2d", "اِلْتَوَيْتُمَا"},
{"past_2fp", "اِلْتَوَيْتُنَّ"},
{"past_2fs", "اِلْتَوَيْتِ"},
{"past_2mp", "اِلْتَوَيْتُمْ"},
{"past_2ms", "اِلْتَوَيْتَ"},
{"past_3fd", "اِلْتَوَتَا"},
{"past_3fp", "اِلْتَوَيْنَ"},
{"past_3fs", "اِلْتَوَتْ"},
{"past_3md", "اِلْتَوَيَا"},
{"past_3mp", "اِلْتَوَوْا"},
{"past_3ms", "اِلْتَوَى"},
},
},
{
label = "اِزْرَقَّ (p373)", root = "زرق", wazn = "افعلّ",
forms = {
{"imp_2d", "اِزْرَقَّا"},
{"imp_2fp", "اِزْرَقِقْنَ"},
{"imp_2fs", "اِزْرَقِّي"},
{"imp_2mp", "اِزْرَقُّوا"},
{"imp_2ms", "اِزْرَقَّ"},
{"ind_1p", "نَزْرَقُّ"},
{"ind_1s", "أَزْرَقُّ"},
{"ind_2d", "تَزْرَقَّانِ"},
{"ind_2fp", "تَزْرَقِقْنَ"},
{"ind_2fs", "تَزْرَقِّينَ"},
{"ind_2mp", "تَزْرَقُّونَ"},
{"ind_2ms", "تَزْرَقُّ"},
{"ind_3fd", "تَزْرَقَّانِ"},
{"ind_3fp", "يَزْرَقِقْنَ"},
{"ind_3fs", "تَزْرَقُّ"},
{"ind_3md", "يَزْرَقَّانِ"},
{"ind_3mp", "يَزْرَقُّونَ"},
{"ind_3ms", "يَزْرَقُّ"},
{"past_1p", "اِزْرَقَقْنَا"},
{"past_1s", "اِزْرَقَقْتُ"},
{"past_2d", "اِزْرَقَقْتُمَا"},
{"past_2fp", "اِزْرَقَقْتُنَّ"},
{"past_2fs", "اِزْرَقَقْتِ"},
{"past_2mp", "اِزْرَقَقْتُمْ"},
{"past_2ms", "اِزْرَقَقْتَ"},
{"past_3fd", "اِزْرَقَّتَا"},
{"past_3fp", "اِزْرَقَقْنَ"},
{"past_3fs", "اِزْرَقَّتْ"},
{"past_3md", "اِزْرَقَّا"},
{"past_3mp", "اِزْرَقُّوا"},
{"past_3ms", "اِزْرَقَّ"},
},
},
{
label = "اِخْرَجَّ (p373)", root = "خرج", wazn = "افعلّ",
forms = {
{"imp_2d", "اِخْرَجَّا"},
{"imp_2fp", "اِخْرَجِجْنَ"},
{"imp_2fs", "اِخْرَجِّي"},
{"imp_2mp", "اِخْرَجُّوا"},
{"imp_2ms", "اِخْرَجَّ"},
{"ind_1p", "نَخْرَجُّ"},
{"ind_1s", "أَخْرَجُّ"},
{"ind_2d", "تَخْرَجَّانِ"},
{"ind_2fp", "تَخْرَجِجْنَ"},
{"ind_2fs", "تَخْرَجِّينَ"},
{"ind_2mp", "تَخْرَجُّونَ"},
{"ind_2ms", "تَخْرَجُّ"},
{"ind_3fd", "تَخْرَجَّانِ"},
{"ind_3fp", "يَخْرَجِجْنَ"},
{"ind_3fs", "تَخْرَجُّ"},
{"ind_3md", "يَخْرَجَّانِ"},
{"ind_3mp", "يَخْرَجُّونَ"},
{"ind_3ms", "يَخْرَجُّ"},
{"past_1p", "اِخْرَجَجْنَا"},
{"past_1s", "اِخْرَجَجْتُ"},
{"past_2d", "اِخْرَجَجْتُمَا"},
{"past_2fp", "اِخْرَجَجْتُنَّ"},
{"past_2fs", "اِخْرَجَجْتِ"},
{"past_2mp", "اِخْرَجَجْتُمْ"},
{"past_2ms", "اِخْرَجَجْتَ"},
{"past_3fd", "اِخْرَجَّتَا"},
{"past_3fp", "اِخْرَجَجْنَ"},
{"past_3fs", "اِخْرَجَّتْ"},
{"past_3md", "اِخْرَجَّا"},
{"past_3mp", "اِخْرَجُّوا"},
{"past_3ms", "اِخْرَجَّ"},
},
},
{
label = "اِسْوَدَّ (p374)", root = "سود", wazn = "افعلّ",
forms = {
{"imp_2d", "اِسْوَدَّا"},
{"imp_2fp", "اِسْوَدِدْنَ"},
{"imp_2fs", "اِسْوَدِّي"},
{"imp_2mp", "اِسْوَدُّوا"},
{"imp_2ms", "اِسْوَدَّ"},
{"ind_1p", "نَسْوَدُّ"},
{"ind_1s", "أَسْوَدُّ"},
{"ind_2d", "تَسْوَدَّانِ"},
{"ind_2fp", "تَسْوَدِدْنَ"},
{"ind_2fs", "تَسْوَدِّينَ"},
{"ind_2mp", "تَسْوَدُّونَ"},
{"ind_2ms", "تَسْوَدُّ"},
{"ind_3fd", "تَسْوَدَّانِ"},
{"ind_3fp", "يَسْوَدِدْنَ"},
{"ind_3fs", "تَسْوَدُّ"},
{"ind_3md", "يَسْوَدَّانِ"},
{"ind_3mp", "يَسْوَدُّونَ"},
{"ind_3ms", "يَسْوَدُّ"},
{"past_1p", "اِسْوَدَدْنَا"},
{"past_1s", "اِسْوَدَدْتُ"},
{"past_2d", "اِسْوَدَدْتُمَا"},
{"past_2fp", "اِسْوَدَدْتُنَّ"},
{"past_2fs", "اِسْوَدَدْتِ"},
{"past_2mp", "اِسْوَدَدْتُمْ"},
{"past_2ms", "اِسْوَدَدْتَ"},
{"past_3fd", "اِسْوَدَّتَا"},
{"past_3fp", "اِسْوَدَدْنَ"},
{"past_3fs", "اِسْوَدَّتْ"},
{"past_3md", "اِسْوَدَّا"},
{"past_3mp", "اِسْوَدُّوا"},
{"past_3ms", "اِسْوَدَّ"},
},
},
{
label = "اِبْيَضَّ (p374)", root = "بيض", wazn = "افعلّ",
forms = {
{"imp_2d", "اِبْيَضَّا"},
{"imp_2fp", "اِبْيَضِضْنَ"},
{"imp_2fs", "اِبْيَضِّي"},
{"imp_2mp", "اِبْيَضُّوا"},
{"imp_2ms", "اِبْيَضَّ"},
{"ind_1p", "نَبْيَضُّ"},
{"ind_1s", "أَبْيَضُّ"},
{"ind_2d", "تَبْيَضَّانِ"},
{"ind_2fp", "تَبْيَضِضْنَ"},
{"ind_2fs", "تَبْيَضِّينَ"},
{"ind_2mp", "تَبْيَضُّونَ"},
{"ind_2ms", "تَبْيَضُّ"},
{"ind_3fd", "تَبْيَضَّانِ"},
{"ind_3fp", "يَبْيَضِضْنَ"},
{"ind_3fs", "تَبْيَضُّ"},
{"ind_3md", "يَبْيَضَّانِ"},
{"ind_3mp", "يَبْيَضُّونَ"},
{"ind_3ms", "يَبْيَضُّ"},
{"past_1p", "اِبْيَضَضْنَا"},
{"past_1s", "اِبْيَضَضْتُ"},
{"past_2d", "اِبْيَضَضْتُمَا"},
{"past_2fp", "اِبْيَضَضْتُنَّ"},
{"past_2fs", "اِبْيَضَضْتِ"},
{"past_2mp", "اِبْيَضَضْتُمْ"},
{"past_2ms", "اِبْيَضَضْتَ"},
{"past_3fd", "اِبْيَضَّتَا"},
{"past_3fp", "اِبْيَضَضْنَ"},
{"past_3fs", "اِبْيَضَّتْ"},
{"past_3md", "اِبْيَضَّا"},
{"past_3mp", "اِبْيَضُّوا"},
{"past_3ms", "اِبْيَضَّ"},
},
},
{
label = "اِسْتَغْرَبَ (p377)", root = "غرب", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَغْرِبَا"},
{"imp_2fp", "اِسْتَغْرِبْنَ"},
{"imp_2fs", "اِسْتَغْرِبِي"},
{"imp_2mp", "اِسْتَغْرِبُوا"},
{"imp_2ms", "اِسْتَغْرِبْ"},
{"ind_1p", "نَسْتَغْرِبُ"},
{"ind_1s", "أَسْتَغْرِبُ"},
{"ind_2d", "تَسْتَغْرِبَانِ"},
{"ind_2fp", "تَسْتَغْرِبْنَ"},
{"ind_2fs", "تَسْتَغْرِبِينَ"},
{"ind_2mp", "تَسْتَغْرِبُونَ"},
{"ind_2ms", "تَسْتَغْرِبُ"},
{"ind_3fd", "تَسْتَغْرِبَانِ"},
{"ind_3fp", "يَسْتَغْرِبْنَ"},
{"ind_3fs", "تَسْتَغْرِبُ"},
{"ind_3md", "يَسْتَغْرِبَانِ"},
{"ind_3mp", "يَسْتَغْرِبُونَ"},
{"ind_3ms", "يَسْتَغْرِبُ"},
{"past_1p", "اِسْتَغْرَبْنَا"},
{"past_1s", "اِسْتَغْرَبْتُ"},
{"past_2d", "اِسْتَغْرَبْتُمَا"},
{"past_2fp", "اِسْتَغْرَبْتُنَّ"},
{"past_2fs", "اِسْتَغْرَبْتِ"},
{"past_2mp", "اِسْتَغْرَبْتُمْ"},
{"past_2ms", "اِسْتَغْرَبْتَ"},
{"past_3fd", "اِسْتَغْرَبَتَا"},
{"past_3fp", "اِسْتَغْرَبْنَ"},
{"past_3fs", "اِسْتَغْرَبَتْ"},
{"past_3md", "اِسْتَغْرَبَا"},
{"past_3mp", "اِسْتَغْرَبُوا"},
{"past_3ms", "اِسْتَغْرَبَ"},
},
},
{
label = "اِسْتَقْبَلَ (p377)", root = "قبل", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَقْبِلَا"},
{"imp_2fp", "اِسْتَقْبِلْنَ"},
{"imp_2fs", "اِسْتَقْبِلِي"},
{"imp_2mp", "اِسْتَقْبِلُوا"},
{"imp_2ms", "اِسْتَقْبِلْ"},
{"ind_1p", "نَسْتَقْبِلُ"},
{"ind_1s", "أَسْتَقْبِلُ"},
{"ind_2d", "تَسْتَقْبِلَانِ"},
{"ind_2fp", "تَسْتَقْبِلْنَ"},
{"ind_2fs", "تَسْتَقْبِلِينَ"},
{"ind_2mp", "تَسْتَقْبِلُونَ"},
{"ind_2ms", "تَسْتَقْبِلُ"},
{"ind_3fd", "تَسْتَقْبِلَانِ"},
{"ind_3fp", "يَسْتَقْبِلْنَ"},
{"ind_3fs", "تَسْتَقْبِلُ"},
{"ind_3md", "يَسْتَقْبِلَانِ"},
{"ind_3mp", "يَسْتَقْبِلُونَ"},
{"ind_3ms", "يَسْتَقْبِلُ"},
{"past_1p", "اِسْتَقْبَلْنَا"},
{"past_1s", "اِسْتَقْبَلْتُ"},
{"past_2d", "اِسْتَقْبَلْتُمَا"},
{"past_2fp", "اِسْتَقْبَلْتُنَّ"},
{"past_2fs", "اِسْتَقْبَلْتِ"},
{"past_2mp", "اِسْتَقْبَلْتُمْ"},
{"past_2ms", "اِسْتَقْبَلْتَ"},
{"past_3fd", "اِسْتَقْبَلَتَا"},
{"past_3fp", "اِسْتَقْبَلْنَ"},
{"past_3fs", "اِسْتَقْبَلَتْ"},
{"past_3md", "اِسْتَقْبَلَا"},
{"past_3mp", "اِسْتَقْبَلُوا"},
{"past_3ms", "اِسْتَقْبَلَ"},
},
},
{
label = "اِسْتَرَدَّ (p378)", root = "ردد", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَرِدَّا"},
{"imp_2fp", "اِسْتَرْدِدْنَ"},
{"imp_2fs", "اِسْتَرِدِّي"},
{"imp_2mp", "اِسْتَرِدُّوا"},
{"imp_2ms", "اِسْتَرْدِدْ"},
{"ind_1p", "نَسْتَرِدُّ"},
{"ind_1s", "أَسْتَرِدُّ"},
{"ind_2d", "تَسْتَرِدَّانِ"},
{"ind_2fp", "تَسْتَرْدِدْنَ"},
{"ind_2fs", "تَسْتَرِدِّينَ"},
{"ind_2mp", "تَسْتَرِدُّونَ"},
{"ind_2ms", "تَسْتَرِدُّ"},
{"ind_3fd", "تَسْتَرِدَّانِ"},
{"ind_3fp", "يَسْتَرْدِدْنَ"},
{"ind_3fs", "تَسْتَرِدُّ"},
{"ind_3md", "يَسْتَرِدَّانِ"},
{"ind_3mp", "يَسْتَرِدُّونَ"},
{"ind_3ms", "يَسْتَرِدُّ"},
{"past_1p", "اِسْتَرْدَدْنَا"},
{"past_1s", "اِسْتَرْدَدْتُ"},
{"past_2d", "اِسْتَرْدَدْتُمَا"},
{"past_2fp", "اِسْتَرْدَدْتُنَّ"},
{"past_2fs", "اِسْتَرْدَدْتِ"},
{"past_2mp", "اِسْتَرْدَدْتُمْ"},
{"past_2ms", "اِسْتَرْدَدْتَ"},
{"past_3fd", "اِسْتَرَدَّتَا"},
{"past_3fp", "اِسْتَرْدَدْنَ"},
{"past_3fs", "اِسْتَرَدَّتْ"},
{"past_3md", "اِسْتَرَدَّا"},
{"past_3mp", "اِسْتَرَدُّوا"},
{"past_3ms", "اِسْتَرَدَّ"},
},
},
}
q4yhkeg8ile9veazhguxyd08ko2ar9e
1159083
1159025
2026-09-10T19:34:11Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159083
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 9 من 16.
return {
{
label = "أَحْيا (p302)", root = "حيي", wazn = "أفعل",
forms = {
{"imp_2d", "أَحِيَّا"},
{"imp_2fp", "أَحْيِينَ"},
{"imp_2fs", "أَحْيِي"},
{"imp_2mp", "أَحْيُوا"},
{"imp_2ms", "أَحْيِ"},
{"ind_1p", "نُحْيِي"},
{"ind_1s", "أُحْيِي"},
{"ind_2d", "تُحِيَّانِ"},
{"ind_2fs", "تُحْيِينَ"},
{"ind_2mp", "تُحْيُونَ"},
{"ind_2ms", "تُحْيِي"},
{"ind_3fd", "تُحِيَّانِ"},
{"ind_3fp", "يُحْيِينَ"},
{"ind_3fs", "تُحْيِي"},
{"ind_3md", "يُحِيَّانِ"},
{"ind_3mp", "يُحْيُونَ"},
{"ind_3ms", "يُحْيِي"},
{"past_1p", "أَحْيَيْنَا"},
{"past_1s", "أَحْيَيْتُ"},
{"past_2d", "أَحْيَيْتُمَا"},
{"past_2fp", "أَحْيَيْتُنَّ"},
{"past_2fs", "أَحْيَيْتِ"},
{"past_2mp", "أَحْيَيْتُمْ"},
{"past_2ms", "أَحْيَيْتَ"},
{"past_3fd", "أَحْيَتَا"},
{"past_3fp", "أَحْيَيْنَ"},
{"past_3fs", "أَحْيَتْ"},
{"past_3md", "أَحَيَّا"},
{"past_3mp", "أَحْيَوْا"},
{"past_3ms", "أَحْيَا"},
},
},
{
label = "تَوانَى (p335)", root = "وني", wazn = "تفاعل",
forms = {
{"imp_2d", "تَوَانَيَا"},
{"imp_2fp", "تَوَانَيْنَ"},
{"imp_2fs", "تَوَانَيْ"},
{"imp_2mp", "تَوَانَوْا"},
{"imp_2ms", "تَوَانَ"},
{"ind_1p", "نَتَوَانَى"},
{"ind_1s", "أَتَوَانَى"},
{"ind_2d", "تَتَوَانَيَانِ"},
{"ind_2fp", "تَتَوَانَيْنَ"},
{"ind_2fs", "تَتَوَانَيْنَ"},
{"ind_2mp", "تَتَوَانَوْنَ"},
{"ind_2ms", "تَتَوَانَى"},
{"ind_3fd", "تَتَوَانَيَانِ"},
{"ind_3fp", "يَتَوَانَيْنَ"},
{"ind_3fs", "تَتَوَانَى"},
{"ind_3md", "يَتَوَانَيَانِ"},
{"ind_3mp", "يَتَوَانَوْنَ"},
{"ind_3ms", "يَتَوَانَى"},
{"past_1p", "تَوَانَيْنَا"},
{"past_1s", "تَوَانَيْتُ"},
{"past_2d", "تَوَانَيْتُمَا"},
{"past_2fp", "تَوَانَيْتُنَّ"},
{"past_2fs", "تَوَانَيْتِ"},
{"past_2mp", "تَوَانَيْتُمْ"},
{"past_2ms", "تَوَانَيْتَ"},
{"past_3fd", "تَوَانَتَا"},
{"past_3fp", "تَوَانَيْنَ"},
{"past_3fs", "تَوَانَتْ"},
{"past_3md", "تَوَانَيَا"},
{"past_3mp", "تَوَانَوْا"},
{"past_3ms", "تَوَانَى"},
},
},
{
label = "تَوَارَى (p335)", root = "وري", wazn = "تفاعل",
forms = {
{"imp_2d", "تَوَارَيَا"},
{"imp_2fp", "تَوَارَيْنَ"},
{"imp_2fs", "تَوَارَيْ"},
{"imp_2mp", "تَوَارَوْا"},
{"imp_2ms", "تَوَارَ"},
{"ind_1p", "نَتَوَارَى"},
{"ind_1s", "أَتَوَارَى"},
{"ind_2d", "تَتَوَارَيَانِ"},
{"ind_2fp", "تَتَوَارَيْنَ"},
{"ind_2fs", "تَتَوَارَيْنَ"},
{"ind_2mp", "تَتَوَارَوْنَ"},
{"ind_2ms", "تَتَوَارَى"},
{"ind_3fd", "تَتَوَارَيَانِ"},
{"ind_3fp", "يَتَوَارَيْنَ"},
{"ind_3fs", "تَتَوَارَى"},
{"ind_3md", "يَتَوَارَيَانِ"},
{"ind_3mp", "يَتَوَارَوْنَ"},
{"ind_3ms", "يَتَوَارَى"},
{"past_1p", "تَوَارَيْنَا"},
{"past_1s", "تَوَارَيْتُ"},
{"past_2d", "تَوَارَيْتُمَا"},
{"past_2fp", "تَوَارَيْتُنَّ"},
{"past_2fs", "تَوَارَيْتِ"},
{"past_2mp", "تَوَارَيْتُمْ"},
{"past_2ms", "تَوَارَيْتَ"},
{"past_3fd", "تَوَارَتَا"},
{"past_3fp", "تَوَارَيْنَ"},
{"past_3fs", "تَوَارَتْ"},
{"past_3md", "تَوَارَيَا"},
{"past_3mp", "تَوَارَوْا"},
{"past_3ms", "تَوَارَى"},
},
},
{
label = "اِنْشَقَّ (p340)", root = "شقق", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْشَقَّا"},
{"imp_2fp", "اِنْشَقِقْنَ"},
{"imp_2fs", "اِنْشَقِّي"},
{"imp_2mp", "اِنْشَقُّوا"},
{"imp_2ms", "اِنْشَقِقْ"},
{"ind_1p", "نَنْشَقُّ"},
{"ind_1s", "أَنْشَقُّ"},
{"ind_2d", "تَنْشَقَّانِ"},
{"ind_2fp", "تَنْشَقِقْنَ"},
{"ind_2fs", "تَنْشَقِّينَ"},
{"ind_2mp", "تَنْشَقُّونَ"},
{"ind_2ms", "تَنْشَقُّ"},
{"ind_3fd", "تَنْشَقَّانِ"},
{"ind_3fp", "يَنْشَقِقْنَ"},
{"ind_3fs", "تَنْشَقُّ"},
{"ind_3md", "يَنْشَقَّانِ"},
{"ind_3mp", "يَنْشَقُّونَ"},
{"ind_3ms", "يَنْشَقُّ"},
{"past_1p", "اِنْشَقَقْنَا"},
{"past_1s", "اِنْشَقَقْتُ"},
{"past_2d", "اِنْشَقَقْتُمَا"},
{"past_2fp", "اِنْشَقَقْتُنَّ"},
{"past_2fs", "اِنْشَقَقْتِ"},
{"past_2mp", "اِنْشَقَقْتُمْ"},
{"past_2ms", "اِنْشَقَقْتَ"},
{"past_3fd", "اِنْشَقَّتَا"},
{"past_3fp", "اِنْشَقَقْنَ"},
{"past_3fs", "اِنْشَقَّتْ"},
{"past_3md", "اِنْشَقَّا"},
{"past_3mp", "اِنْشَقُّوا"},
{"past_3ms", "اِنْشَقَّ"},
},
},
{
label = "اِنْدَسَّ (p340)", root = "دسس", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْدَسَّا"},
{"imp_2fp", "اِنْدَسِسْنَ"},
{"imp_2fs", "اِنْدَسِّي"},
{"imp_2mp", "اِنْدَسُّوا"},
{"imp_2ms", "اِنْدَسِسْ"},
{"ind_1p", "نَنْدَسُّ"},
{"ind_1s", "أَنْدَسُّ"},
{"ind_2d", "تَنْدَسَّانِ"},
{"ind_2fp", "تَنْدَسِسْنَ"},
{"ind_2fs", "تَنْدَسِّينَ"},
{"ind_2mp", "تَنْدَسُّونَ"},
{"ind_2ms", "تَنْدَسُّ"},
{"ind_3fd", "تَنْدَسَّانِ"},
{"ind_3fp", "يَنْدَسِسْنَ"},
{"ind_3fs", "تَنْدَسُّ"},
{"ind_3md", "يَنْدَسَّانِ"},
{"ind_3mp", "يَنْدَسُّونَ"},
{"ind_3ms", "يَنْدَسُّ"},
{"past_1p", "اِنْدَسَسْنَا"},
{"past_1s", "اِنْدَسَسْتُ"},
{"past_2d", "اِنْدَسَسْتُمَا"},
{"past_2fp", "اِنْدَسَسْتُنَّ"},
{"past_2fs", "اِنْدَسَسْتِ"},
{"past_2mp", "اِنْدَسَسْتُمْ"},
{"past_2ms", "اِنْدَسَسْتَ"},
{"past_3fd", "اِنْدَسَّتَا"},
{"past_3fp", "اِنْدَسَسْنَ"},
{"past_3fs", "اِنْدَسَّتْ"},
{"past_3md", "اِنْدَسَّا"},
{"past_3mp", "اِنْدَسُّوا"},
{"past_3ms", "اِنْدَسَّ"},
},
},
{
label = "اِنْدَرَأَ (p342)", root = "درأ", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْدَرِئَا"},
{"imp_2fp", "اِنْدَرِئْنَ"},
{"imp_2fs", "اِنْدَرِئِي"},
{"imp_2mp", "اِنْدَرِئُوا"},
{"imp_2ms", "اِنْدَرِئْ"},
{"ind_1p", "نَنْدَرِئُ"},
{"ind_1s", "أَنْدَرِئُ"},
{"ind_2d", "تَنْدَرِئَانِ"},
{"ind_2fp", "تَنْدَرِئْنَ"},
{"ind_2fs", "تَنْدَرِئِينَ"},
{"ind_2mp", "تَنْدَرِئُونَ"},
{"ind_2ms", "تَنْدَرِئُ"},
{"ind_3fd", "تَنْدَرِئَانِ"},
{"ind_3fp", "يَنْدَرِئْنَ"},
{"ind_3fs", "تَنْدَرِئُ"},
{"ind_3md", "يَنْدَرِئَانِ"},
{"ind_3mp", "يَنْدَرِئُونَ"},
{"ind_3ms", "يَنْدَرِئُ"},
{"past_1p", "اِنْدَرَأْنَا"},
{"past_1s", "اِنْدَرَأْتُ"},
{"past_2d", "اِنْدَرَأْتُمَا"},
{"past_2fp", "اِنْدَرَأْتُنَّ"},
{"past_2fs", "اِنْدَرَأْتِ"},
{"past_2mp", "اِنْدَرَأْتُمْ"},
{"past_2ms", "اِنْدَرَأْتَ"},
{"past_3fd", "اِنْدَرَأَتَا"},
{"past_3fp", "اِنْدَرَأْنَ"},
{"past_3fs", "اِنْدَرَأَتْ"},
{"past_3md", "اِنْدَرَآ"},
{"past_3mp", "اِنْدَرَؤُوا"},
{"past_3ms", "اِنْدَرَأَ"},
},
},
{
label = "اِنْكَفَأَ (p342)", root = "كفأ", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْكَفِئَا"},
{"imp_2fp", "اِنْكَفِئْنَ"},
{"imp_2fs", "اِنْكَفِئِي"},
{"imp_2mp", "اِنْكَفِئُوا"},
{"imp_2ms", "اِنْكَفِئْ"},
{"ind_1p", "نَنْكَفِئُ"},
{"ind_1s", "أَنْكَفِئُ"},
{"ind_2d", "تَنْكَفِئَانِ"},
{"ind_2fp", "تَنْكَفِئْنَ"},
{"ind_2fs", "تَنْكَفِئِينَ"},
{"ind_2mp", "تَنْكَفِئُونَ"},
{"ind_2ms", "تَنْكَفِئُ"},
{"ind_3fd", "تَنْكَفِئَانِ"},
{"ind_3fp", "يَنْكَفِئْنَ"},
{"ind_3fs", "تَنْكَفِئُ"},
{"ind_3md", "يَنْكَفِئَانِ"},
{"ind_3mp", "يَنْكَفِئُونَ"},
{"ind_3ms", "يَنْكَفِئُ"},
{"past_1p", "اِنْكَفَأْنَا"},
{"past_1s", "اِنْكَفَأْتُ"},
{"past_2d", "اِنْكَفَأْتُمَا"},
{"past_2fp", "اِنْكَفَأْتُنَّ"},
{"past_2fs", "اِنْكَفَأْتِ"},
{"past_2mp", "اِنْكَفَأْتُمْ"},
{"past_2ms", "اِنْكَفَأْتَ"},
{"past_3fd", "اِنْكَفَأَتَا"},
{"past_3fp", "اِنْكَفَأْنَ"},
{"past_3fs", "اِنْكَفَأَتْ"},
{"past_3md", "اِنْكَفَآ"},
{"past_3mp", "اِنْكَفَؤُوا"},
{"past_3ms", "اِنْكَفَأَ"},
},
},
{
label = "اِنْزَوَى (p348)", root = "زوي", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْزَوِيَا"},
{"imp_2fp", "اِنْزَوِينَ"},
{"imp_2fs", "اِنْزَوِي"},
{"imp_2mp", "اِنْزَوُوا"},
{"imp_2ms", "اِنْزَوِ"},
{"ind_1p", "نَنْزَوِي"},
{"ind_1s", "أَنْزَوِي"},
{"ind_2d", "تَنْزَوِيَانِ"},
{"ind_2fp", "تَنْزَوِينَ"},
{"ind_2fs", "تَنْزَوِينَ"},
{"ind_2mp", "تَنْزَوُونَ"},
{"ind_2ms", "تَنْزَوِي"},
{"ind_3fd", "تَنْزَوِيَانِ"},
{"ind_3fp", "يَنْزَوِينَ"},
{"ind_3fs", "تَنْزَوِي"},
{"ind_3md", "يَنْزَوِيَانِ"},
{"ind_3mp", "يَنْزَوُونَ"},
{"ind_3ms", "يَنْزَوِي"},
{"past_1p", "اِنْزَوَيْنَا"},
{"past_1s", "اِنْزَوَيْتُ"},
{"past_2d", "اِنْزَوَيْتُمَا"},
{"past_2fp", "اِنْزَوَيْتُنَّ"},
{"past_2fs", "اِنْزَوَيْتِ"},
{"past_2mp", "اِنْزَوَيْتُمْ"},
{"past_2ms", "اِنْزَوَيْتَ"},
{"past_3fd", "اِنْزَوَتَا"},
{"past_3fp", "اِنْزَوَيْنَ"},
{"past_3fs", "اِنْزَوَتْ"},
{"past_3md", "اِنْزَوَيَا"},
{"past_3mp", "اِنْزَوَوْا"},
{"past_3ms", "اِنْزَوَى"},
},
},
{
label = "اِنْشَوَى (p348)", root = "شوي", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْشَوِيَا"},
{"imp_2fp", "اِنْشَوِينَ"},
{"imp_2fs", "اِنْشَوِي"},
{"imp_2mp", "اِنْشَوُوا"},
{"imp_2ms", "اِنْشَوِ"},
{"ind_1p", "نَنْشَوِي"},
{"ind_1s", "أَنْشَوِي"},
{"ind_2d", "تَنْشَوِيَانِ"},
{"ind_2fp", "تَنْشَوِينَ"},
{"ind_2fs", "تَنْشَوِينَ"},
{"ind_2mp", "تَنْشَوُونَ"},
{"ind_2ms", "تَنْشَوِي"},
{"ind_3fd", "تَنْشَوِيَانِ"},
{"ind_3fp", "يَنْشَوِينَ"},
{"ind_3fs", "تَنْشَوِي"},
{"ind_3md", "يَنْشَوِيَانِ"},
{"ind_3mp", "يَنْشَوُونَ"},
{"ind_3ms", "يَنْشَوِي"},
{"past_1p", "اِنْشَوَيْنَا"},
{"past_1s", "اِنْشَوَيْتُ"},
{"past_2d", "اِنْشَوَيْتُمَا"},
{"past_2fp", "اِنْشَوَيْتُنَّ"},
{"past_2fs", "اِنْشَوَيْتِ"},
{"past_2mp", "اِنْشَوَيْتُمْ"},
{"past_2ms", "اِنْشَوَيْتَ"},
{"past_3fd", "اِنْشَوَتَا"},
{"past_3fp", "اِنْشَوَيْنَ"},
{"past_3fs", "اِنْشَوَتْ"},
{"past_3md", "اِنْشَوَيَا"},
{"past_3mp", "اِنْشَوَوْا"},
{"past_3ms", "اِنْشَوَى"},
},
},
{
label = "اِرْتَبَطَ (p350)", root = "ربط", wazn = "افتعل",
forms = {
{"imp_2d", "اِرْتَبِطَا"},
{"imp_2fp", "اِرْتَبِطْنَ"},
{"imp_2fs", "اِرْتَبِطِي"},
{"imp_2mp", "اِرْتَبِطُوا"},
{"imp_2ms", "اِرْتَبِطْ"},
{"ind_1p", "نَرْتَبِطُ"},
{"ind_1s", "أَرْتَبِطُ"},
{"ind_2d", "تَرْتَبِطَانِ"},
{"ind_2fp", "تَرْتَبِطْنَ"},
{"ind_2fs", "تَرْتَبِطِينَ"},
{"ind_2mp", "تَرْتَبِطُونَ"},
{"ind_2ms", "تَرْتَبِطُ"},
{"ind_3fd", "تَرْتَبِطَانِ"},
{"ind_3fp", "يَرْتَبِطْنَ"},
{"ind_3fs", "تَرْتَبِطُ"},
{"ind_3md", "يَرْتَبِطَانِ"},
{"ind_3mp", "يَرْتَبِطُونَ"},
{"ind_3ms", "يَرْتَبِطُ"},
{"past_1p", "اِرْتَبَطْنَا"},
{"past_1s", "اِرْتَبَطْتُ"},
{"past_2d", "اِرْتَبَطْتُمَا"},
{"past_2fp", "اِرْتَبَطْتُنَّ"},
{"past_2fs", "اِرْتَبَطْتِ"},
{"past_2mp", "اِرْتَبَطْتُمْ"},
{"past_2ms", "اِرْتَبَطْتَ"},
{"past_3fd", "اِرْتَبَطَتَا"},
{"past_3fp", "اِرْتَبَطْنَ"},
{"past_3fs", "اِرْتَبَطَتْ"},
{"past_3md", "اِرْتَبَطَا"},
{"past_3mp", "اِرْتَبَطُوا"},
{"past_3ms", "اِرْتَبَطَ"},
},
},
{
label = "اِمْتَزَجَ (p350)", root = "مزج", wazn = "افتعل",
forms = {
{"imp_2d", "اِمْتَزِجَا"},
{"imp_2fp", "اِمْتَزِجْنَ"},
{"imp_2fs", "اِمْتَزِجِي"},
{"imp_2mp", "اِمْتَزِجُوا"},
{"imp_2ms", "اِمْتَزِجْ"},
{"ind_1p", "نَمْتَزِجُ"},
{"ind_1s", "أَمْتَزِجُ"},
{"ind_2d", "تَمْتَزِجَانِ"},
{"ind_2fp", "تَمْتَزِجْنَ"},
{"ind_2fs", "تَمْتَزِجِينَ"},
{"ind_2mp", "تَمْتَزِجُونَ"},
{"ind_2ms", "تَمْتَزِجُ"},
{"ind_3fd", "تَمْتَزِجَانِ"},
{"ind_3fp", "يَمْتَزِجْنَ"},
{"ind_3fs", "تَمْتَزِجُ"},
{"ind_3md", "يَمْتَزِجَانِ"},
{"ind_3mp", "يَمْتَزِجُونَ"},
{"ind_3ms", "يَمْتَزِجُ"},
{"past_1p", "اِمْتَزَجْنَا"},
{"past_1s", "اِمْتَزَجْتُ"},
{"past_2d", "اِمْتَزَجْتُمَا"},
{"past_2fp", "اِمْتَزَجْتُنَّ"},
{"past_2fs", "اِمْتَزَجْتِ"},
{"past_2mp", "اِمْتَزَجْتُمْ"},
{"past_2ms", "اِمْتَزَجْتَ"},
{"past_3fd", "اِمْتَزَجَتَا"},
{"past_3fp", "اِمْتَزَجْنَ"},
{"past_3fs", "اِمْتَزَجَتْ"},
{"past_3md", "اِمْتَزَجَا"},
{"past_3mp", "اِمْتَزَجُوا"},
{"past_3ms", "اِمْتَزَجَ"},
},
},
{
label = "اِزْدَحَمَ (p351)", root = "زحم", wazn = "افتعل",
forms = {
{"imp_2d", "اِزْدَحِمَا"},
{"imp_2fp", "اِزْدَحِمْنَ"},
{"imp_2fs", "اِزْدَحِمِي"},
{"imp_2mp", "اِزْدَحِمُوا"},
{"imp_2ms", "اِزْدَحِمْ"},
{"ind_1p", "نَزْدَحِمُ"},
{"ind_1s", "أَزْدَحِمُ"},
{"ind_2d", "تَزْدَحِمَانِ"},
{"ind_2fp", "تَزْدَحِمْنَ"},
{"ind_2fs", "تَزْدَحِمِينَ"},
{"ind_2mp", "تَزْدَحِمُونَ"},
{"ind_2ms", "تَزْدَحِمُ"},
{"ind_3fd", "تَزْدَحِمَانِ"},
{"ind_3fp", "يَزْدَحِمْنَ"},
{"ind_3fs", "تَزْدَحِمُ"},
{"ind_3md", "يَزْدَحِمَانِ"},
{"ind_3mp", "يَزْدَحِمُونَ"},
{"ind_3ms", "يَزْدَحِمُ"},
{"past_1p", "اِزْدَحَمْنَا"},
{"past_1s", "اِزْدَحَمْتُ"},
{"past_2d", "اِزْدَحَمْتُمَا"},
{"past_2fp", "اِزْدَحَمْتُنَّ"},
{"past_2fs", "اِزْدَحَمْتِ"},
{"past_2mp", "اِزْدَحَمْتُمْ"},
{"past_2ms", "اِزْدَحَمْتَ"},
{"past_3fd", "اِزْدَحَمَتَا"},
{"past_3fp", "اِزْدَحَمْنَ"},
{"past_3fs", "اِزْدَحَمَتْ"},
{"past_3md", "اِزْدَحَمَا"},
{"past_3mp", "اِزْدَحَمُوا"},
{"past_3ms", "اِزْدَحَمَ"},
},
},
{
label = "اِضْطَلَعَ (p351)", root = "ضلع", wazn = "افتعل",
forms = {
{"imp_2d", "اِضْطَلِعَا"},
{"imp_2fp", "اِضْطَلِعْنَ"},
{"imp_2fs", "اِضْطَلِعِي"},
{"imp_2mp", "اِضْطَلِعُوا"},
{"imp_2ms", "اِضْطَلِعْ"},
{"ind_1p", "نَضْطَلِعُ"},
{"ind_1s", "أَضْطَلِعُ"},
{"ind_2d", "تَضْطَلِعَانِ"},
{"ind_2fp", "تَضْطَلِعْنَ"},
{"ind_2fs", "تَضْطَلِعِينَ"},
{"ind_2mp", "تَضْطَلِعُونَ"},
{"ind_2ms", "تَضْطَلِعُ"},
{"ind_3fd", "تَضْطَلِعَانِ"},
{"ind_3fp", "يَضْطَلِعْنَ"},
{"ind_3fs", "تَضْطَلِعُ"},
{"ind_3md", "يَضْطَلِعَانِ"},
{"ind_3mp", "يَضْطَلِعُونَ"},
{"ind_3ms", "يَضْطَلِعُ"},
{"past_1p", "اِضْطَلَعْنَا"},
{"past_1s", "اِضْطَلَعْتُ"},
{"past_2d", "اِضْطَلَعْتُمَا"},
{"past_2fp", "اِضْطَلَعْتُنَّ"},
{"past_2fs", "اِضْطَلَعْتِ"},
{"past_2mp", "اِضْطَلَعْتُمْ"},
{"past_2ms", "اِضْطَلَعْتَ"},
{"past_3fd", "اِضْطَلَعَتَا"},
{"past_3fp", "اِضْطَلَعْنَ"},
{"past_3fs", "اِضْطَلَعَتْ"},
{"past_3md", "اِضْطَلَعَا"},
{"past_3mp", "اِضْطَلَعُوا"},
{"past_3ms", "اِضْطَلَعَ"},
},
},
{
label = "اِرْتَدَّ (p355)", root = "ردد", wazn = "افتعل",
forms = {
{"imp_2d", "اِرْتَدَّا"},
{"imp_2fp", "اِرْتَدِدْنَ"},
{"imp_2fs", "اِرْتَدِّي"},
{"imp_2mp", "اِرْتَدُّوا"},
{"imp_2ms", "اِرْتَدِدْ"},
{"ind_1p", "نَرْتَدُّ"},
{"ind_1s", "أَرْتَدُّ"},
{"ind_2d", "تَرْتَدَّانِ"},
{"ind_2fp", "تَرْتَدِدْنَ"},
{"ind_2fs", "تَرْتَدِّينَ"},
{"ind_2mp", "تَرْتَدُّونَ"},
{"ind_2ms", "تَرْتَدُّ"},
{"ind_3fd", "تَرْتَدَّانِ"},
{"ind_3fp", "يَرْتَدِدْنَ"},
{"ind_3fs", "تَرْتَدُّ"},
{"ind_3md", "يَرْتَدَّانِ"},
{"ind_3mp", "يَرْتَدُّونَ"},
{"ind_3ms", "يَرْتَدُّ"},
{"past_1p", "اِرْتَدَدْنَا"},
{"past_1s", "اِرْتَدَدْتُ"},
{"past_2d", "اِرْتَدَدْتُمَا"},
{"past_2fp", "اِرْتَدَدْتُنَّ"},
{"past_2fs", "اِرْتَدَدْتِ"},
{"past_2mp", "اِرْتَدَدْتُمْ"},
{"past_2ms", "اِرْتَدَدْتَ"},
{"past_3fd", "اِرْتَدَّتَا"},
{"past_3fp", "اِرْتَدَدْنَ"},
{"past_3fs", "اِرْتَدَّتْ"},
{"past_3md", "اِرْتَدَّا"},
{"past_3mp", "اِرْتَدُّوا"},
{"past_3ms", "اِرْتَدَّ"},
},
},
{
label = "اِحْتَلَّ (p355)", root = "حلل", wazn = "افتعل",
forms = {
{"imp_2d", "اِحْتَلَّا"},
{"imp_2fp", "اِحْتَلِلْنَ"},
{"imp_2fs", "اِحْتَلِّي"},
{"imp_2mp", "اِحْتَلُّوا"},
{"imp_2ms", "اِحْتَلِلْ"},
{"ind_1p", "نَحْتَلُّ"},
{"ind_1s", "أَحْتَلُّ"},
{"ind_2d", "تَحْتَلَّانِ"},
{"ind_2fp", "تَحْتَلِلْنَ"},
{"ind_2fs", "تَحْتَلِّينَ"},
{"ind_2mp", "تَحْتَلُّونَ"},
{"ind_2ms", "تَحْتَلُّ"},
{"ind_3fd", "تَحْتَلَّانِ"},
{"ind_3fp", "يَحْتَلِلْنَ"},
{"ind_3fs", "تَحْتَلُّ"},
{"ind_3md", "يَحْتَلَّانِ"},
{"ind_3mp", "يَحْتَلُّونَ"},
{"ind_3ms", "يَحْتَلُّ"},
{"past_1p", "اِحْتَلَلْنَا"},
{"past_1s", "اِحْتَلَلْتُ"},
{"past_2d", "اِحْتَلَلْتُمَا"},
{"past_2fp", "اِحْتَلَلْتُنَّ"},
{"past_2fs", "اِحْتَلَلْتِ"},
{"past_2mp", "اِحْتَلَلْتُمْ"},
{"past_2ms", "اِحْتَلَلْتَ"},
{"past_3fd", "اِحْتَلَّتَا"},
{"past_3fp", "اِحْتَلَلْنَ"},
{"past_3fs", "اِحْتَلَّتْ"},
{"past_3md", "اِحْتَلَّا"},
{"past_3mp", "اِحْتَلُّوا"},
{"past_3ms", "اِحْتَلَّ"},
},
},
{
label = "اِصْطَفَّ (p356)", root = "صفف", wazn = "افتعل",
forms = {
{"imp_2d", "اِصْطَفَّا"},
{"imp_2fp", "اِصْطَفِفْنَ"},
{"imp_2fs", "اِصْطَفِّي"},
{"imp_2mp", "اِصْطَفُّوا"},
{"imp_2ms", "اِصْطَفِفْ"},
{"ind_1p", "نَصْطَفُّ"},
{"ind_1s", "أَصْطَفُّ"},
{"ind_2d", "تَصْطَفَّانِ"},
{"ind_2fp", "تَصْطَفِفْنَ"},
{"ind_2fs", "تَصْطَفِّينَ"},
{"ind_2mp", "تَصْطَفُّونَ"},
{"ind_2ms", "تَصْطَفُّ"},
{"ind_3fd", "تَصْطَفَّانِ"},
{"ind_3fp", "يَصْطَفِفْنَ"},
{"ind_3fs", "تَصْطَفُّ"},
{"ind_3md", "يَصْطَفَّانِ"},
{"ind_3mp", "يَصْطَفُّونَ"},
{"ind_3ms", "يَصْطَفُّ"},
{"past_1p", "اِصْطَفَفْنَا"},
{"past_1s", "اِصْطَفَفْتُ"},
{"past_2d", "اِصْطَفَفْتُمَا"},
{"past_2fp", "اِصْطَفَفْتُنَّ"},
{"past_2fs", "اِصْطَفَفْتِ"},
{"past_2mp", "اِصْطَفَفْتُمْ"},
{"past_2ms", "اِصْطَفَفْتَ"},
{"past_3fd", "اِصْطَفَّتَا"},
{"past_3fp", "اِصْطَفَفْنَ"},
{"past_3fs", "اِصْطَفَّتْ"},
{"past_3md", "اِصْطَفَّا"},
{"past_3mp", "اِصْطَفُّوا"},
{"past_3ms", "اِصْطَفَّ"},
},
},
{
label = "اِزْدَمَّ (p356)", root = "زمم", wazn = "افتعل",
forms = {
{"imp_2d", "اِزْدَمَّا"},
{"imp_2fp", "اِزْدَمِمْنَ"},
{"imp_2fs", "اِزْدَمِّي"},
{"imp_2mp", "اِزْدَمُّوا"},
{"imp_2ms", "اِزْدَمِمْ"},
{"ind_1p", "نَزْدَمُّ"},
{"ind_1s", "أَزْدَمُّ"},
{"ind_2d", "تَزْدَمَّانِ"},
{"ind_2fp", "تَزْدَمِمْنَ"},
{"ind_2fs", "تَزْدَمِّينَ"},
{"ind_2mp", "تَزْدَمُّونَ"},
{"ind_2ms", "تَزْدَمُّ"},
{"ind_3fd", "تَزْدَمَّانِ"},
{"ind_3fp", "يَزْدَمِمْنَ"},
{"ind_3fs", "تَزْدَمُّ"},
{"ind_3md", "يَزْدَمَّانِ"},
{"ind_3mp", "يَزْدَمُّونَ"},
{"ind_3ms", "يَزْدَمُّ"},
{"past_1p", "اِزْدَمَمْنَا"},
{"past_1s", "اِزْدَمَمْتُ"},
{"past_2d", "اِزْدَمَمْتُمَا"},
{"past_2fp", "اِزْدَمَمْتُنَّ"},
{"past_2fs", "اِزْدَمَمْتِ"},
{"past_2mp", "اِزْدَمَمْتُمْ"},
{"past_2ms", "اِزْدَمَمْتَ"},
{"past_3fd", "اِزْدَمَّتَا"},
{"past_3fp", "اِزْدَمَمْنَ"},
{"past_3fs", "اِزْدَمَّتْ"},
{"past_3md", "اِزْدَمَّا"},
{"past_3mp", "اِزْدَمُّوا"},
{"past_3ms", "اِزْدَمَّ"},
},
},
{
label = "اِئْتَمَنَ (p358)", root = "ئمن", wazn = "افتعل",
forms = {
{"imp_2d", "اِئْتَمِنَا"},
{"imp_2fp", "اِئْتَمِنَّ"},
{"imp_2fs", "اِئْتَمِنِي"},
{"imp_2mp", "اِئْتَمِنُوا"},
{"imp_2ms", "اِئْتَمِنْ"},
{"ind_1p", "نَأْتَمِنُ"},
{"ind_1s", "أَأْتَمِنُ"},
{"ind_2d", "تَأْتَمِنَانِ"},
{"ind_2fp", "تَأْتَمِنَّ"},
{"ind_2fs", "تَأْتَمِنِينَ"},
{"ind_2mp", "تَأْتَمِنُونَ"},
{"ind_2ms", "تَأْتَمِنُ"},
{"ind_3fd", "تَأْتَمِنَانِ"},
{"ind_3fp", "يَأْتَمِنَّ"},
{"ind_3fs", "تَأْتَمِنُ"},
{"ind_3md", "يَأْتَمِنَانِ"},
{"ind_3mp", "يَأْتَمِنُونَ"},
{"ind_3ms", "يَأْتَمِنُ"},
{"past_1p", "اِئْتَمَنَّا"},
{"past_1s", "اِئْتَمَنْتُ"},
{"past_2d", "اِئْتَمَنْتُمَا"},
{"past_2fp", "اِئْتَمَنْتُنَّ"},
{"past_2fs", "اِئْتَمَنْتِ"},
{"past_2mp", "اِئْتَمَنْتُمْ"},
{"past_2ms", "اِئْتَمَنْتَ"},
{"past_3fd", "اِئْتَمَنَتَا"},
{"past_3fp", "اِئْتَمَنَّ"},
{"past_3fs", "اِئْتَمَنَتْ"},
{"past_3md", "اِئْتَمَنَا"},
{"past_3mp", "اِئْتَمَنُوا"},
{"past_3ms", "اِئْتَمَنَ"},
},
},
{
label = "اِئْتَشَرَ (p358)", root = "ئشر", wazn = "افتعل",
forms = {
{"imp_2d", "اِئْتَشِرَا"},
{"imp_2fp", "اِئْتَشِرْنَ"},
{"imp_2fs", "اِئْتَشِرِي"},
{"imp_2mp", "اِئْتَشِرُوا"},
{"imp_2ms", "اِئْتَشِرْ"},
{"ind_1p", "نَأْتَشِرُ"},
{"ind_1s", "أَأْتَشِرُ"},
{"ind_2d", "تَأْتَشِرَانِ"},
{"ind_2fp", "تَأْتَشِرْنَ"},
{"ind_2fs", "تَأْتَشِرِينَ"},
{"ind_2mp", "تَأْتَشِرُونَ"},
{"ind_2ms", "تَأْتَشِرُ"},
{"ind_3fd", "تَأْتَشِرَانِ"},
{"ind_3fp", "يَأْتَشِرْنَ"},
{"ind_3fs", "تَأْتَشِرُ"},
{"ind_3md", "يَأْتَشِرَانِ"},
{"ind_3mp", "يَأْتَشِرُونَ"},
{"ind_3ms", "يَأْتَشِرُ"},
{"past_1p", "اِئْتَشَرْنَا"},
{"past_1s", "اِئْتَشَرْتُ"},
{"past_2d", "اِئْتَشَرْتُمَا"},
{"past_2fp", "اِئْتَشَرْتُنَّ"},
{"past_2fs", "اِئْتَشَرْتِ"},
{"past_2mp", "اِئْتَشَرْتُمْ"},
{"past_2ms", "اِئْتَشَرْتَ"},
{"past_3fd", "اِئْتَشَرَتَا"},
{"past_3fp", "اِئْتَشَرْنَ"},
{"past_3fs", "اِئْتَشَرَتْ"},
{"past_3md", "اِئْتَشَرَا"},
{"past_3mp", "اِئْتَشَرُوا"},
{"past_3ms", "اِئْتَشَرَ"},
},
},
{
label = "اِبْتَدَأَ (p362)", root = "بدأ", wazn = "افتعل",
forms = {
{"imp_2d", "اِبْتَدِئَا"},
{"imp_2fp", "اِبْتَدِئْنَ"},
{"imp_2fs", "اِبْتَدِئِي"},
{"imp_2mp", "اِبْتَدِئُوا"},
{"imp_2ms", "اِبْتَدِئْ"},
{"ind_1p", "نَبْتَدِئُ"},
{"ind_1s", "أَبْتَدِئُ"},
{"ind_2d", "تَبْتَدِئَانِ"},
{"ind_2fp", "تَبْتَدِئْنَ"},
{"ind_2fs", "تَبْتَدِئِينَ"},
{"ind_2mp", "تَبْتَدِئُونَ"},
{"ind_2ms", "تَبْتَدِئُ"},
{"ind_3fd", "تَبْتَدِئَانِ"},
{"ind_3fp", "يَبْتَدِئْنَ"},
{"ind_3fs", "تَبْتَدِئُ"},
{"ind_3md", "يَبْتَدِئَانِ"},
{"ind_3mp", "يَبْتَدِئُونَ"},
{"ind_3ms", "يَبْتَدِئُ"},
{"past_1p", "اِبْتَدَأْنَا"},
{"past_1s", "اِبْتَدَأْتُ"},
{"past_2d", "اِبْتَدَأْتُمَا"},
{"past_2fp", "اِبْتَدَأْتُنَّ"},
{"past_2fs", "اِبْتَدَأْتِ"},
{"past_2mp", "اِبْتَدَأْتُمْ"},
{"past_2ms", "اِبْتَدَأْتَ"},
{"past_3fd", "اِبْتَدَأَتَا"},
{"past_3fp", "اِبْتَدَأْنَ"},
{"past_3fs", "اِبْتَدَأَتْ"},
{"past_3md", "اِبْتَدَآ"},
{"past_3mp", "اِبْتَدَؤُوا"},
{"past_3ms", "اِبْتَدَأَ"},
},
},
{
label = "اِلْتَجَأَ (p362)", root = "لجأ", wazn = "افتعل",
forms = {
{"imp_2d", "اِلْتَجِئَا"},
{"imp_2fp", "اِلْتَجِئْنَ"},
{"imp_2fs", "اِلْتَجِئِي"},
{"imp_2mp", "اِلْتَجِئُوا"},
{"imp_2ms", "اِلْتَجِئْ"},
{"ind_1p", "نَلْتَجِئُ"},
{"ind_1s", "أَلْتَجِئُ"},
{"ind_2d", "تَلْتَجِئَانِ"},
{"ind_2fp", "تَلْتَجِئْنَ"},
{"ind_2fs", "تَلْتَجِئِينَ"},
{"ind_2ms", "تَلْتَجِئُ"},
{"ind_3fd", "تَلْتَجِئَانِ"},
{"ind_3fp", "يَلْتَجِئْنَ"},
{"ind_3fs", "تَلْتَجِئُ"},
{"ind_3md", "يَلْتَجِئَانِ"},
{"ind_3ms", "يَلْتَجِئُ"},
{"past_1p", "اِلْتَجَأْنَا"},
{"past_1s", "اِلْتَجَأْتُ"},
{"past_2d", "اِلْتَجَأْتُمَا"},
{"past_2fp", "اِلْتَجَأْتُنَّ"},
{"past_2fs", "اِلْتَجَأْتِ"},
{"past_2mp", "اِلْتَجَأْتُمْ"},
{"past_2ms", "اِلْتَجَأْتَ"},
{"past_3fd", "اِلْتَجَأَتَا"},
{"past_3fp", "اِلْتَجَأْنَ"},
{"past_3fs", "اِلْتَجَأَتْ"},
{"past_3md", "اِلْتَجَآ"},
{"past_3mp", "اِلْتَجَؤُوا"},
{"past_3ms", "اِلْتَجَأَ"},
},
},
{
label = "اِسْتَوَى (p371)", root = "سوي", wazn = "افتعل",
forms = {
{"imp_2d", "اِسْتَوِيَا"},
{"imp_2fp", "اِسْتَوِينَ"},
{"imp_2fs", "اِسْتَوِي"},
{"imp_2mp", "اِسْتَوُوا"},
{"imp_2ms", "اِسْتَوِ"},
{"ind_1p", "نَسْتَوِي"},
{"ind_1s", "أَسْتَوِي"},
{"ind_2d", "تَسْتَوِيَانِ"},
{"ind_2fp", "تَسْتَوِينَ"},
{"ind_2fs", "تَسْتَوِينَ"},
{"ind_2mp", "تَسْتَوُونَ"},
{"ind_2ms", "تَسْتَوِي"},
{"ind_3fd", "تَسْتَوِيَانِ"},
{"ind_3fp", "يَسْتَوِينَ"},
{"ind_3fs", "تَسْتَوِي"},
{"ind_3md", "يَسْتَوِيَانِ"},
{"ind_3mp", "يَسْتَوُونَ"},
{"ind_3ms", "يَسْتَوِي"},
{"past_1p", "اِسْتَوَيْنَا"},
{"past_1s", "اِسْتَوَيْتُ"},
{"past_2d", "اِسْتَوَيْتُمَا"},
{"past_2fp", "اِسْتَوَيْتُنَّ"},
{"past_2fs", "اِسْتَوَيْتِ"},
{"past_2mp", "اِسْتَوَيْتُمْ"},
{"past_2ms", "اِسْتَوَيْتَ"},
{"past_3fd", "اِسْتَوَتَا"},
{"past_3fp", "اِسْتَوَيْنَ"},
{"past_3fs", "اِسْتَوَتْ"},
{"past_3md", "اِسْتَوَيَا"},
{"past_3mp", "اِسْتَوَوْا"},
{"past_3ms", "اِسْتَوَى"},
},
},
{
label = "اِلْتَوَى (p371)", root = "لوي", wazn = "افتعل",
forms = {
{"imp_2d", "اِلْتَوِيَا"},
{"imp_2fp", "اِلْتَوِينَ"},
{"imp_2fs", "اِلْتَوِي"},
{"imp_2mp", "اِلْتَوُوا"},
{"imp_2ms", "اِلْتَوِ"},
{"ind_1p", "نَلْتَوِي"},
{"ind_1s", "أَلْتَوِي"},
{"ind_2d", "تَلْتَوِيَانِ"},
{"ind_2fp", "تَلْتَوِينَ"},
{"ind_2fs", "تَلْتَوِينَ"},
{"ind_2mp", "تَلْتَوُونَ"},
{"ind_2ms", "تَلْتَوِي"},
{"ind_3fd", "تَلْتَوِيَانِ"},
{"ind_3fs", "تَلْتَوِي"},
{"ind_3md", "يَلْتَوِيَانِ"},
{"ind_3mp", "يَلْتَوُونَ"},
{"ind_3ms", "يَلْتَوِي"},
{"past_1p", "اِلْتَوَيْنَا"},
{"past_1s", "اِلْتَوَيْتُ"},
{"past_2d", "اِلْتَوَيْتُمَا"},
{"past_2fp", "اِلْتَوَيْتُنَّ"},
{"past_2fs", "اِلْتَوَيْتِ"},
{"past_2mp", "اِلْتَوَيْتُمْ"},
{"past_2ms", "اِلْتَوَيْتَ"},
{"past_3fd", "اِلْتَوَتَا"},
{"past_3fp", "اِلْتَوَيْنَ"},
{"past_3fs", "اِلْتَوَتْ"},
{"past_3md", "اِلْتَوَيَا"},
{"past_3mp", "اِلْتَوَوْا"},
{"past_3ms", "اِلْتَوَى"},
},
},
{
label = "اِزْرَقَّ (p373)", root = "زرق", wazn = "افعلّ",
forms = {
{"imp_2d", "اِزْرَقَّا"},
{"imp_2fp", "اِزْرَقِقْنَ"},
{"imp_2fs", "اِزْرَقِّي"},
{"imp_2mp", "اِزْرَقُّوا"},
{"imp_2ms", "اِزْرَقَّ"},
{"ind_1p", "نَزْرَقُّ"},
{"ind_1s", "أَزْرَقُّ"},
{"ind_2d", "تَزْرَقَّانِ"},
{"ind_2fp", "تَزْرَقِقْنَ"},
{"ind_2fs", "تَزْرَقِّينَ"},
{"ind_2mp", "تَزْرَقُّونَ"},
{"ind_2ms", "تَزْرَقُّ"},
{"ind_3fd", "تَزْرَقَّانِ"},
{"ind_3fp", "يَزْرَقِقْنَ"},
{"ind_3fs", "تَزْرَقُّ"},
{"ind_3md", "يَزْرَقَّانِ"},
{"ind_3mp", "يَزْرَقُّونَ"},
{"ind_3ms", "يَزْرَقُّ"},
{"past_1p", "اِزْرَقَقْنَا"},
{"past_1s", "اِزْرَقَقْتُ"},
{"past_2d", "اِزْرَقَقْتُمَا"},
{"past_2fp", "اِزْرَقَقْتُنَّ"},
{"past_2fs", "اِزْرَقَقْتِ"},
{"past_2mp", "اِزْرَقَقْتُمْ"},
{"past_2ms", "اِزْرَقَقْتَ"},
{"past_3fd", "اِزْرَقَّتَا"},
{"past_3fp", "اِزْرَقَقْنَ"},
{"past_3fs", "اِزْرَقَّتْ"},
{"past_3md", "اِزْرَقَّا"},
{"past_3mp", "اِزْرَقُّوا"},
{"past_3ms", "اِزْرَقَّ"},
},
},
{
label = "اِخْرَجَّ (p373)", root = "خرج", wazn = "افعلّ",
forms = {
{"imp_2d", "اِخْرَجَّا"},
{"imp_2fp", "اِخْرَجِجْنَ"},
{"imp_2fs", "اِخْرَجِّي"},
{"imp_2mp", "اِخْرَجُّوا"},
{"imp_2ms", "اِخْرَجَّ"},
{"ind_1p", "نَخْرَجُّ"},
{"ind_1s", "أَخْرَجُّ"},
{"ind_2d", "تَخْرَجَّانِ"},
{"ind_2fp", "تَخْرَجِجْنَ"},
{"ind_2fs", "تَخْرَجِّينَ"},
{"ind_2mp", "تَخْرَجُّونَ"},
{"ind_2ms", "تَخْرَجُّ"},
{"ind_3fd", "تَخْرَجَّانِ"},
{"ind_3fp", "يَخْرَجِجْنَ"},
{"ind_3fs", "تَخْرَجُّ"},
{"ind_3md", "يَخْرَجَّانِ"},
{"ind_3mp", "يَخْرَجُّونَ"},
{"ind_3ms", "يَخْرَجُّ"},
{"past_1p", "اِخْرَجَجْنَا"},
{"past_1s", "اِخْرَجَجْتُ"},
{"past_2d", "اِخْرَجَجْتُمَا"},
{"past_2fp", "اِخْرَجَجْتُنَّ"},
{"past_2fs", "اِخْرَجَجْتِ"},
{"past_2mp", "اِخْرَجَجْتُمْ"},
{"past_2ms", "اِخْرَجَجْتَ"},
{"past_3fd", "اِخْرَجَّتَا"},
{"past_3fp", "اِخْرَجَجْنَ"},
{"past_3fs", "اِخْرَجَّتْ"},
{"past_3md", "اِخْرَجَّا"},
{"past_3mp", "اِخْرَجُّوا"},
{"past_3ms", "اِخْرَجَّ"},
},
},
{
label = "اِسْوَدَّ (p374)", root = "سود", wazn = "افعلّ",
forms = {
{"imp_2d", "اِسْوَدَّا"},
{"imp_2fp", "اِسْوَدِدْنَ"},
{"imp_2fs", "اِسْوَدِّي"},
{"imp_2mp", "اِسْوَدُّوا"},
{"imp_2ms", "اِسْوَدَّ"},
{"ind_1p", "نَسْوَدُّ"},
{"ind_1s", "أَسْوَدُّ"},
{"ind_2d", "تَسْوَدَّانِ"},
{"ind_2fp", "تَسْوَدِدْنَ"},
{"ind_2fs", "تَسْوَدِّينَ"},
{"ind_2mp", "تَسْوَدُّونَ"},
{"ind_2ms", "تَسْوَدُّ"},
{"ind_3fd", "تَسْوَدَّانِ"},
{"ind_3fp", "يَسْوَدِدْنَ"},
{"ind_3fs", "تَسْوَدُّ"},
{"ind_3md", "يَسْوَدَّانِ"},
{"ind_3mp", "يَسْوَدُّونَ"},
{"ind_3ms", "يَسْوَدُّ"},
{"past_1p", "اِسْوَدَدْنَا"},
{"past_1s", "اِسْوَدَدْتُ"},
{"past_2d", "اِسْوَدَدْتُمَا"},
{"past_2fp", "اِسْوَدَدْتُنَّ"},
{"past_2fs", "اِسْوَدَدْتِ"},
{"past_2mp", "اِسْوَدَدْتُمْ"},
{"past_2ms", "اِسْوَدَدْتَ"},
{"past_3fd", "اِسْوَدَّتَا"},
{"past_3fp", "اِسْوَدَدْنَ"},
{"past_3fs", "اِسْوَدَّتْ"},
{"past_3md", "اِسْوَدَّا"},
{"past_3mp", "اِسْوَدُّوا"},
{"past_3ms", "اِسْوَدَّ"},
},
},
{
label = "اِبْيَضَّ (p374)", root = "بيض", wazn = "افعلّ",
forms = {
{"imp_2d", "اِبْيَضَّا"},
{"imp_2fp", "اِبْيَضِضْنَ"},
{"imp_2fs", "اِبْيَضِّي"},
{"imp_2mp", "اِبْيَضُّوا"},
{"imp_2ms", "اِبْيَضَّ"},
{"ind_1p", "نَبْيَضُّ"},
{"ind_1s", "أَبْيَضُّ"},
{"ind_2d", "تَبْيَضَّانِ"},
{"ind_2fp", "تَبْيَضِضْنَ"},
{"ind_2fs", "تَبْيَضِّينَ"},
{"ind_2mp", "تَبْيَضُّونَ"},
{"ind_2ms", "تَبْيَضُّ"},
{"ind_3fd", "تَبْيَضَّانِ"},
{"ind_3fp", "يَبْيَضِضْنَ"},
{"ind_3fs", "تَبْيَضُّ"},
{"ind_3md", "يَبْيَضَّانِ"},
{"ind_3mp", "يَبْيَضُّونَ"},
{"ind_3ms", "يَبْيَضُّ"},
{"past_1p", "اِبْيَضَضْنَا"},
{"past_1s", "اِبْيَضَضْتُ"},
{"past_2d", "اِبْيَضَضْتُمَا"},
{"past_2fp", "اِبْيَضَضْتُنَّ"},
{"past_2fs", "اِبْيَضَضْتِ"},
{"past_2mp", "اِبْيَضَضْتُمْ"},
{"past_2ms", "اِبْيَضَضْتَ"},
{"past_3fd", "اِبْيَضَّتَا"},
{"past_3fp", "اِبْيَضَضْنَ"},
{"past_3fs", "اِبْيَضَّتْ"},
{"past_3md", "اِبْيَضَّا"},
{"past_3mp", "اِبْيَضُّوا"},
{"past_3ms", "اِبْيَضَّ"},
},
},
{
label = "اِسْتَغْرَبَ (p377)", root = "غرب", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَغْرِبَا"},
{"imp_2fp", "اِسْتَغْرِبْنَ"},
{"imp_2fs", "اِسْتَغْرِبِي"},
{"imp_2mp", "اِسْتَغْرِبُوا"},
{"imp_2ms", "اِسْتَغْرِبْ"},
{"ind_1p", "نَسْتَغْرِبُ"},
{"ind_1s", "أَسْتَغْرِبُ"},
{"ind_2d", "تَسْتَغْرِبَانِ"},
{"ind_2fp", "تَسْتَغْرِبْنَ"},
{"ind_2fs", "تَسْتَغْرِبِينَ"},
{"ind_2mp", "تَسْتَغْرِبُونَ"},
{"ind_2ms", "تَسْتَغْرِبُ"},
{"ind_3fd", "تَسْتَغْرِبَانِ"},
{"ind_3fp", "يَسْتَغْرِبْنَ"},
{"ind_3fs", "تَسْتَغْرِبُ"},
{"ind_3md", "يَسْتَغْرِبَانِ"},
{"ind_3mp", "يَسْتَغْرِبُونَ"},
{"ind_3ms", "يَسْتَغْرِبُ"},
{"past_1p", "اِسْتَغْرَبْنَا"},
{"past_1s", "اِسْتَغْرَبْتُ"},
{"past_2d", "اِسْتَغْرَبْتُمَا"},
{"past_2fp", "اِسْتَغْرَبْتُنَّ"},
{"past_2fs", "اِسْتَغْرَبْتِ"},
{"past_2mp", "اِسْتَغْرَبْتُمْ"},
{"past_2ms", "اِسْتَغْرَبْتَ"},
{"past_3fd", "اِسْتَغْرَبَتَا"},
{"past_3fp", "اِسْتَغْرَبْنَ"},
{"past_3fs", "اِسْتَغْرَبَتْ"},
{"past_3md", "اِسْتَغْرَبَا"},
{"past_3mp", "اِسْتَغْرَبُوا"},
{"past_3ms", "اِسْتَغْرَبَ"},
},
},
{
label = "اِسْتَقْبَلَ (p377)", root = "قبل", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَقْبِلَا"},
{"imp_2fp", "اِسْتَقْبِلْنَ"},
{"imp_2fs", "اِسْتَقْبِلِي"},
{"imp_2mp", "اِسْتَقْبِلُوا"},
{"imp_2ms", "اِسْتَقْبِلْ"},
{"ind_1p", "نَسْتَقْبِلُ"},
{"ind_1s", "أَسْتَقْبِلُ"},
{"ind_2d", "تَسْتَقْبِلَانِ"},
{"ind_2fp", "تَسْتَقْبِلْنَ"},
{"ind_2fs", "تَسْتَقْبِلِينَ"},
{"ind_2mp", "تَسْتَقْبِلُونَ"},
{"ind_2ms", "تَسْتَقْبِلُ"},
{"ind_3fd", "تَسْتَقْبِلَانِ"},
{"ind_3fp", "يَسْتَقْبِلْنَ"},
{"ind_3fs", "تَسْتَقْبِلُ"},
{"ind_3md", "يَسْتَقْبِلَانِ"},
{"ind_3mp", "يَسْتَقْبِلُونَ"},
{"ind_3ms", "يَسْتَقْبِلُ"},
{"past_1p", "اِسْتَقْبَلْنَا"},
{"past_1s", "اِسْتَقْبَلْتُ"},
{"past_2d", "اِسْتَقْبَلْتُمَا"},
{"past_2fp", "اِسْتَقْبَلْتُنَّ"},
{"past_2fs", "اِسْتَقْبَلْتِ"},
{"past_2mp", "اِسْتَقْبَلْتُمْ"},
{"past_2ms", "اِسْتَقْبَلْتَ"},
{"past_3fd", "اِسْتَقْبَلَتَا"},
{"past_3fp", "اِسْتَقْبَلْنَ"},
{"past_3fs", "اِسْتَقْبَلَتْ"},
{"past_3md", "اِسْتَقْبَلَا"},
{"past_3mp", "اِسْتَقْبَلُوا"},
{"past_3ms", "اِسْتَقْبَلَ"},
},
},
{
label = "اِسْتَرَدَّ (p378)", root = "ردد", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَرِدَّا"},
{"imp_2fp", "اِسْتَرْدِدْنَ"},
{"imp_2fs", "اِسْتَرِدِّي"},
{"imp_2mp", "اِسْتَرِدُّوا"},
{"imp_2ms", "اِسْتَرْدِدْ"},
{"ind_1p", "نَسْتَرِدُّ"},
{"ind_1s", "أَسْتَرِدُّ"},
{"ind_2d", "تَسْتَرِدَّانِ"},
{"ind_2fp", "تَسْتَرْدِدْنَ"},
{"ind_2fs", "تَسْتَرِدِّينَ"},
{"ind_2mp", "تَسْتَرِدُّونَ"},
{"ind_2ms", "تَسْتَرِدُّ"},
{"ind_3fd", "تَسْتَرِدَّانِ"},
{"ind_3fp", "يَسْتَرْدِدْنَ"},
{"ind_3fs", "تَسْتَرِدُّ"},
{"ind_3md", "يَسْتَرِدَّانِ"},
{"ind_3mp", "يَسْتَرِدُّونَ"},
{"ind_3ms", "يَسْتَرِدُّ"},
{"past_1p", "اِسْتَرْدَدْنَا"},
{"past_1s", "اِسْتَرْدَدْتُ"},
{"past_2d", "اِسْتَرْدَدْتُمَا"},
{"past_2fp", "اِسْتَرْدَدْتُنَّ"},
{"past_2fs", "اِسْتَرْدَدْتِ"},
{"past_2mp", "اِسْتَرْدَدْتُمْ"},
{"past_2ms", "اِسْتَرْدَدْتَ"},
{"past_3fd", "اِسْتَرَدَّتَا"},
{"past_3fp", "اِسْتَرْدَدْنَ"},
{"past_3fs", "اِسْتَرَدَّتْ"},
{"past_3md", "اِسْتَرَدَّا"},
{"past_3mp", "اِسْتَرَدُّوا"},
{"past_3ms", "اِسْتَرَدَّ"},
},
},
}
ffc3e93c8jpgezoggfzxcxkvslsly0o
وحدة:ar-verb/testcases/9
828
242292
1159026
1158894
2026-09-10T12:39:39Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159026
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 9 من 15. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/9")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_9()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
je8vwaojriai8ekrxzwwgeppuriegsl
1159084
1159026
2026-09-10T19:34:12Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159084
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 9 من 16. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/9")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_9()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
bm801d7av6rc4dmb5stkg5tyvzw68oj
نقاش الوحدة:ar-verb/testcases/9
829
242293
1159027
1158895
2026-09-10T12:39:40Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159027
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/9|الجزء 9 من 15]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، [[نقاش الوحدة:ar-verb/testcases/1|1]]، [[نقاش الوحدة:ar-verb/testcases/2|2]]، [[نقاش الوحدة:ar-verb/testcases/3|3]]، [[نقاش الوحدة:ar-verb/testcases/4|4]]، [[نقاش الوحدة:ar-verb/testcases/5|5]]، [[نقاش الوحدة:ar-verb/testcases/6|6]]، [[نقاش الوحدة:ar-verb/testcases/7|7]]، [[نقاش الوحدة:ar-verb/testcases/8|8]]، 9، [[نقاش الوحدة:ar-verb/testcases/10|10]]، [[نقاش الوحدة:ar-verb/testcases/11|11]]، [[نقاش الوحدة:ar-verb/testcases/12|12]]، [[نقاش الوحدة:ar-verb/testcases/13|13]]، [[نقاش الوحدة:ar-verb/testcases/14|14]]، [[نقاش الوحدة:ar-verb/testcases/15|15]] — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/9|run_tests}}
2sf4coi4lvaob3p38hvlhjx5by9v3vd
1159085
1159027
2026-09-10T19:34:13Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159085
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/9|الجزء 9 من 16]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، [[نقاش الوحدة:ar-verb/testcases/1|1]]، [[نقاش الوحدة:ar-verb/testcases/2|2]]، [[نقاش الوحدة:ar-verb/testcases/3|3]]، [[نقاش الوحدة:ar-verb/testcases/4|4]]، [[نقاش الوحدة:ar-verb/testcases/5|5]]، [[نقاش الوحدة:ar-verb/testcases/6|6]]، [[نقاش الوحدة:ar-verb/testcases/7|7]]، [[نقاش الوحدة:ar-verb/testcases/8|8]]، 9، [[نقاش الوحدة:ar-verb/testcases/10|10]]، [[نقاش الوحدة:ar-verb/testcases/11|11]]، [[نقاش الوحدة:ar-verb/testcases/12|12]]، [[نقاش الوحدة:ar-verb/testcases/13|13]]، [[نقاش الوحدة:ar-verb/testcases/14|14]]، [[نقاش الوحدة:ar-verb/testcases/15|15]]، [[نقاش الوحدة:ar-verb/testcases/16|16]] — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/9|run_tests}}
he1j77ldtfbd5jgjpce969p3ik3dvpp
وحدة:ar-verb/testcases/بيانات/10
828
242332
1159028
1158922
2026-09-10T12:39:43Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159028
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 10 من 15.
return {
{
label = "اِسْتَفَزَّ (p378)", root = "فزز", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَفِزَّا"},
{"imp_2fp", "اِسْتَفْزِزْنَ"},
{"imp_2fs", "اِسْتَفِزِّي"},
{"imp_2mp", "اِسْتَفِزُّوا"},
{"imp_2ms", "اِسْتَفْزِزْ"},
{"ind_1p", "نَسْتَفِزُّ"},
{"ind_1s", "أَسْتَفِزُّ"},
{"ind_2d", "تَسْتَفِزَّانِ"},
{"ind_2fp", "تَسْتَفْزِزْنَ"},
{"ind_2fs", "تَسْتَفِزِّينَ"},
{"ind_2mp", "تَسْتَفِزُّونَ"},
{"ind_2ms", "تَسْتَفِزُّ"},
{"ind_3fd", "تَسْتَفِزَّانِ"},
{"ind_3fp", "يَسْتَفْزِزْنَ"},
{"ind_3fs", "تَسْتَفِزُّ"},
{"ind_3md", "يَسْتَفِزَّانِ"},
{"ind_3mp", "يَسْتَفِزُّونَ"},
{"ind_3ms", "يَسْتَفِزُّ"},
{"past_1p", "اِسْتَفْزَزْنَا"},
{"past_1s", "اِسْتَفْزَزْتُ"},
{"past_2d", "اِسْتَفْزَزْتُمَا"},
{"past_2fp", "اِسْتَفْزَزْتُنَّ"},
{"past_2fs", "اِسْتَفْزَزْتِ"},
{"past_2mp", "اِسْتَفْزَزْتُمْ"},
{"past_2ms", "اِسْتَفْزَزْتَ"},
{"past_3fd", "اِسْتَفَزَّتَا"},
{"past_3fp", "اِسْتَفْزَزْنَ"},
{"past_3fs", "اِسْتَفَزَّتْ"},
{"past_3md", "اِسْتَفَزَّا"},
{"past_3mp", "اِسْتَفَزُّوا"},
{"past_3ms", "اِسْتَفَزَّ"},
},
},
{
label = "اِسْتَوْزَرَ (p383)", root = "وزر", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَوْزِرَا"},
{"imp_2fp", "اِسْتَوْزِرْنَ"},
{"imp_2fs", "اِسْتَوْزِرِي"},
{"imp_2mp", "اِسْتَوْزِرُوا"},
{"imp_2ms", "اِسْتَوْزِرْ"},
{"ind_1p", "نَسْتَوْزِرُ"},
{"ind_1s", "أَسْتَوْزِرُ"},
{"ind_2d", "تَسْتَوْزِرَانِ"},
{"ind_2fp", "تَسْتَوْزِرْنَ"},
{"ind_2fs", "تَسْتَوْزِرِينَ"},
{"ind_2mp", "تَسْتَوْزِرُونَ"},
{"ind_2ms", "تَسْتَوْزِرُ"},
{"ind_3fd", "تَسْتَوْزِرَانِ"},
{"ind_3fp", "يَسْتَوْزِرْنَ"},
{"ind_3fs", "تَسْتَوْزِرُ"},
{"ind_3md", "يَسْتَوْزِرَانِ"},
{"ind_3mp", "يَسْتَوْزِرُونَ"},
{"ind_3ms", "يَسْتَوْزِرُ"},
{"past_1p", "اِسْتَوْزَرْنَا"},
{"past_1s", "اِسْتَوْزَرْتُ"},
{"past_2d", "اِسْتَوْزَرْتُمَا"},
{"past_2fp", "اِسْتَوْزَرْتُنَّ"},
{"past_2fs", "اِسْتَوْزَرْتِ"},
{"past_2mp", "اِسْتَوْزَرْتُمْ"},
{"past_2ms", "اِسْتَوْزَرْتَ"},
{"past_3fd", "اِسْتَوْزَرَتَا"},
{"past_3fp", "اِسْتَوْزَرْنَ"},
{"past_3fs", "اِسْتَوْزَرَتْ"},
{"past_3md", "اِسْتَوْزَرَا"},
{"past_3mp", "اِسْتَوْزَرُوا"},
{"past_3ms", "اِسْتَوْزَرَ"},
},
},
{
label = "اِسْتَيْقَظَ (p383)", root = "يقظ", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَيْقِظَا"},
{"imp_2fp", "اِسْتَيْقِظْنَ"},
{"imp_2fs", "اِسْتَيْقِظِي"},
{"imp_2mp", "اِسْتَيْقِظُوا"},
{"imp_2ms", "اِسْتَيْقِظْ"},
{"ind_1p", "نَسْتَيْقِظُ"},
{"ind_1s", "أَسْتَيْقِظُ"},
{"ind_2d", "تَسْتَيْقِظَانِ"},
{"ind_2fp", "تَسْتَيْقِظْنَ"},
{"ind_2fs", "تَسْتَيْقِظِينَ"},
{"ind_2mp", "تَسْتَيْقِظُونَ"},
{"ind_2ms", "تَسْتَيْقِظُ"},
{"ind_3fd", "تَسْتَيْقِظَانِ"},
{"ind_3fp", "يَسْتَيْقِظْنَ"},
{"ind_3fs", "تَسْتَيْقِظُ"},
{"ind_3md", "يَسْتَيْقِظَانِ"},
{"ind_3mp", "يَسْتَيْقِظُونَ"},
{"ind_3ms", "يَسْتَيْقِظُ"},
{"past_1p", "اِسْتَيْقَظْنَا"},
{"past_1s", "اِسْتَيْقَظْتُ"},
{"past_2d", "اِسْتَيْقَظْتُمَا"},
{"past_2fp", "اِسْتَيْقَظْتُنَّ"},
{"past_2fs", "اِسْتَيْقَظْتِ"},
{"past_2mp", "اِسْتَيْقَظْتُمْ"},
{"past_2ms", "اِسْتَيْقَظْتَ"},
{"past_3fd", "اِسْتَيْقَظَتَا"},
{"past_3fp", "اِسْتَيْقَظْنَ"},
{"past_3fs", "اِسْتَيْقَظَتْ"},
{"past_3md", "اِسْتَيْقَظَا"},
{"past_3mp", "اِسْتَيْقَظُوا"},
{"past_3ms", "اِسْتَيْقَظَ"},
},
},
{
label = "اِسْتَأْدَى (p387)", root = "أدي", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَأْدِيَا"},
{"imp_2fp", "اِسْتَأْدِينَ"},
{"imp_2fs", "اِسْتَأْدِي"},
{"imp_2mp", "اِسْتَأْدُوا"},
{"imp_2ms", "اِسْتَأْدِ"},
{"ind_1p", "نَسْتَأْدِي"},
{"ind_1s", "أَسْتَأْدِي"},
{"ind_2d", "تَسْتَأْدِيَانِ"},
{"ind_2fp", "تَسْتَأْدِينَ"},
{"ind_2fs", "تَسْتَأْدِينَ"},
{"ind_2mp", "تَسْتَأْدُونَ"},
{"ind_2ms", "تَسْتَأْدِي"},
{"ind_3fd", "تَسْتَأْدِيَانِ"},
{"ind_3fp", "يَسْتَأْدِينَ"},
{"ind_3fs", "تَسْتَأْدِي"},
{"ind_3md", "يَسْتَأْدِيَانِ"},
{"ind_3mp", "يَسْتَأْدُونَ"},
{"ind_3ms", "يَسْتَأْدِي"},
{"past_1p", "اِسْتَأْدَيْنَا"},
{"past_1s", "اِسْتَأْدَيْتُ"},
{"past_2d", "اِسْتَأْدَيْتُمَا"},
{"past_2fp", "اِسْتَأْدَيْتُنَّ"},
{"past_2fs", "اِسْتَأْدَيْتِ"},
{"past_2mp", "اِسْتَأْدَيْتُمْ"},
{"past_2ms", "اِسْتَأْدَيْتَ"},
{"past_3fd", "اِسْتَأْدَتَا"},
{"past_3fp", "اِسْتَأْدَيْنَ"},
{"past_3fs", "اِسْتَأْدَتْ"},
{"past_3md", "اِسْتَأْدَيَا"},
{"past_3mp", "اِسْتَأْدَوْا"},
{"past_3ms", "اِسْتَأْدَى"},
},
},
{
label = "اِسْتَأْنَى (p387)", root = "أني", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَأْنِيَا"},
{"imp_2fp", "اِسْتَأْنِينَ"},
{"imp_2fs", "اِسْتَأْنِي"},
{"imp_2mp", "اِسْتَأْنُوا"},
{"imp_2ms", "اِسْتَأْنِ"},
{"ind_1p", "نَسْتَأْنِي"},
{"ind_1s", "أَسْتَأْنِي"},
{"ind_2d", "تَسْتَأْنِيَانِ"},
{"ind_2fp", "تَسْتَأْنِينَ"},
{"ind_2fs", "تَسْتَأْنِينَ"},
{"ind_2mp", "تَسْتَأْنُونَ"},
{"ind_2ms", "تَسْتَأْنِي"},
{"ind_3fd", "تَسْتَأْنِيَانِ"},
{"ind_3fp", "يَسْتَأْنِينَ"},
{"ind_3fs", "تَسْتَأْنِي"},
{"ind_3md", "يَسْتَأْنِيَانِ"},
{"ind_3mp", "يَسْتَأْنُونَ"},
{"ind_3ms", "يَسْتَأْنِي"},
{"past_1p", "اِسْتَأْنَيْنَا"},
{"past_1s", "اِسْتَأْنَيْتُ"},
{"past_2d", "اِسْتَأْنَيْتُمَا"},
{"past_2fp", "اِسْتَأْنَيْتُنَّ"},
{"past_2fs", "اِسْتَأْنَيْتِ"},
{"past_2mp", "اِسْتَأْنَيْتُمْ"},
{"past_2ms", "اِسْتَأْنَيْتَ"},
{"past_3fd", "اِسْتَأْنَتَا"},
{"past_3fp", "اِسْتَأْنَيْنَ"},
{"past_3fs", "اِسْتَأْنَتْ"},
{"past_3md", "اِسْتَأْنَيَا"},
{"past_3mp", "اِسْتَأْنَوْا"},
{"past_3ms", "اِسْتَأْنَى"},
},
},
{
label = "اِسْتَوْفَى (p388)", root = "وفي", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَوْفِيَا"},
{"imp_2fp", "اِسْتَوْفِينَ"},
{"imp_2fs", "اِسْتَوْفِي"},
{"imp_2mp", "اِسْتَوْفُوا"},
{"imp_2ms", "اِسْتَوْفِ"},
{"ind_1p", "نَسْتَوْفِي"},
{"ind_1s", "أَسْتَوْفِي"},
{"ind_2d", "تَسْتَوْفِيَانِ"},
{"ind_2fp", "تَسْتَوْفِينَ"},
{"ind_2fs", "تَسْتَوْفِينَ"},
{"ind_2mp", "تَسْتَوْفُونَ"},
{"ind_2ms", "تَسْتَوْفِي"},
{"ind_3fd", "تَسْتَوْفِيَانِ"},
{"ind_3fp", "يَسْتَوْفِينَ"},
{"ind_3fs", "تَسْتَوْفِي"},
{"ind_3md", "يَسْتَوْفِيَانِ"},
{"ind_3mp", "يَسْتَوْفُونَ"},
{"ind_3ms", "يَسْتَوْفِي"},
{"past_1p", "اِسْتَوْفَيْنَا"},
{"past_1s", "اِسْتَوْفَيْتُ"},
{"past_2d", "اِسْتَوْفَيْتُمَا"},
{"past_2fp", "اِسْتَوْفَيْتُنَّ"},
{"past_2fs", "اِسْتَوْفَيْتِ"},
{"past_2mp", "اِسْتَوْفَيْتُمْ"},
{"past_2ms", "اِسْتَوْفَيْتَ"},
{"past_3fd", "اِسْتَوْفَتَا"},
{"past_3fp", "اِسْتَوْفَيْنَ"},
{"past_3fs", "اِسْتَوْفَتْ"},
{"past_3md", "اِسْتَوْفَيَا"},
{"past_3mp", "اِسْتَوْفَوْا"},
{"past_3ms", "اِسْتَوْفَى"},
},
},
{
label = "اِسْتَوْلَى (p388)", root = "ولي", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَوْلِيَا"},
{"imp_2fp", "اِسْتَوْلِينَ"},
{"imp_2fs", "اِسْتَوْلِي"},
{"imp_2mp", "اِسْتَوْلُوا"},
{"ind_1p", "نَسْتَوْلِي"},
{"ind_1s", "أَسْتَوْلِي"},
{"ind_2d", "تَسْتَوْلِيَانِ"},
{"ind_2fp", "تَسْتَوْلِينَ"},
{"ind_2fs", "تَسْتَوْلِينَ"},
{"ind_2mp", "تَسْتَوْلُونَ"},
{"ind_2ms", "تَسْتَوْلِي"},
{"ind_3fd", "تَسْتَوْلِيَانِ"},
{"ind_3fp", "يَسْتَوْلِينَ"},
{"ind_3fs", "تَسْتَوْلِي"},
{"ind_3md", "يَسْتَوْلِيَانِ"},
{"ind_3mp", "يَسْتَوْلُونَ"},
{"ind_3ms", "يَسْتَوْلِي"},
{"past_1p", "اِسْتَوْلَيْنَا"},
{"past_1s", "اِسْتَوْلَيْتُ"},
{"past_2d", "اِسْتَوْلَيْتُمَا"},
{"past_2fp", "اِسْتَوْلَيْتُنَّ"},
{"past_2fs", "اِسْتَوْلَيْتِ"},
{"past_2mp", "اِسْتَوْلَيْتُمْ"},
{"past_2ms", "اِسْتَوْلَيْتَ"},
{"past_3fd", "اِسْتَوْلَتَا"},
{"past_3fp", "اِسْتَوْلَيْنَ"},
{"past_3fs", "اِسْتَوْلَتْ"},
{"past_3md", "اِسْتَوْلَيَا"},
{"past_3mp", "اِسْتَوْلَوْا"},
{"past_3ms", "اِسْتَوْلَى"},
},
},
{
label = "اِسْتَقْوى (p389)", root = "قوي", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَقْوِيَا"},
{"imp_2fp", "اِسْتَقْوِينَ"},
{"imp_2fs", "اِسْتَقْوِي"},
{"imp_2mp", "اِسْتَقْوُوا"},
{"imp_2ms", "اِسْتَقْوِ"},
{"ind_1p", "نَسْتَقْوِي"},
{"ind_1s", "أَسْتَقْوِي"},
{"ind_2d", "تَسْتَقْوِيَانِ"},
{"ind_2fp", "تَسْتَقْوِينَ"},
{"ind_2fs", "تَسْتَقْوِينَ"},
{"ind_2mp", "تَسْتَقْوُونَ"},
{"ind_2ms", "تَسْتَقْوِي"},
{"ind_3fd", "تَسْتَقْوِيَانِ"},
{"ind_3fp", "يَسْتَقْوِينَ"},
{"ind_3fs", "تَسْتَقْوِي"},
{"ind_3md", "يَسْتَقْوِيَانِ"},
{"ind_3mp", "يَسْتَقْوُونَ"},
{"ind_3ms", "يَسْتَقْوِي"},
{"past_1p", "اِسْتَقْوَيْنَا"},
{"past_1s", "اِسْتَقْوَيْتُ"},
{"past_2d", "اِسْتَقْوَيْتُمَا"},
{"past_2fp", "اِسْتَقْوَيْتُنَّ"},
{"past_2fs", "اِسْتَقْوَيْتِ"},
{"past_2mp", "اِسْتَقْوَيْتُمْ"},
{"past_2ms", "اِسْتَقْوَيْتَ"},
{"past_3fd", "اِسْتَقْوَتَا"},
{"past_3fp", "اِسْتَقْوَيْنَ"},
{"past_3fs", "اِسْتَقْوَتْ"},
{"past_3md", "اِسْتَقْوَيَا"},
{"past_3mp", "اِسْتَقْوَوْا"},
{"past_3ms", "اِسْتَقْوَى"},
},
},
{
label = "اِسْتَحْيا (p389)", root = "حيي", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَحِيَّا"},
{"imp_2fp", "اِسْتَحْيِينَ"},
{"imp_2fs", "اِسْتَحْيِي"},
{"imp_2mp", "اِسْتَحْيُوا"},
{"imp_2ms", "اِسْتَحْيِ"},
{"ind_1p", "نَسْتَحْيِي"},
{"ind_1s", "أَسْتَحْيِي"},
{"ind_2d", "تَسْتَحِيَّانِ"},
{"ind_2fp", "تَسْتَحْيِينَ"},
{"ind_2fs", "تَسْتَحْيِينَ"},
{"ind_2mp", "تَسْتَحْيُونَ"},
{"ind_2ms", "تَسْتَحْيِي"},
{"ind_3fd", "تَسْتَحِيَّانِ"},
{"ind_3fp", "يَسْتَحْيِينَ"},
{"ind_3fs", "تَسْتَحْيِي"},
{"ind_3md", "يَسْتَحِيَّانِ"},
{"ind_3mp", "يَسْتَحْيُونَ"},
{"ind_3ms", "يَسْتَحْيِي"},
{"past_1p", "اِسْتَحْيَيْنَا"},
{"past_1s", "اِسْتَحْيَيْتُ"},
{"past_2d", "اِسْتَحْيَيْتُمَا"},
{"past_2fp", "اِسْتَحْيَيْتُنَّ"},
{"past_2fs", "اِسْتَحْيَيْتِ"},
{"past_2mp", "اِسْتَحْيَيْتُمْ"},
{"past_2ms", "اِسْتَحْيَيْتَ"},
{"past_3fd", "اِسْتَحْيَتَا"},
{"past_3fp", "اِسْتَحْيَيْنَ"},
{"past_3fs", "اِسْتَحْيَتْ"},
{"past_3md", "اِسْتَحَيَّا"},
{"past_3mp", "اِسْتَحْيَوْا"},
{"past_3ms", "اِسْتَحْيَا"},
},
},
{
label = "زَلْزَلَ (p403)", root = "زلزل", wazn = "فعلل",
forms = {
{"imp_2d", "زَلْزِلَا"},
{"imp_2fp", "زَلْزِلْنَ"},
{"imp_2fs", "زَلْزِلِي"},
{"imp_2mp", "زَلْزِلُوا"},
{"imp_2ms", "زَلْزِلْ"},
{"ind_1p", "نُزَلْزِلُ"},
{"ind_1s", "أُزَلْزِلُ"},
{"ind_2d", "تُزَلْزِلَانِ"},
{"ind_2fp", "تُزَلْزِلْنَ"},
{"ind_2fs", "تُزَلْزِلِينَ"},
{"ind_2mp", "تُزَلْزِلُونَ"},
{"ind_2ms", "تُزَلْزِلُ"},
{"ind_3fd", "تُزَلْزِلَانِ"},
{"ind_3fp", "يُزَلْزِلْنَ"},
{"ind_3fs", "تُزَلْزِلُ"},
{"ind_3md", "يُزَلْزِلَانِ"},
{"ind_3mp", "يُزَلْزِلُونَ"},
{"ind_3ms", "يُزَلْزِلُ"},
{"past_1p", "زَلْزَلْنَا"},
{"past_1s", "زَلْزَلْتُ"},
{"past_2d", "زَلْزَلْتُمَا"},
{"past_2fp", "زَلْزَلْتُنَّ"},
{"past_2fs", "زَلْزَلْتِ"},
{"past_2mp", "زَلْزَلْتُمْ"},
{"past_2ms", "زَلْزَلْتَ"},
{"past_3fd", "زَلْزَلَتَا"},
{"past_3fp", "زَلْزَلْنَ"},
{"past_3fs", "زَلْزَلَتْ"},
{"past_3md", "زَلْزَلَا"},
{"past_3mp", "زَلْزَلُوا"},
{"past_3ms", "زَلْزَلَ"},
},
},
{
label = "قَهْقَرَ (p403)", root = "قهقر", wazn = "فعلل",
forms = {
{"imp_2d", "قَهْقِرَا"},
{"imp_2fp", "قَهْقِرْنَ"},
{"imp_2fs", "قَهْقِرِي"},
{"imp_2mp", "قَهْقِرُوا"},
{"imp_2ms", "قَهْقِرْ"},
{"ind_1p", "نُقَهْقِرُ"},
{"ind_1s", "أُقَهْقِرُ"},
{"ind_2d", "تُقَهْقِرَانِ"},
{"ind_2fp", "تُقَهْقِرْنَ"},
{"ind_2fs", "تُقَهْقِرِينَ"},
{"ind_2mp", "تُقَهْقِرُونَ"},
{"ind_2ms", "تُقَهْقِرُ"},
{"ind_3fd", "تُقَهْقِرَانِ"},
{"ind_3fp", "يُقَهْقِرْنَ"},
{"ind_3fs", "تُقَهْقِرُ"},
{"ind_3md", "يُقَهْقِرَانِ"},
{"ind_3mp", "يُقَهْقِرُونَ"},
{"ind_3ms", "يُقَهْقِرُ"},
{"past_1p", "قَهْقَرْنَا"},
{"past_1s", "قَهْقَرْتُ"},
{"past_2d", "قَهْقَرْتُمَا"},
{"past_2fp", "قَهْقَرْتُنَّ"},
{"past_2fs", "قَهْقَرْتِ"},
{"past_2mp", "قَهْقَرْتُمْ"},
{"past_2ms", "قَهْقَرْتَ"},
{"past_3fd", "قَهْقَرَتَا"},
{"past_3fp", "قَهْقَرْنَ"},
{"past_3fs", "قَهْقَرَتْ"},
{"past_3md", "قَهْقَرَا"},
{"past_3mp", "قَهْقَرُوا"},
{"past_3ms", "قَهْقَرَ"},
},
},
{
label = "سَمْأَلَ (p406)", root = "سمأل", wazn = "فعلل",
forms = {
{"imp_2d", "سَمْئِلَا"},
{"imp_2fp", "سَمْئِلْنَ"},
{"imp_2fs", "سَمْئِلِي"},
{"imp_2mp", "سَمْئِلُوا"},
{"imp_2ms", "سَمْئِلْ"},
{"ind_1p", "نُسَمْئِلُ"},
{"ind_1s", "أُسَمْئِلُ"},
{"ind_2d", "تُسَمْئِلَانِ"},
{"ind_2fp", "تُسَمْئِلْنَ"},
{"ind_2fs", "تُسَمْئِلِينَ"},
{"ind_2mp", "تُسَمْئِلُونَ"},
{"ind_2ms", "تُسَمْئِلُ"},
{"ind_3fd", "تُسَمْئِلَانِ"},
{"ind_3fp", "يُسَمْئِلْنَ"},
{"ind_3fs", "تُسَمْئِلُ"},
{"ind_3md", "يُسَمْئِلَانِ"},
{"ind_3mp", "يُسَمْئِلُونَ"},
{"ind_3ms", "يُسَمْئِلُ"},
{"past_1p", "سَمْأَلْنَا"},
{"past_1s", "سَمْأَلْتُ"},
{"past_2d", "سَمْأَلْتُمَا"},
{"past_2fp", "سَمْأَلْتُنَّ"},
{"past_2fs", "سَمْأَلْتِ"},
{"past_2mp", "سَمْأَلْتُمْ"},
{"past_2ms", "سَمْأَلْتَ"},
{"past_3fd", "سَمْأَلَتَا"},
{"past_3fp", "سَمْأَلْنَ"},
{"past_3fs", "سَمْأَلَتْ"},
{"past_3md", "سَمْأَلَا"},
{"past_3mp", "سَمْأَلُوا"},
{"past_3ms", "سَمْأَلَ"},
},
},
{
label = "كَرْفَأَ (p406)", root = "كرفأ", wazn = "فعلل",
forms = {
{"imp_2d", "كَرْفِئَا"},
{"imp_2fp", "كَرْفِئْنَ"},
{"imp_2fs", "كَرْفِئِي"},
{"imp_2mp", "كَرْفِئُوا"},
{"imp_2ms", "كَرْفِئْ"},
{"ind_1p", "نُكَرْفِئُ"},
{"ind_1s", "أُكَرْفِئُ"},
{"ind_2d", "تُكَرْفِئَانِ"},
{"ind_2fp", "تُكَرْفِئْنَ"},
{"ind_2fs", "تُكَرْفِئِينَ"},
{"ind_2mp", "تُكَرْفِئُونَ"},
{"ind_2ms", "تُكَرْفِئُ"},
{"ind_3fd", "تُكَرْفِئَانِ"},
{"ind_3fp", "يُكَرْفِئْنَ"},
{"ind_3fs", "تُكَرْفِئُ"},
{"ind_3md", "يُكَرْفِئَانِ"},
{"ind_3mp", "يُكَرْفِئُونَ"},
{"ind_3ms", "يُكَرْفِئُ"},
{"past_1p", "كَرْفَأْنَا"},
{"past_1s", "كَرْفَأْتُ"},
{"past_2d", "كَرْفَأْتُمَا"},
{"past_2fp", "كَرْفَأْتُنَّ"},
{"past_2fs", "كَرْفَأْتِ"},
{"past_2mp", "كَرْفَأْتُمْ"},
{"past_2ms", "كَرْفَأْتَ"},
{"past_3fd", "كَرْفَأَتَا"},
{"past_3fp", "كَرْفَأْنَ"},
{"past_3fs", "كَرْفَأَتْ"},
{"past_3md", "كَرْفَآ"},
{"past_3mp", "كَرْفَؤُوا"},
{"past_3ms", "كَرْفَأَ"},
},
},
{
label = "وَرْوَرَ (p407)", root = "ورور", wazn = "فعلل",
forms = {
{"imp_2d", "وَرْوِرَا"},
{"imp_2fp", "وَرْوِرْنَ"},
{"imp_2fs", "وَرْوِرِي"},
{"imp_2mp", "وَرْوِرُوا"},
{"imp_2ms", "وَرْوِرْ"},
{"ind_1p", "نُوَرْوِرُ"},
{"ind_1s", "أُوَرْوِرُ"},
{"ind_2d", "تُوَرْوِرَانِ"},
{"ind_2fp", "تُوَرْوِرْنَ"},
{"ind_2fs", "تُوَرْوِرِينَ"},
{"ind_2mp", "تُوَرْوِرُونَ"},
{"ind_2ms", "تُوَرْوِرُ"},
{"ind_3fd", "تُوَرْوِرَانِ"},
{"ind_3fp", "يُوَرْوِرْنَ"},
{"ind_3fs", "تُوَرْوِرُ"},
{"ind_3md", "يُوَرْوِرَانِ"},
{"ind_3mp", "يُوَرْوِرُونَ"},
{"ind_3ms", "يُوَرْوِرُ"},
{"past_1p", "وَرْوَرْنَا"},
{"past_1s", "وَرْوَرْتُ"},
{"past_2d", "وَرْوَرْتُمَا"},
{"past_2fp", "وَرْوَرْتُنَّ"},
{"past_2fs", "وَرْوَرْتِ"},
{"past_2mp", "وَرْوَرْتُمْ"},
{"past_2ms", "وَرْوَرْتَ"},
{"past_3fd", "وَرْوَرَتَا"},
{"past_3fp", "وَرْوَرْنَ"},
{"past_3fs", "وَرْوَرَتْ"},
{"past_3md", "وَرْوَرَا"},
{"past_3mp", "وَرْوَرُوا"},
{"past_3ms", "وَرْوَرَ"},
},
},
{
label = "وَشْوَشَ (p407)", root = "وشوش", wazn = "فعلل",
forms = {
{"imp_2d", "وَشْوِشَا"},
{"imp_2fp", "وَشْوِشْنَ"},
{"imp_2fs", "وَشْوِشِي"},
{"imp_2mp", "وَشْوِشُوا"},
{"imp_2ms", "وَشْوِشْ"},
{"ind_1p", "نُوَشْوِشُ"},
{"ind_1s", "أُوَشْوِشُ"},
{"ind_2d", "تُوَشْوِشَانِ"},
{"ind_2fp", "تُوَشْوِشْنَ"},
{"ind_2fs", "تُوَشْوِشِينَ"},
{"ind_2mp", "تُوَشْوِشُونَ"},
{"ind_2ms", "تُوَشْوِشُ"},
{"ind_3fd", "تُوَشْوِشَانِ"},
{"ind_3fp", "يُوَشْوِشْنَ"},
{"ind_3fs", "تُوَشْوِشُ"},
{"ind_3md", "يُوَشْوِشَانِ"},
{"ind_3mp", "يُوَشْوِشُونَ"},
{"ind_3ms", "يُوَشْوِشُ"},
{"past_1p", "وَشْوَشْنَا"},
{"past_1s", "وَشْوَشْتُ"},
{"past_2d", "وَشْوَشْتُمَا"},
{"past_2fp", "وَشْوَشْتُنَّ"},
{"past_2fs", "وَشْوَشْتِ"},
{"past_2mp", "وَشْوَشْتُمْ"},
{"past_2ms", "وَشْوَشْتَ"},
{"past_3fd", "وَشْوَشَتَا"},
{"past_3fp", "وَشْوَشْنَ"},
{"past_3fs", "وَشْوَشَتْ"},
{"past_3md", "وَشْوَشَا"},
{"past_3mp", "وَشْوَشُوا"},
{"past_3ms", "وَشْوَشَ"},
},
},
{
label = "دَهْوَرَ (p410)", root = "دهور", wazn = "فعلل",
forms = {
{"imp_2d", "دَهْوِرَا"},
{"imp_2fp", "دَهْوِرْنَ"},
{"imp_2fs", "دَهْوِرِي"},
{"imp_2mp", "دَهْوِرُوا"},
{"imp_2ms", "دَهْوِرْ"},
{"ind_1p", "نُدَهْوِرُ"},
{"ind_1s", "أُدَهْوِرُ"},
{"ind_2d", "تُدَهْوِرَانِ"},
{"ind_2fp", "تُدَهْوِرْنَ"},
{"ind_2fs", "تُدَهْوِرِينَ"},
{"ind_2mp", "تُدَهْوِرُونَ"},
{"ind_2ms", "تُدَهْوِرُ"},
{"ind_3fd", "تُدَهْوِرَانِ"},
{"ind_3fp", "يُدَهْوِرْنَ"},
{"ind_3fs", "تُدَهْوِرُ"},
{"ind_3md", "يُدَهْوِرَانِ"},
{"ind_3mp", "يُدَهْوِرُونَ"},
{"ind_3ms", "يُدَهْوِرُ"},
{"past_1p", "دَهْوَرْنَا"},
{"past_1s", "دَهْوَرْتُ"},
{"past_2d", "دَهْوَرْتُمَا"},
{"past_2fp", "دَهْوَرْتُنَّ"},
{"past_2fs", "دَهْوَرْتِ"},
{"past_2mp", "دَهْوَرْتُمْ"},
{"past_2ms", "دَهْوَرْتَ"},
{"past_3fd", "دَهْوَرَتَا"},
{"past_3fp", "دَهْوَرْنَ"},
{"past_3fs", "دَهْوَرَتْ"},
{"past_3md", "دَهْوَرَا"},
{"past_3mp", "دَهْوَرُوا"},
{"past_3ms", "دَهْوَرَ"},
},
},
{
label = "رَهْيَأَ (p410)", root = "رهيأ", wazn = "فعلل",
forms = {
{"imp_2d", "رَهْيِئَا"},
{"imp_2fp", "رَهْيِئْنَ"},
{"imp_2fs", "رَهْيِئِي"},
{"imp_2mp", "رَهْيِئُوا"},
{"imp_2ms", "رَهْيِئْ"},
{"ind_1p", "نُرَهْيِئُ"},
{"ind_1s", "أُرَهْيِئُ"},
{"ind_2d", "تُرَهْيِئَانِ"},
{"ind_2fp", "تُرَهْيِئْنَ"},
{"ind_2fs", "تُرَهْيِئِينَ"},
{"ind_2mp", "تُرَهْيِئُونَ"},
{"ind_2ms", "تُرَهْيِئُ"},
{"ind_3fd", "تُرَهْيِئَانِ"},
{"ind_3fp", "يُرَهْيِئْنَ"},
{"ind_3fs", "تُرَهْيِئُ"},
{"ind_3md", "يُرَهْيِئَانِ"},
{"ind_3mp", "يُرَهْيِئُونَ"},
{"ind_3ms", "يُرَهْيِئُ"},
{"past_1p", "رَهْيَأْنَا"},
{"past_1s", "رَهْيَأْتُ"},
{"past_2d", "رَهْيَأْتُمَا"},
{"past_2fp", "رَهْيَأْتُنَّ"},
{"past_2fs", "رَهْيَأْتِ"},
{"past_2mp", "رَهْيَأْتُمْ"},
{"past_2ms", "رَهْيَأْتَ"},
{"past_3fd", "رَهْيَأَتَا"},
{"past_3fp", "رَهْيَأْنَ"},
{"past_3fs", "رَهْيَأَتْ"},
{"past_3md", "رَهْيَآ"},
{"past_3mp", "رَهْيَؤُوا"},
{"past_3ms", "رَهْيَأَ"},
},
},
{
label = "وَزْوَزَ (p411)", root = "وزوز", wazn = "فعلل",
forms = {
{"imp_2d", "وَزْوِزَا"},
{"imp_2fp", "وَزْوِزْنَ"},
{"imp_2fs", "وَزْوِزِي"},
{"imp_2mp", "وَزْوِزُوا"},
{"imp_2ms", "وَزْوِزْ"},
{"ind_1p", "نُوَزْوِزُ"},
{"ind_1s", "أُوَزْوِزُ"},
{"ind_2d", "تُوَزْوِزَانِ"},
{"ind_2fp", "تُوَزْوِزْنَ"},
{"ind_2fs", "تُوَزْوِزِينَ"},
{"ind_2mp", "تُوَزْوِزُونَ"},
{"ind_2ms", "تُوَزْوِزُ"},
{"ind_3fd", "تُوَزْوِزَانِ"},
{"ind_3fp", "يُوَزْوِزْنَ"},
{"ind_3fs", "تُوَزْوِزُ"},
{"ind_3md", "يُوَزْوِزَانِ"},
{"ind_3mp", "يُوَزْوِزُونَ"},
{"ind_3ms", "يُوَزْوِزُ"},
{"past_1p", "وَزْوَزْنَا"},
{"past_1s", "وَزْوَزْتُ"},
{"past_2d", "وَزْوَزْتُمَا"},
{"past_2fp", "وَزْوَزْتُنَّ"},
{"past_2fs", "وَزْوَزْتِ"},
{"past_2mp", "وَزْوَزْتُمْ"},
{"past_2ms", "وَزْوَزْتَ"},
{"past_3fd", "وَزْوَزَتَا"},
{"past_3fp", "وَزْوَزْنَ"},
{"past_3fs", "وَزْوَزَتْ"},
{"past_3md", "وَزْوَزَا"},
{"past_3mp", "وَزْوَزُوا"},
{"past_3ms", "وَزْوَزَ"},
},
},
{
label = "وَقْوَقَ (p411)", root = "وقوق", wazn = "فعلل",
forms = {
{"imp_2d", "وَقْوِقَا"},
{"imp_2fp", "وَقْوِقْنَ"},
{"imp_2fs", "وَقْوِقِي"},
{"imp_2mp", "وَقْوِقُوا"},
{"imp_2ms", "وَقْوِقْ"},
{"ind_1p", "نُوَقْوِقُ"},
{"ind_1s", "أُوَقْوِقُ"},
{"ind_2d", "تُوَقْوِقَانِ"},
{"ind_2fp", "تُوَقْوِقْنَ"},
{"ind_2fs", "تُوَقْوِقِينَ"},
{"ind_2mp", "تُوَقْوِقُونَ"},
{"ind_2ms", "تُوَقْوِقُ"},
{"ind_3fd", "تُوَقْوِقَانِ"},
{"ind_3fp", "يُوَقْوِقْنَ"},
{"ind_3fs", "تُوَقْوِقُ"},
{"ind_3md", "يُوَقْوِقَانِ"},
{"ind_3mp", "يُوَقْوِقُونَ"},
{"ind_3ms", "يُوَقْوِقُ"},
{"past_1p", "وَقْوَقْنَا"},
{"past_1s", "وَقْوَقْتُ"},
{"past_2d", "وَقْوَقْتُمَا"},
{"past_2fp", "وَقْوَقْتُنَّ"},
{"past_2fs", "وَقْوَقْتِ"},
{"past_2mp", "وَقْوَقْتُمْ"},
{"past_2ms", "وَقْوَقْتَ"},
{"past_3fd", "وَقْوَقَتَا"},
{"past_3fp", "وَقْوَقْنَ"},
{"past_3fs", "وَقْوَقَتْ"},
{"past_3md", "وَقْوَقَا"},
{"past_3mp", "وَقْوَقُوا"},
{"past_3ms", "وَقْوَقَ"},
},
},
{
label = "تَزَحْلَقَ (p417)", root = "زحلق", wazn = "تفعلل",
forms = {
{"imp_2d", "تَزَحْلَقَا"},
{"imp_2fp", "تَزَحْلَقْنَ"},
{"imp_2fs", "تَزَحْلَقِي"},
{"imp_2mp", "تَزَحْلَقُوا"},
{"imp_2ms", "تَزَحْلَقْ"},
{"ind_1p", "نَتَزَحْلَقُ"},
{"ind_1s", "أَتَزَحْلَقُ"},
{"ind_2d", "تَتَزَحْلَقَانِ"},
{"ind_2fp", "تَتَزَحْلَقْنَ"},
{"ind_2fs", "تَتَزَحْلَقِينَ"},
{"ind_2mp", "تَتَزَحْلَقُونَ"},
{"ind_2ms", "تَتَزَحْلَقُ"},
{"ind_3fd", "تَتَزَحْلَقَانِ"},
{"ind_3fp", "يَتَزَحْلَقْنَ"},
{"ind_3fs", "تَتَزَحْلَقُ"},
{"ind_3md", "يَتَزَحْلَقَانِ"},
{"ind_3mp", "يَتَزَحْلَقُونَ"},
{"ind_3ms", "يَتَزَحْلَقُ"},
{"past_1p", "تَزَحْلَقْنَا"},
{"past_1s", "تَزَحْلَقْتُ"},
{"past_2d", "تَزَحْلَقْتُمَا"},
{"past_2fp", "تَزَحْلَقْتُنَّ"},
{"past_2fs", "تَزَحْلَقْتِ"},
{"past_2mp", "تَزَحْلَقْتُمْ"},
{"past_2ms", "تَزَحْلَقْتَ"},
{"past_3fd", "تَزَحْلَقَتَا"},
{"past_3fp", "تَزَحْلَقْنَ"},
{"past_3fs", "تَزَحْلَقَتْ"},
{"past_3md", "تَزَحْلَقَا"},
{"past_3mp", "تَزَحْلَقُوا"},
{"past_3ms", "تَزَحْلَقَ"},
},
},
{
label = "تَقَرْفَصَ (p417)", root = "قرفص", wazn = "تفعلل",
forms = {
{"imp_2d", "تَقَرْفَصَا"},
{"imp_2fp", "تَقَرْفَصْنَ"},
{"imp_2fs", "تَقَرْفَصِي"},
{"imp_2mp", "تَقَرْفَصُوا"},
{"imp_2ms", "تَقَرْفَصْ"},
{"ind_1p", "نَتَقَرْفَصُ"},
{"ind_1s", "أَتَقَرْفَصُ"},
{"ind_2d", "تَتَقَرْفَصَانِ"},
{"ind_2fp", "تَتَقَرْفَصْنَ"},
{"ind_2fs", "تَتَقَرْفَصِينَ"},
{"ind_2mp", "تَتَقَرْفَصُونَ"},
{"ind_2ms", "تَتَقَرْفَصُ"},
{"ind_3fd", "تَتَقَرْفَصَانِ"},
{"ind_3fp", "يَتَقَرْفَصْنَ"},
{"ind_3fs", "تَتَقَرْفَصُ"},
{"ind_3md", "يَتَقَرْفَصَانِ"},
{"ind_3mp", "يَتَقَرْفَصُونَ"},
{"ind_3ms", "يَتَقَرْفَصُ"},
{"past_1p", "تَقَرْفَصْنَا"},
{"past_1s", "تَقَرْفَصْتُ"},
{"past_2d", "تَقَرْفَصْتُمَا"},
{"past_2fp", "تَقَرْفَصْتُنَّ"},
{"past_2fs", "تَقَرْفَصْتِ"},
{"past_2mp", "تَقَرْفَصْتُمْ"},
{"past_2ms", "تَقَرْفَصْتَ"},
{"past_3fd", "تَقَرْفَصَتَا"},
{"past_3fp", "تَقَرْفَصْنَ"},
{"past_3fs", "تَقَرْفَصَتْ"},
{"past_3md", "تَقَرْفَصَا"},
{"past_3mp", "تَقَرْفَصُوا"},
{"past_3ms", "تَقَرْفَصَ"},
},
},
{
label = "سَاءَ (p157)", root = "سوء", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "سُوآ"},
{"imp_2fp", "سُؤْنَ"},
{"imp_2fs", "سُوئِي"},
{"imp_2mp", "سُوؤُوا"},
{"imp_2ms", "سُؤْ"},
{"ind_1p", "نَسُوءُ"},
{"ind_1s", "أَسُوءُ"},
{"ind_2d", "تَسُوآنِ"},
{"ind_2fp", "تَسُؤْنَ"},
{"ind_2fs", "تَسُوئِينَ"},
{"ind_2mp", "تَسُوؤُونَ"},
{"ind_2ms", "تَسُوءُ"},
{"ind_3fd", "تَسُوآنِ"},
{"ind_3fp", "يَسُؤْنَ"},
{"ind_3fs", "تَسُوءُ"},
{"ind_3md", "يَسُوآنِ"},
{"ind_3mp", "يَسُوؤُونَ"},
{"ind_3ms", "يَسُوءُ"},
{"past_1p", "سُؤْنَا"},
{"past_1s", "سُؤْتُ"},
{"past_2d", "سُؤْتُمَا"},
{"past_2fp", "سُؤْتُنَّ"},
{"past_2fs", "سُؤْتِ"},
{"past_2mp", "سُؤْتُمْ"},
{"past_2ms", "سُؤْتَ"},
{"past_3fd", "سَاءَتَا"},
{"past_3fp", "سُؤْنَ"},
{"past_3fs", "سَاءَتْ"},
{"past_3md", "سَاءَا"},
{"past_3mp", "سَاؤُوا"},
{"past_3ms", "سَاءَ"},
},
},
{
label = "أَرَمَ (p169)", root = "أرم", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِئْرِمَا"},
{"imp_2fp", "اِئْرِمْنَ"},
{"imp_2fs", "اِئْرِمِي"},
{"imp_2mp", "اِئْرِمُوا"},
{"imp_2ms", "اِئْرِمْ"},
{"ind_1p", "نَأْرِمُ"},
{"ind_1s", "آرِمُ"},
{"ind_2d", "تَأْرِمَانِ"},
{"ind_2fp", "تَأْرِمْنَ"},
{"ind_2fs", "تَأْرِمِينَ"},
{"ind_2mp", "تَأْرِمُونَ"},
{"ind_2ms", "تَأْرِمُ"},
{"ind_3fd", "تَأْرِمَانِ"},
{"ind_3fp", "يَأْرِمْنَ"},
{"ind_3fs", "تَأْرِمُ"},
{"ind_3md", "يَأْرِمَانِ"},
{"ind_3mp", "يَأْرِمُونَ"},
{"ind_3ms", "يَأْرِمُ"},
{"past_1p", "أَرَمْنَا"},
{"past_1s", "أَرَمْتُ"},
{"past_2d", "أَرَمْتُمَا"},
{"past_2fp", "أَرَمْتُنَّ"},
{"past_2fs", "أَرَمْتِ"},
{"past_2mp", "أَرَمْتُمْ"},
{"past_2ms", "أَرَمْتَ"},
{"past_3fd", "أَرَمَتَا"},
{"past_3fp", "أَرَمْنَ"},
{"past_3fs", "أَرَمَتْ"},
{"past_3md", "أَرَمَا"},
{"past_3mp", "أَرَمُوا"},
{"past_3ms", "أَرَمَ"},
},
},
{
label = "وَأَدَ (p174)", root = "وأد", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "إِدَا"},
{"imp_2fp", "إِدْنَ"},
{"imp_2fs", "إِدِي"},
{"imp_2mp", "إِدُوا"},
{"imp_2ms", "إِدْ"},
{"ind_1p", "نَئِدُ"},
{"ind_1s", "أَئِدُ"},
{"ind_2d", "تَئِدَانِ"},
{"ind_2fp", "تَئِدْنَ"},
{"ind_2fs", "تَئِدِينَ"},
{"ind_2mp", "تَئِدُونَ"},
{"ind_2ms", "تَئِدُ"},
{"ind_3fd", "تَئِدَانِ"},
{"ind_3fp", "يَئِدْنَ"},
{"ind_3fs", "تَئِدُ"},
{"ind_3md", "يَئِدَانِ"},
{"ind_3mp", "يَئِدُونَ"},
{"ind_3ms", "يَئِدُ"},
{"past_1p", "وَأَدْنَا"},
{"past_1s", "وَأَدْتُ"},
{"past_2d", "وَأَدْتُمَا"},
{"past_2fp", "وَأَدْتُنَّ"},
{"past_2fs", "وَأَدْتِ"},
{"past_2mp", "وَأَدْتُمْ"},
{"past_2ms", "وَأَدْتَ"},
{"past_3fd", "وَأَدَتَا"},
{"past_3fp", "وَأَدْنَ"},
{"past_3fs", "وَأَدَتْ"},
{"past_3md", "وَأَدَا"},
{"past_3mp", "وَأَدُوا"},
{"past_3ms", "وَأَدَ"},
},
},
{
label = "ضافَ (p176)", root = "ضيف", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "ضِيفَا"},
{"imp_2fp", "ضِفْنَ"},
{"imp_2fs", "ضِيفِي"},
{"imp_2mp", "ضِيفُوا"},
{"imp_2ms", "ضِفْ"},
{"ind_1p", "نَضِيفُ"},
{"ind_1s", "أَضِيفُ"},
{"ind_2d", "تَضِيفَانِ"},
{"ind_2fp", "تَضِفْنَ"},
{"ind_2fs", "تَضِيفِينَ"},
{"ind_2mp", "تَضِيفُونَ"},
{"ind_2ms", "تَضِيفُ"},
{"ind_3fd", "تَضِيفَانِ"},
{"ind_3fp", "يَضِفْنَ"},
{"ind_3fs", "تَضِيفُ"},
{"ind_3md", "يَضِيفَانِ"},
{"ind_3mp", "يَضِيفُونَ"},
{"ind_3ms", "يَضِيفُ"},
{"past_1p", "ضِفْنَا"},
{"past_1s", "ضِفْتُ"},
{"past_2d", "ضِفْتُمَا"},
{"past_2fp", "ضِفْتُنَّ"},
{"past_2fs", "ضِفْتِ"},
{"past_2mp", "ضِفْتُمْ"},
{"past_2ms", "ضِفْتَ"},
{"past_3fd", "ضَافَتَا"},
{"past_3fp", "ضِفْنَ"},
{"past_3fs", "ضَافَتْ"},
{"past_3md", "ضَافَا"},
{"past_3mp", "ضَافُوا"},
{"past_3ms", "ضَافَ"},
},
},
{
label = "لانَ (p177)", root = "لين", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "لِينَا"},
{"imp_2fp", "لِنَّ"},
{"imp_2fs", "لِينِي"},
{"imp_2mp", "لِينُوا"},
{"imp_2ms", "لِنْ"},
{"ind_1p", "نَلِينُ"},
{"ind_1s", "أَلِينُ"},
{"ind_2d", "تَلِينَانِ"},
{"ind_2fp", "تَلِنَّ"},
{"ind_2fs", "تَلِينِينَ"},
{"ind_2mp", "تَلِينُونَ"},
{"ind_2ms", "تَلِينُ"},
{"ind_3fd", "تَلِينَانِ"},
{"ind_3fp", "يَلِنَّ"},
{"ind_3fs", "تَلِينُ"},
{"ind_3md", "يَلِينَانِ"},
{"ind_3mp", "يَلِينُونَ"},
{"ind_3ms", "يَلِينُ"},
{"past_1p", "لِنَّا"},
{"past_1s", "لِنْتُ"},
{"past_2d", "لِنْتُمَا"},
{"past_2fp", "لِنْتُنَّ"},
{"past_2fs", "لِنْتِ"},
{"past_2mp", "لِنْتُمْ"},
{"past_2ms", "لِنْتَ"},
{"past_3fd", "لَانَتَا"},
{"past_3fp", "لِنَّ"},
{"past_3fs", "لَانَتْ"},
{"past_3md", "لَانَا"},
{"past_3mp", "لَانُوا"},
{"past_3ms", "لَانَ"},
},
},
{
label = "وَأَى (p182)", root = "وأي", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "إِيَا"},
{"imp_2fp", "إِينَ"},
{"imp_2fs", "إِي"},
{"imp_2mp", "أُوا"},
{"imp_2ms", "إِ"},
{"ind_1p", "نَئِي"},
{"ind_1s", "أَئِي"},
{"ind_2d", "تَئِيَانِ"},
{"ind_2fp", "تَئِينَ"},
{"ind_2fs", "تَئِينَ"},
{"ind_2mp", "تَؤُونَ"},
{"ind_2ms", "تَئِي"},
{"ind_3fd", "تَئِيَانِ"},
{"ind_3fp", "يَئِينَ"},
{"ind_3fs", "تَئِي"},
{"ind_3md", "يَئِيَانِ"},
{"ind_3mp", "يَؤُونَ"},
{"ind_3ms", "يَئِي"},
{"past_1p", "وَأَيْنَا"},
{"past_1s", "وَأَيْتُ"},
{"past_2d", "وَأَيْتُمَا"},
{"past_2fp", "وَأَيْتُنَّ"},
{"past_2fs", "وَأَيْتِ"},
{"past_2mp", "وَأَيْتُمْ"},
{"past_2ms", "وَأَيْتَ"},
{"past_3fd", "وَأَتَا"},
{"past_3fp", "وَأَيْنَ"},
{"past_3fs", "وَأَتْ"},
{"past_3md", "وَأَيَا"},
{"past_3mp", "وَأَوْا"},
{"past_3ms", "وَأَى"},
},
},
{
label = "وَعَى (p182)", root = "وعي", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "عِيَا"},
{"imp_2fp", "عِينَ"},
{"imp_2fs", "عِي"},
{"imp_2mp", "عُوا"},
{"imp_2ms", "عِ"},
{"ind_1p", "نَعِي"},
{"ind_1s", "أَعِي"},
{"ind_2d", "تَعِيَانِ"},
{"ind_2fp", "تَعِينَ"},
{"ind_2fs", "تَعِينَ"},
{"ind_2mp", "تَعُونَ"},
{"ind_2ms", "تَعِي"},
{"ind_3fd", "تَعِيَانِ"},
{"ind_3fp", "يَعِينَ"},
{"ind_3fs", "تَعِي"},
{"ind_3md", "يَعِيَانِ"},
{"ind_3mp", "يَعُونَ"},
{"ind_3ms", "يَعِي"},
{"past_1p", "وَعَيْنَا"},
{"past_1s", "وَعَيْتُ"},
{"past_2d", "وَعَيْتُمَا"},
{"past_2fp", "وَعَيْتُنَّ"},
{"past_2fs", "وَعَيْتِ"},
{"past_2mp", "وَعَيْتُمْ"},
{"past_2ms", "وَعَيْتَ"},
{"past_3fd", "وَعَتَا"},
{"past_3fp", "وَعَيْنَ"},
{"past_3fs", "وَعَتْ"},
{"past_3md", "وَعَيَا"},
{"past_3mp", "وَعَوْا"},
{"past_3ms", "وَعَى"},
},
},
{
label = "أَوَى (p184)", root = "أوي", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِئْوِيَا"},
{"imp_2fp", "اِئْوِينَ"},
{"imp_2fs", "اِئْوِي"},
{"imp_2mp", "اِئْوُوا"},
{"imp_2ms", "اِئْوِ"},
{"ind_1p", "نَأْوِي"},
{"ind_1s", "آوِي"},
{"ind_2d", "تَأْوِيَانِ"},
{"ind_2fp", "تَأْوِينَ"},
{"ind_2fs", "تَأْوِينَ"},
{"ind_2mp", "تَأْوُونَ"},
{"ind_2ms", "تَأْوِي"},
{"ind_3fd", "تَأْوِيَانِ"},
{"ind_3fp", "يَأْوِينَ"},
{"ind_3fs", "تَأْوِي"},
{"ind_3md", "يَأْوِيَانِ"},
{"ind_3mp", "يَأْوُونَ"},
{"ind_3ms", "يَأْوِي"},
{"past_1p", "أَوَيْنَا"},
{"past_1s", "أَوَيْتُ"},
{"past_2d", "أَوَيْتُمَا"},
{"past_2fp", "أَوَيْتُنَّ"},
{"past_2fs", "أَوَيْتِ"},
{"past_2mp", "أَوَيْتُمْ"},
{"past_2ms", "أَوَيْتَ"},
{"past_3fd", "أَوَتَا"},
{"past_3fp", "أَوَيْنَ"},
{"past_3fs", "أَوَتْ"},
{"past_3md", "أَوَيَا"},
{"past_3mp", "أَوَوْا"},
{"past_3ms", "أَوَى"},
},
},
{
label = "حَوَى (p184)", root = "حوي", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِحْوِيَا"},
{"imp_2fp", "اِحْوِينَ"},
{"imp_2fs", "اِحْوِي"},
{"imp_2mp", "اِحْوُوا"},
{"imp_2ms", "اِحْوِ"},
{"ind_1p", "نَحْوِي"},
{"ind_1s", "أَحْوِي"},
{"ind_2d", "تَحْوِيَانِ"},
{"ind_2fp", "تَحْوِينَ"},
{"ind_2fs", "تَحْوِينَ"},
{"ind_2mp", "تَحْوُونَ"},
{"ind_2ms", "تَحْوِي"},
{"ind_3fd", "تَحْوِيَانِ"},
{"ind_3fp", "يَحْوِينَ"},
{"ind_3fs", "تَحْوِي"},
{"ind_3md", "يَحْوِيَانِ"},
{"ind_3mp", "يَحْوُونَ"},
{"ind_3ms", "يَحْوِي"},
{"past_1p", "حَوَيْنَا"},
{"past_1s", "حَوَيْتُ"},
{"past_2d", "حَوَيْتُمَا"},
{"past_2fp", "حَوَيْتُنَّ"},
{"past_2fs", "حَوَيْتِ"},
{"past_2mp", "حَوَيْتُمْ"},
{"past_2ms", "حَوَيْتَ"},
{"past_3fd", "حَوَتَا"},
{"past_3fp", "حَوَيْنَ"},
{"past_3fs", "حَوَتْ"},
{"past_3md", "حَوَيَا"},
{"past_3mp", "حَوَوْا"},
{"past_3ms", "حَوَى"},
},
},
}
t2zfttx7vd6ffyo2ebojkxiz3jxenol
1159086
1159028
2026-09-10T19:34:15Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159086
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 10 من 16.
return {
{
label = "اِسْتَفَزَّ (p378)", root = "فزز", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَفِزَّا"},
{"imp_2fp", "اِسْتَفْزِزْنَ"},
{"imp_2fs", "اِسْتَفِزِّي"},
{"imp_2mp", "اِسْتَفِزُّوا"},
{"imp_2ms", "اِسْتَفْزِزْ"},
{"ind_1p", "نَسْتَفِزُّ"},
{"ind_1s", "أَسْتَفِزُّ"},
{"ind_2d", "تَسْتَفِزَّانِ"},
{"ind_2fp", "تَسْتَفْزِزْنَ"},
{"ind_2fs", "تَسْتَفِزِّينَ"},
{"ind_2mp", "تَسْتَفِزُّونَ"},
{"ind_2ms", "تَسْتَفِزُّ"},
{"ind_3fd", "تَسْتَفِزَّانِ"},
{"ind_3fp", "يَسْتَفْزِزْنَ"},
{"ind_3fs", "تَسْتَفِزُّ"},
{"ind_3md", "يَسْتَفِزَّانِ"},
{"ind_3mp", "يَسْتَفِزُّونَ"},
{"ind_3ms", "يَسْتَفِزُّ"},
{"past_1p", "اِسْتَفْزَزْنَا"},
{"past_1s", "اِسْتَفْزَزْتُ"},
{"past_2d", "اِسْتَفْزَزْتُمَا"},
{"past_2fp", "اِسْتَفْزَزْتُنَّ"},
{"past_2fs", "اِسْتَفْزَزْتِ"},
{"past_2mp", "اِسْتَفْزَزْتُمْ"},
{"past_2ms", "اِسْتَفْزَزْتَ"},
{"past_3fd", "اِسْتَفَزَّتَا"},
{"past_3fp", "اِسْتَفْزَزْنَ"},
{"past_3fs", "اِسْتَفَزَّتْ"},
{"past_3md", "اِسْتَفَزَّا"},
{"past_3mp", "اِسْتَفَزُّوا"},
{"past_3ms", "اِسْتَفَزَّ"},
},
},
{
label = "اِسْتَوْزَرَ (p383)", root = "وزر", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَوْزِرَا"},
{"imp_2fp", "اِسْتَوْزِرْنَ"},
{"imp_2fs", "اِسْتَوْزِرِي"},
{"imp_2mp", "اِسْتَوْزِرُوا"},
{"imp_2ms", "اِسْتَوْزِرْ"},
{"ind_1p", "نَسْتَوْزِرُ"},
{"ind_1s", "أَسْتَوْزِرُ"},
{"ind_2d", "تَسْتَوْزِرَانِ"},
{"ind_2fp", "تَسْتَوْزِرْنَ"},
{"ind_2fs", "تَسْتَوْزِرِينَ"},
{"ind_2mp", "تَسْتَوْزِرُونَ"},
{"ind_2ms", "تَسْتَوْزِرُ"},
{"ind_3fd", "تَسْتَوْزِرَانِ"},
{"ind_3fp", "يَسْتَوْزِرْنَ"},
{"ind_3fs", "تَسْتَوْزِرُ"},
{"ind_3md", "يَسْتَوْزِرَانِ"},
{"ind_3mp", "يَسْتَوْزِرُونَ"},
{"ind_3ms", "يَسْتَوْزِرُ"},
{"past_1p", "اِسْتَوْزَرْنَا"},
{"past_1s", "اِسْتَوْزَرْتُ"},
{"past_2d", "اِسْتَوْزَرْتُمَا"},
{"past_2fp", "اِسْتَوْزَرْتُنَّ"},
{"past_2fs", "اِسْتَوْزَرْتِ"},
{"past_2mp", "اِسْتَوْزَرْتُمْ"},
{"past_2ms", "اِسْتَوْزَرْتَ"},
{"past_3fd", "اِسْتَوْزَرَتَا"},
{"past_3fp", "اِسْتَوْزَرْنَ"},
{"past_3fs", "اِسْتَوْزَرَتْ"},
{"past_3md", "اِسْتَوْزَرَا"},
{"past_3mp", "اِسْتَوْزَرُوا"},
{"past_3ms", "اِسْتَوْزَرَ"},
},
},
{
label = "اِسْتَيْقَظَ (p383)", root = "يقظ", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَيْقِظَا"},
{"imp_2fp", "اِسْتَيْقِظْنَ"},
{"imp_2fs", "اِسْتَيْقِظِي"},
{"imp_2mp", "اِسْتَيْقِظُوا"},
{"imp_2ms", "اِسْتَيْقِظْ"},
{"ind_1p", "نَسْتَيْقِظُ"},
{"ind_1s", "أَسْتَيْقِظُ"},
{"ind_2d", "تَسْتَيْقِظَانِ"},
{"ind_2fp", "تَسْتَيْقِظْنَ"},
{"ind_2fs", "تَسْتَيْقِظِينَ"},
{"ind_2mp", "تَسْتَيْقِظُونَ"},
{"ind_2ms", "تَسْتَيْقِظُ"},
{"ind_3fd", "تَسْتَيْقِظَانِ"},
{"ind_3fp", "يَسْتَيْقِظْنَ"},
{"ind_3fs", "تَسْتَيْقِظُ"},
{"ind_3md", "يَسْتَيْقِظَانِ"},
{"ind_3mp", "يَسْتَيْقِظُونَ"},
{"ind_3ms", "يَسْتَيْقِظُ"},
{"past_1p", "اِسْتَيْقَظْنَا"},
{"past_1s", "اِسْتَيْقَظْتُ"},
{"past_2d", "اِسْتَيْقَظْتُمَا"},
{"past_2fp", "اِسْتَيْقَظْتُنَّ"},
{"past_2fs", "اِسْتَيْقَظْتِ"},
{"past_2mp", "اِسْتَيْقَظْتُمْ"},
{"past_2ms", "اِسْتَيْقَظْتَ"},
{"past_3fd", "اِسْتَيْقَظَتَا"},
{"past_3fp", "اِسْتَيْقَظْنَ"},
{"past_3fs", "اِسْتَيْقَظَتْ"},
{"past_3md", "اِسْتَيْقَظَا"},
{"past_3mp", "اِسْتَيْقَظُوا"},
{"past_3ms", "اِسْتَيْقَظَ"},
},
},
{
label = "اِسْتَأْدَى (p387)", root = "أدي", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَأْدِيَا"},
{"imp_2fp", "اِسْتَأْدِينَ"},
{"imp_2fs", "اِسْتَأْدِي"},
{"imp_2mp", "اِسْتَأْدُوا"},
{"imp_2ms", "اِسْتَأْدِ"},
{"ind_1p", "نَسْتَأْدِي"},
{"ind_1s", "أَسْتَأْدِي"},
{"ind_2d", "تَسْتَأْدِيَانِ"},
{"ind_2fp", "تَسْتَأْدِينَ"},
{"ind_2fs", "تَسْتَأْدِينَ"},
{"ind_2mp", "تَسْتَأْدُونَ"},
{"ind_2ms", "تَسْتَأْدِي"},
{"ind_3fd", "تَسْتَأْدِيَانِ"},
{"ind_3fp", "يَسْتَأْدِينَ"},
{"ind_3fs", "تَسْتَأْدِي"},
{"ind_3md", "يَسْتَأْدِيَانِ"},
{"ind_3mp", "يَسْتَأْدُونَ"},
{"ind_3ms", "يَسْتَأْدِي"},
{"past_1p", "اِسْتَأْدَيْنَا"},
{"past_1s", "اِسْتَأْدَيْتُ"},
{"past_2d", "اِسْتَأْدَيْتُمَا"},
{"past_2fp", "اِسْتَأْدَيْتُنَّ"},
{"past_2fs", "اِسْتَأْدَيْتِ"},
{"past_2mp", "اِسْتَأْدَيْتُمْ"},
{"past_2ms", "اِسْتَأْدَيْتَ"},
{"past_3fd", "اِسْتَأْدَتَا"},
{"past_3fp", "اِسْتَأْدَيْنَ"},
{"past_3fs", "اِسْتَأْدَتْ"},
{"past_3md", "اِسْتَأْدَيَا"},
{"past_3mp", "اِسْتَأْدَوْا"},
{"past_3ms", "اِسْتَأْدَى"},
},
},
{
label = "اِسْتَأْنَى (p387)", root = "أني", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَأْنِيَا"},
{"imp_2fp", "اِسْتَأْنِينَ"},
{"imp_2fs", "اِسْتَأْنِي"},
{"imp_2mp", "اِسْتَأْنُوا"},
{"imp_2ms", "اِسْتَأْنِ"},
{"ind_1p", "نَسْتَأْنِي"},
{"ind_1s", "أَسْتَأْنِي"},
{"ind_2d", "تَسْتَأْنِيَانِ"},
{"ind_2fp", "تَسْتَأْنِينَ"},
{"ind_2fs", "تَسْتَأْنِينَ"},
{"ind_2mp", "تَسْتَأْنُونَ"},
{"ind_2ms", "تَسْتَأْنِي"},
{"ind_3fd", "تَسْتَأْنِيَانِ"},
{"ind_3fp", "يَسْتَأْنِينَ"},
{"ind_3fs", "تَسْتَأْنِي"},
{"ind_3md", "يَسْتَأْنِيَانِ"},
{"ind_3mp", "يَسْتَأْنُونَ"},
{"ind_3ms", "يَسْتَأْنِي"},
{"past_1p", "اِسْتَأْنَيْنَا"},
{"past_1s", "اِسْتَأْنَيْتُ"},
{"past_2d", "اِسْتَأْنَيْتُمَا"},
{"past_2fp", "اِسْتَأْنَيْتُنَّ"},
{"past_2fs", "اِسْتَأْنَيْتِ"},
{"past_2mp", "اِسْتَأْنَيْتُمْ"},
{"past_2ms", "اِسْتَأْنَيْتَ"},
{"past_3fd", "اِسْتَأْنَتَا"},
{"past_3fp", "اِسْتَأْنَيْنَ"},
{"past_3fs", "اِسْتَأْنَتْ"},
{"past_3md", "اِسْتَأْنَيَا"},
{"past_3mp", "اِسْتَأْنَوْا"},
{"past_3ms", "اِسْتَأْنَى"},
},
},
{
label = "اِسْتَوْفَى (p388)", root = "وفي", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَوْفِيَا"},
{"imp_2fp", "اِسْتَوْفِينَ"},
{"imp_2fs", "اِسْتَوْفِي"},
{"imp_2mp", "اِسْتَوْفُوا"},
{"imp_2ms", "اِسْتَوْفِ"},
{"ind_1p", "نَسْتَوْفِي"},
{"ind_1s", "أَسْتَوْفِي"},
{"ind_2d", "تَسْتَوْفِيَانِ"},
{"ind_2fp", "تَسْتَوْفِينَ"},
{"ind_2fs", "تَسْتَوْفِينَ"},
{"ind_2mp", "تَسْتَوْفُونَ"},
{"ind_2ms", "تَسْتَوْفِي"},
{"ind_3fd", "تَسْتَوْفِيَانِ"},
{"ind_3fp", "يَسْتَوْفِينَ"},
{"ind_3fs", "تَسْتَوْفِي"},
{"ind_3md", "يَسْتَوْفِيَانِ"},
{"ind_3mp", "يَسْتَوْفُونَ"},
{"ind_3ms", "يَسْتَوْفِي"},
{"past_1p", "اِسْتَوْفَيْنَا"},
{"past_1s", "اِسْتَوْفَيْتُ"},
{"past_2d", "اِسْتَوْفَيْتُمَا"},
{"past_2fp", "اِسْتَوْفَيْتُنَّ"},
{"past_2fs", "اِسْتَوْفَيْتِ"},
{"past_2mp", "اِسْتَوْفَيْتُمْ"},
{"past_2ms", "اِسْتَوْفَيْتَ"},
{"past_3fd", "اِسْتَوْفَتَا"},
{"past_3fp", "اِسْتَوْفَيْنَ"},
{"past_3fs", "اِسْتَوْفَتْ"},
{"past_3md", "اِسْتَوْفَيَا"},
{"past_3mp", "اِسْتَوْفَوْا"},
{"past_3ms", "اِسْتَوْفَى"},
},
},
{
label = "اِسْتَوْلَى (p388)", root = "ولي", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَوْلِيَا"},
{"imp_2fp", "اِسْتَوْلِينَ"},
{"imp_2fs", "اِسْتَوْلِي"},
{"imp_2mp", "اِسْتَوْلُوا"},
{"ind_1p", "نَسْتَوْلِي"},
{"ind_1s", "أَسْتَوْلِي"},
{"ind_2d", "تَسْتَوْلِيَانِ"},
{"ind_2fp", "تَسْتَوْلِينَ"},
{"ind_2fs", "تَسْتَوْلِينَ"},
{"ind_2mp", "تَسْتَوْلُونَ"},
{"ind_2ms", "تَسْتَوْلِي"},
{"ind_3fd", "تَسْتَوْلِيَانِ"},
{"ind_3fp", "يَسْتَوْلِينَ"},
{"ind_3fs", "تَسْتَوْلِي"},
{"ind_3md", "يَسْتَوْلِيَانِ"},
{"ind_3mp", "يَسْتَوْلُونَ"},
{"ind_3ms", "يَسْتَوْلِي"},
{"past_1p", "اِسْتَوْلَيْنَا"},
{"past_1s", "اِسْتَوْلَيْتُ"},
{"past_2d", "اِسْتَوْلَيْتُمَا"},
{"past_2fp", "اِسْتَوْلَيْتُنَّ"},
{"past_2fs", "اِسْتَوْلَيْتِ"},
{"past_2mp", "اِسْتَوْلَيْتُمْ"},
{"past_2ms", "اِسْتَوْلَيْتَ"},
{"past_3fd", "اِسْتَوْلَتَا"},
{"past_3fp", "اِسْتَوْلَيْنَ"},
{"past_3fs", "اِسْتَوْلَتْ"},
{"past_3md", "اِسْتَوْلَيَا"},
{"past_3mp", "اِسْتَوْلَوْا"},
{"past_3ms", "اِسْتَوْلَى"},
},
},
{
label = "اِسْتَقْوى (p389)", root = "قوي", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَقْوِيَا"},
{"imp_2fp", "اِسْتَقْوِينَ"},
{"imp_2fs", "اِسْتَقْوِي"},
{"imp_2mp", "اِسْتَقْوُوا"},
{"imp_2ms", "اِسْتَقْوِ"},
{"ind_1p", "نَسْتَقْوِي"},
{"ind_1s", "أَسْتَقْوِي"},
{"ind_2d", "تَسْتَقْوِيَانِ"},
{"ind_2fp", "تَسْتَقْوِينَ"},
{"ind_2fs", "تَسْتَقْوِينَ"},
{"ind_2mp", "تَسْتَقْوُونَ"},
{"ind_2ms", "تَسْتَقْوِي"},
{"ind_3fd", "تَسْتَقْوِيَانِ"},
{"ind_3fp", "يَسْتَقْوِينَ"},
{"ind_3fs", "تَسْتَقْوِي"},
{"ind_3md", "يَسْتَقْوِيَانِ"},
{"ind_3mp", "يَسْتَقْوُونَ"},
{"ind_3ms", "يَسْتَقْوِي"},
{"past_1p", "اِسْتَقْوَيْنَا"},
{"past_1s", "اِسْتَقْوَيْتُ"},
{"past_2d", "اِسْتَقْوَيْتُمَا"},
{"past_2fp", "اِسْتَقْوَيْتُنَّ"},
{"past_2fs", "اِسْتَقْوَيْتِ"},
{"past_2mp", "اِسْتَقْوَيْتُمْ"},
{"past_2ms", "اِسْتَقْوَيْتَ"},
{"past_3fd", "اِسْتَقْوَتَا"},
{"past_3fp", "اِسْتَقْوَيْنَ"},
{"past_3fs", "اِسْتَقْوَتْ"},
{"past_3md", "اِسْتَقْوَيَا"},
{"past_3mp", "اِسْتَقْوَوْا"},
{"past_3ms", "اِسْتَقْوَى"},
},
},
{
label = "اِسْتَحْيا (p389)", root = "حيي", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَحِيَّا"},
{"imp_2fp", "اِسْتَحْيِينَ"},
{"imp_2fs", "اِسْتَحْيِي"},
{"imp_2mp", "اِسْتَحْيُوا"},
{"imp_2ms", "اِسْتَحْيِ"},
{"ind_1p", "نَسْتَحْيِي"},
{"ind_1s", "أَسْتَحْيِي"},
{"ind_2d", "تَسْتَحِيَّانِ"},
{"ind_2fp", "تَسْتَحْيِينَ"},
{"ind_2fs", "تَسْتَحْيِينَ"},
{"ind_2mp", "تَسْتَحْيُونَ"},
{"ind_2ms", "تَسْتَحْيِي"},
{"ind_3fd", "تَسْتَحِيَّانِ"},
{"ind_3fp", "يَسْتَحْيِينَ"},
{"ind_3fs", "تَسْتَحْيِي"},
{"ind_3md", "يَسْتَحِيَّانِ"},
{"ind_3mp", "يَسْتَحْيُونَ"},
{"ind_3ms", "يَسْتَحْيِي"},
{"past_1p", "اِسْتَحْيَيْنَا"},
{"past_1s", "اِسْتَحْيَيْتُ"},
{"past_2d", "اِسْتَحْيَيْتُمَا"},
{"past_2fp", "اِسْتَحْيَيْتُنَّ"},
{"past_2fs", "اِسْتَحْيَيْتِ"},
{"past_2mp", "اِسْتَحْيَيْتُمْ"},
{"past_2ms", "اِسْتَحْيَيْتَ"},
{"past_3fd", "اِسْتَحْيَتَا"},
{"past_3fp", "اِسْتَحْيَيْنَ"},
{"past_3fs", "اِسْتَحْيَتْ"},
{"past_3md", "اِسْتَحَيَّا"},
{"past_3mp", "اِسْتَحْيَوْا"},
{"past_3ms", "اِسْتَحْيَا"},
},
},
{
label = "زَلْزَلَ (p403)", root = "زلزل", wazn = "فعلل",
forms = {
{"imp_2d", "زَلْزِلَا"},
{"imp_2fp", "زَلْزِلْنَ"},
{"imp_2fs", "زَلْزِلِي"},
{"imp_2mp", "زَلْزِلُوا"},
{"imp_2ms", "زَلْزِلْ"},
{"ind_1p", "نُزَلْزِلُ"},
{"ind_1s", "أُزَلْزِلُ"},
{"ind_2d", "تُزَلْزِلَانِ"},
{"ind_2fp", "تُزَلْزِلْنَ"},
{"ind_2fs", "تُزَلْزِلِينَ"},
{"ind_2mp", "تُزَلْزِلُونَ"},
{"ind_2ms", "تُزَلْزِلُ"},
{"ind_3fd", "تُزَلْزِلَانِ"},
{"ind_3fp", "يُزَلْزِلْنَ"},
{"ind_3fs", "تُزَلْزِلُ"},
{"ind_3md", "يُزَلْزِلَانِ"},
{"ind_3mp", "يُزَلْزِلُونَ"},
{"ind_3ms", "يُزَلْزِلُ"},
{"past_1p", "زَلْزَلْنَا"},
{"past_1s", "زَلْزَلْتُ"},
{"past_2d", "زَلْزَلْتُمَا"},
{"past_2fp", "زَلْزَلْتُنَّ"},
{"past_2fs", "زَلْزَلْتِ"},
{"past_2mp", "زَلْزَلْتُمْ"},
{"past_2ms", "زَلْزَلْتَ"},
{"past_3fd", "زَلْزَلَتَا"},
{"past_3fp", "زَلْزَلْنَ"},
{"past_3fs", "زَلْزَلَتْ"},
{"past_3md", "زَلْزَلَا"},
{"past_3mp", "زَلْزَلُوا"},
{"past_3ms", "زَلْزَلَ"},
},
},
{
label = "قَهْقَرَ (p403)", root = "قهقر", wazn = "فعلل",
forms = {
{"imp_2d", "قَهْقِرَا"},
{"imp_2fp", "قَهْقِرْنَ"},
{"imp_2fs", "قَهْقِرِي"},
{"imp_2mp", "قَهْقِرُوا"},
{"imp_2ms", "قَهْقِرْ"},
{"ind_1p", "نُقَهْقِرُ"},
{"ind_1s", "أُقَهْقِرُ"},
{"ind_2d", "تُقَهْقِرَانِ"},
{"ind_2fp", "تُقَهْقِرْنَ"},
{"ind_2fs", "تُقَهْقِرِينَ"},
{"ind_2mp", "تُقَهْقِرُونَ"},
{"ind_2ms", "تُقَهْقِرُ"},
{"ind_3fd", "تُقَهْقِرَانِ"},
{"ind_3fp", "يُقَهْقِرْنَ"},
{"ind_3fs", "تُقَهْقِرُ"},
{"ind_3md", "يُقَهْقِرَانِ"},
{"ind_3mp", "يُقَهْقِرُونَ"},
{"ind_3ms", "يُقَهْقِرُ"},
{"past_1p", "قَهْقَرْنَا"},
{"past_1s", "قَهْقَرْتُ"},
{"past_2d", "قَهْقَرْتُمَا"},
{"past_2fp", "قَهْقَرْتُنَّ"},
{"past_2fs", "قَهْقَرْتِ"},
{"past_2mp", "قَهْقَرْتُمْ"},
{"past_2ms", "قَهْقَرْتَ"},
{"past_3fd", "قَهْقَرَتَا"},
{"past_3fp", "قَهْقَرْنَ"},
{"past_3fs", "قَهْقَرَتْ"},
{"past_3md", "قَهْقَرَا"},
{"past_3mp", "قَهْقَرُوا"},
{"past_3ms", "قَهْقَرَ"},
},
},
{
label = "سَمْأَلَ (p406)", root = "سمأل", wazn = "فعلل",
forms = {
{"imp_2d", "سَمْئِلَا"},
{"imp_2fp", "سَمْئِلْنَ"},
{"imp_2fs", "سَمْئِلِي"},
{"imp_2mp", "سَمْئِلُوا"},
{"imp_2ms", "سَمْئِلْ"},
{"ind_1p", "نُسَمْئِلُ"},
{"ind_1s", "أُسَمْئِلُ"},
{"ind_2d", "تُسَمْئِلَانِ"},
{"ind_2fp", "تُسَمْئِلْنَ"},
{"ind_2fs", "تُسَمْئِلِينَ"},
{"ind_2mp", "تُسَمْئِلُونَ"},
{"ind_2ms", "تُسَمْئِلُ"},
{"ind_3fd", "تُسَمْئِلَانِ"},
{"ind_3fp", "يُسَمْئِلْنَ"},
{"ind_3fs", "تُسَمْئِلُ"},
{"ind_3md", "يُسَمْئِلَانِ"},
{"ind_3mp", "يُسَمْئِلُونَ"},
{"ind_3ms", "يُسَمْئِلُ"},
{"past_1p", "سَمْأَلْنَا"},
{"past_1s", "سَمْأَلْتُ"},
{"past_2d", "سَمْأَلْتُمَا"},
{"past_2fp", "سَمْأَلْتُنَّ"},
{"past_2fs", "سَمْأَلْتِ"},
{"past_2mp", "سَمْأَلْتُمْ"},
{"past_2ms", "سَمْأَلْتَ"},
{"past_3fd", "سَمْأَلَتَا"},
{"past_3fp", "سَمْأَلْنَ"},
{"past_3fs", "سَمْأَلَتْ"},
{"past_3md", "سَمْأَلَا"},
{"past_3mp", "سَمْأَلُوا"},
{"past_3ms", "سَمْأَلَ"},
},
},
{
label = "كَرْفَأَ (p406)", root = "كرفأ", wazn = "فعلل",
forms = {
{"imp_2d", "كَرْفِئَا"},
{"imp_2fp", "كَرْفِئْنَ"},
{"imp_2fs", "كَرْفِئِي"},
{"imp_2mp", "كَرْفِئُوا"},
{"imp_2ms", "كَرْفِئْ"},
{"ind_1p", "نُكَرْفِئُ"},
{"ind_1s", "أُكَرْفِئُ"},
{"ind_2d", "تُكَرْفِئَانِ"},
{"ind_2fp", "تُكَرْفِئْنَ"},
{"ind_2fs", "تُكَرْفِئِينَ"},
{"ind_2mp", "تُكَرْفِئُونَ"},
{"ind_2ms", "تُكَرْفِئُ"},
{"ind_3fd", "تُكَرْفِئَانِ"},
{"ind_3fp", "يُكَرْفِئْنَ"},
{"ind_3fs", "تُكَرْفِئُ"},
{"ind_3md", "يُكَرْفِئَانِ"},
{"ind_3mp", "يُكَرْفِئُونَ"},
{"ind_3ms", "يُكَرْفِئُ"},
{"past_1p", "كَرْفَأْنَا"},
{"past_1s", "كَرْفَأْتُ"},
{"past_2d", "كَرْفَأْتُمَا"},
{"past_2fp", "كَرْفَأْتُنَّ"},
{"past_2fs", "كَرْفَأْتِ"},
{"past_2mp", "كَرْفَأْتُمْ"},
{"past_2ms", "كَرْفَأْتَ"},
{"past_3fd", "كَرْفَأَتَا"},
{"past_3fp", "كَرْفَأْنَ"},
{"past_3fs", "كَرْفَأَتْ"},
{"past_3md", "كَرْفَآ"},
{"past_3mp", "كَرْفَؤُوا"},
{"past_3ms", "كَرْفَأَ"},
},
},
{
label = "وَرْوَرَ (p407)", root = "ورور", wazn = "فعلل",
forms = {
{"imp_2d", "وَرْوِرَا"},
{"imp_2fp", "وَرْوِرْنَ"},
{"imp_2fs", "وَرْوِرِي"},
{"imp_2mp", "وَرْوِرُوا"},
{"imp_2ms", "وَرْوِرْ"},
{"ind_1p", "نُوَرْوِرُ"},
{"ind_1s", "أُوَرْوِرُ"},
{"ind_2d", "تُوَرْوِرَانِ"},
{"ind_2fp", "تُوَرْوِرْنَ"},
{"ind_2fs", "تُوَرْوِرِينَ"},
{"ind_2mp", "تُوَرْوِرُونَ"},
{"ind_2ms", "تُوَرْوِرُ"},
{"ind_3fd", "تُوَرْوِرَانِ"},
{"ind_3fp", "يُوَرْوِرْنَ"},
{"ind_3fs", "تُوَرْوِرُ"},
{"ind_3md", "يُوَرْوِرَانِ"},
{"ind_3mp", "يُوَرْوِرُونَ"},
{"ind_3ms", "يُوَرْوِرُ"},
{"past_1p", "وَرْوَرْنَا"},
{"past_1s", "وَرْوَرْتُ"},
{"past_2d", "وَرْوَرْتُمَا"},
{"past_2fp", "وَرْوَرْتُنَّ"},
{"past_2fs", "وَرْوَرْتِ"},
{"past_2mp", "وَرْوَرْتُمْ"},
{"past_2ms", "وَرْوَرْتَ"},
{"past_3fd", "وَرْوَرَتَا"},
{"past_3fp", "وَرْوَرْنَ"},
{"past_3fs", "وَرْوَرَتْ"},
{"past_3md", "وَرْوَرَا"},
{"past_3mp", "وَرْوَرُوا"},
{"past_3ms", "وَرْوَرَ"},
},
},
{
label = "وَشْوَشَ (p407)", root = "وشوش", wazn = "فعلل",
forms = {
{"imp_2d", "وَشْوِشَا"},
{"imp_2fp", "وَشْوِشْنَ"},
{"imp_2fs", "وَشْوِشِي"},
{"imp_2mp", "وَشْوِشُوا"},
{"imp_2ms", "وَشْوِشْ"},
{"ind_1p", "نُوَشْوِشُ"},
{"ind_1s", "أُوَشْوِشُ"},
{"ind_2d", "تُوَشْوِشَانِ"},
{"ind_2fp", "تُوَشْوِشْنَ"},
{"ind_2fs", "تُوَشْوِشِينَ"},
{"ind_2mp", "تُوَشْوِشُونَ"},
{"ind_2ms", "تُوَشْوِشُ"},
{"ind_3fd", "تُوَشْوِشَانِ"},
{"ind_3fp", "يُوَشْوِشْنَ"},
{"ind_3fs", "تُوَشْوِشُ"},
{"ind_3md", "يُوَشْوِشَانِ"},
{"ind_3mp", "يُوَشْوِشُونَ"},
{"ind_3ms", "يُوَشْوِشُ"},
{"past_1p", "وَشْوَشْنَا"},
{"past_1s", "وَشْوَشْتُ"},
{"past_2d", "وَشْوَشْتُمَا"},
{"past_2fp", "وَشْوَشْتُنَّ"},
{"past_2fs", "وَشْوَشْتِ"},
{"past_2mp", "وَشْوَشْتُمْ"},
{"past_2ms", "وَشْوَشْتَ"},
{"past_3fd", "وَشْوَشَتَا"},
{"past_3fp", "وَشْوَشْنَ"},
{"past_3fs", "وَشْوَشَتْ"},
{"past_3md", "وَشْوَشَا"},
{"past_3mp", "وَشْوَشُوا"},
{"past_3ms", "وَشْوَشَ"},
},
},
{
label = "دَهْوَرَ (p410)", root = "دهور", wazn = "فعلل",
forms = {
{"imp_2d", "دَهْوِرَا"},
{"imp_2fp", "دَهْوِرْنَ"},
{"imp_2fs", "دَهْوِرِي"},
{"imp_2mp", "دَهْوِرُوا"},
{"imp_2ms", "دَهْوِرْ"},
{"ind_1p", "نُدَهْوِرُ"},
{"ind_1s", "أُدَهْوِرُ"},
{"ind_2d", "تُدَهْوِرَانِ"},
{"ind_2fp", "تُدَهْوِرْنَ"},
{"ind_2fs", "تُدَهْوِرِينَ"},
{"ind_2mp", "تُدَهْوِرُونَ"},
{"ind_2ms", "تُدَهْوِرُ"},
{"ind_3fd", "تُدَهْوِرَانِ"},
{"ind_3fp", "يُدَهْوِرْنَ"},
{"ind_3fs", "تُدَهْوِرُ"},
{"ind_3md", "يُدَهْوِرَانِ"},
{"ind_3mp", "يُدَهْوِرُونَ"},
{"ind_3ms", "يُدَهْوِرُ"},
{"past_1p", "دَهْوَرْنَا"},
{"past_1s", "دَهْوَرْتُ"},
{"past_2d", "دَهْوَرْتُمَا"},
{"past_2fp", "دَهْوَرْتُنَّ"},
{"past_2fs", "دَهْوَرْتِ"},
{"past_2mp", "دَهْوَرْتُمْ"},
{"past_2ms", "دَهْوَرْتَ"},
{"past_3fd", "دَهْوَرَتَا"},
{"past_3fp", "دَهْوَرْنَ"},
{"past_3fs", "دَهْوَرَتْ"},
{"past_3md", "دَهْوَرَا"},
{"past_3mp", "دَهْوَرُوا"},
{"past_3ms", "دَهْوَرَ"},
},
},
{
label = "رَهْيَأَ (p410)", root = "رهيأ", wazn = "فعلل",
forms = {
{"imp_2d", "رَهْيِئَا"},
{"imp_2fp", "رَهْيِئْنَ"},
{"imp_2fs", "رَهْيِئِي"},
{"imp_2mp", "رَهْيِئُوا"},
{"imp_2ms", "رَهْيِئْ"},
{"ind_1p", "نُرَهْيِئُ"},
{"ind_1s", "أُرَهْيِئُ"},
{"ind_2d", "تُرَهْيِئَانِ"},
{"ind_2fp", "تُرَهْيِئْنَ"},
{"ind_2fs", "تُرَهْيِئِينَ"},
{"ind_2mp", "تُرَهْيِئُونَ"},
{"ind_2ms", "تُرَهْيِئُ"},
{"ind_3fd", "تُرَهْيِئَانِ"},
{"ind_3fp", "يُرَهْيِئْنَ"},
{"ind_3fs", "تُرَهْيِئُ"},
{"ind_3md", "يُرَهْيِئَانِ"},
{"ind_3mp", "يُرَهْيِئُونَ"},
{"ind_3ms", "يُرَهْيِئُ"},
{"past_1p", "رَهْيَأْنَا"},
{"past_1s", "رَهْيَأْتُ"},
{"past_2d", "رَهْيَأْتُمَا"},
{"past_2fp", "رَهْيَأْتُنَّ"},
{"past_2fs", "رَهْيَأْتِ"},
{"past_2mp", "رَهْيَأْتُمْ"},
{"past_2ms", "رَهْيَأْتَ"},
{"past_3fd", "رَهْيَأَتَا"},
{"past_3fp", "رَهْيَأْنَ"},
{"past_3fs", "رَهْيَأَتْ"},
{"past_3md", "رَهْيَآ"},
{"past_3mp", "رَهْيَؤُوا"},
{"past_3ms", "رَهْيَأَ"},
},
},
{
label = "وَزْوَزَ (p411)", root = "وزوز", wazn = "فعلل",
forms = {
{"imp_2d", "وَزْوِزَا"},
{"imp_2fp", "وَزْوِزْنَ"},
{"imp_2fs", "وَزْوِزِي"},
{"imp_2mp", "وَزْوِزُوا"},
{"imp_2ms", "وَزْوِزْ"},
{"ind_1p", "نُوَزْوِزُ"},
{"ind_1s", "أُوَزْوِزُ"},
{"ind_2d", "تُوَزْوِزَانِ"},
{"ind_2fp", "تُوَزْوِزْنَ"},
{"ind_2fs", "تُوَزْوِزِينَ"},
{"ind_2mp", "تُوَزْوِزُونَ"},
{"ind_2ms", "تُوَزْوِزُ"},
{"ind_3fd", "تُوَزْوِزَانِ"},
{"ind_3fp", "يُوَزْوِزْنَ"},
{"ind_3fs", "تُوَزْوِزُ"},
{"ind_3md", "يُوَزْوِزَانِ"},
{"ind_3mp", "يُوَزْوِزُونَ"},
{"ind_3ms", "يُوَزْوِزُ"},
{"past_1p", "وَزْوَزْنَا"},
{"past_1s", "وَزْوَزْتُ"},
{"past_2d", "وَزْوَزْتُمَا"},
{"past_2fp", "وَزْوَزْتُنَّ"},
{"past_2fs", "وَزْوَزْتِ"},
{"past_2mp", "وَزْوَزْتُمْ"},
{"past_2ms", "وَزْوَزْتَ"},
{"past_3fd", "وَزْوَزَتَا"},
{"past_3fp", "وَزْوَزْنَ"},
{"past_3fs", "وَزْوَزَتْ"},
{"past_3md", "وَزْوَزَا"},
{"past_3mp", "وَزْوَزُوا"},
{"past_3ms", "وَزْوَزَ"},
},
},
{
label = "وَقْوَقَ (p411)", root = "وقوق", wazn = "فعلل",
forms = {
{"imp_2d", "وَقْوِقَا"},
{"imp_2fp", "وَقْوِقْنَ"},
{"imp_2fs", "وَقْوِقِي"},
{"imp_2mp", "وَقْوِقُوا"},
{"imp_2ms", "وَقْوِقْ"},
{"ind_1p", "نُوَقْوِقُ"},
{"ind_1s", "أُوَقْوِقُ"},
{"ind_2d", "تُوَقْوِقَانِ"},
{"ind_2fp", "تُوَقْوِقْنَ"},
{"ind_2fs", "تُوَقْوِقِينَ"},
{"ind_2mp", "تُوَقْوِقُونَ"},
{"ind_2ms", "تُوَقْوِقُ"},
{"ind_3fd", "تُوَقْوِقَانِ"},
{"ind_3fp", "يُوَقْوِقْنَ"},
{"ind_3fs", "تُوَقْوِقُ"},
{"ind_3md", "يُوَقْوِقَانِ"},
{"ind_3mp", "يُوَقْوِقُونَ"},
{"ind_3ms", "يُوَقْوِقُ"},
{"past_1p", "وَقْوَقْنَا"},
{"past_1s", "وَقْوَقْتُ"},
{"past_2d", "وَقْوَقْتُمَا"},
{"past_2fp", "وَقْوَقْتُنَّ"},
{"past_2fs", "وَقْوَقْتِ"},
{"past_2mp", "وَقْوَقْتُمْ"},
{"past_2ms", "وَقْوَقْتَ"},
{"past_3fd", "وَقْوَقَتَا"},
{"past_3fp", "وَقْوَقْنَ"},
{"past_3fs", "وَقْوَقَتْ"},
{"past_3md", "وَقْوَقَا"},
{"past_3mp", "وَقْوَقُوا"},
{"past_3ms", "وَقْوَقَ"},
},
},
{
label = "تَزَحْلَقَ (p417)", root = "زحلق", wazn = "تفعلل",
forms = {
{"imp_2d", "تَزَحْلَقَا"},
{"imp_2fp", "تَزَحْلَقْنَ"},
{"imp_2fs", "تَزَحْلَقِي"},
{"imp_2mp", "تَزَحْلَقُوا"},
{"imp_2ms", "تَزَحْلَقْ"},
{"ind_1p", "نَتَزَحْلَقُ"},
{"ind_1s", "أَتَزَحْلَقُ"},
{"ind_2d", "تَتَزَحْلَقَانِ"},
{"ind_2fp", "تَتَزَحْلَقْنَ"},
{"ind_2fs", "تَتَزَحْلَقِينَ"},
{"ind_2mp", "تَتَزَحْلَقُونَ"},
{"ind_2ms", "تَتَزَحْلَقُ"},
{"ind_3fd", "تَتَزَحْلَقَانِ"},
{"ind_3fp", "يَتَزَحْلَقْنَ"},
{"ind_3fs", "تَتَزَحْلَقُ"},
{"ind_3md", "يَتَزَحْلَقَانِ"},
{"ind_3mp", "يَتَزَحْلَقُونَ"},
{"ind_3ms", "يَتَزَحْلَقُ"},
{"past_1p", "تَزَحْلَقْنَا"},
{"past_1s", "تَزَحْلَقْتُ"},
{"past_2d", "تَزَحْلَقْتُمَا"},
{"past_2fp", "تَزَحْلَقْتُنَّ"},
{"past_2fs", "تَزَحْلَقْتِ"},
{"past_2mp", "تَزَحْلَقْتُمْ"},
{"past_2ms", "تَزَحْلَقْتَ"},
{"past_3fd", "تَزَحْلَقَتَا"},
{"past_3fp", "تَزَحْلَقْنَ"},
{"past_3fs", "تَزَحْلَقَتْ"},
{"past_3md", "تَزَحْلَقَا"},
{"past_3mp", "تَزَحْلَقُوا"},
{"past_3ms", "تَزَحْلَقَ"},
},
},
{
label = "تَقَرْفَصَ (p417)", root = "قرفص", wazn = "تفعلل",
forms = {
{"imp_2d", "تَقَرْفَصَا"},
{"imp_2fp", "تَقَرْفَصْنَ"},
{"imp_2fs", "تَقَرْفَصِي"},
{"imp_2mp", "تَقَرْفَصُوا"},
{"imp_2ms", "تَقَرْفَصْ"},
{"ind_1p", "نَتَقَرْفَصُ"},
{"ind_1s", "أَتَقَرْفَصُ"},
{"ind_2d", "تَتَقَرْفَصَانِ"},
{"ind_2fp", "تَتَقَرْفَصْنَ"},
{"ind_2fs", "تَتَقَرْفَصِينَ"},
{"ind_2mp", "تَتَقَرْفَصُونَ"},
{"ind_2ms", "تَتَقَرْفَصُ"},
{"ind_3fd", "تَتَقَرْفَصَانِ"},
{"ind_3fp", "يَتَقَرْفَصْنَ"},
{"ind_3fs", "تَتَقَرْفَصُ"},
{"ind_3md", "يَتَقَرْفَصَانِ"},
{"ind_3mp", "يَتَقَرْفَصُونَ"},
{"ind_3ms", "يَتَقَرْفَصُ"},
{"past_1p", "تَقَرْفَصْنَا"},
{"past_1s", "تَقَرْفَصْتُ"},
{"past_2d", "تَقَرْفَصْتُمَا"},
{"past_2fp", "تَقَرْفَصْتُنَّ"},
{"past_2fs", "تَقَرْفَصْتِ"},
{"past_2mp", "تَقَرْفَصْتُمْ"},
{"past_2ms", "تَقَرْفَصْتَ"},
{"past_3fd", "تَقَرْفَصَتَا"},
{"past_3fp", "تَقَرْفَصْنَ"},
{"past_3fs", "تَقَرْفَصَتْ"},
{"past_3md", "تَقَرْفَصَا"},
{"past_3mp", "تَقَرْفَصُوا"},
{"past_3ms", "تَقَرْفَصَ"},
},
},
{
label = "سَاءَ (p157)", root = "سوء", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "سُوآ"},
{"imp_2fp", "سُؤْنَ"},
{"imp_2fs", "سُوئِي"},
{"imp_2mp", "سُوؤُوا"},
{"imp_2ms", "سُؤْ"},
{"ind_1p", "نَسُوءُ"},
{"ind_1s", "أَسُوءُ"},
{"ind_2d", "تَسُوآنِ"},
{"ind_2fp", "تَسُؤْنَ"},
{"ind_2fs", "تَسُوئِينَ"},
{"ind_2mp", "تَسُوؤُونَ"},
{"ind_2ms", "تَسُوءُ"},
{"ind_3fd", "تَسُوآنِ"},
{"ind_3fp", "يَسُؤْنَ"},
{"ind_3fs", "تَسُوءُ"},
{"ind_3md", "يَسُوآنِ"},
{"ind_3mp", "يَسُوؤُونَ"},
{"ind_3ms", "يَسُوءُ"},
{"past_1p", "سُؤْنَا"},
{"past_1s", "سُؤْتُ"},
{"past_2d", "سُؤْتُمَا"},
{"past_2fp", "سُؤْتُنَّ"},
{"past_2fs", "سُؤْتِ"},
{"past_2mp", "سُؤْتُمْ"},
{"past_2ms", "سُؤْتَ"},
{"past_3fd", "سَاءَتَا"},
{"past_3fp", "سُؤْنَ"},
{"past_3fs", "سَاءَتْ"},
{"past_3md", "سَاءَا"},
{"past_3mp", "سَاؤُوا"},
{"past_3ms", "سَاءَ"},
},
},
{
label = "أَرَمَ (p169)", root = "أرم", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِئْرِمَا"},
{"imp_2fp", "اِئْرِمْنَ"},
{"imp_2fs", "اِئْرِمِي"},
{"imp_2mp", "اِئْرِمُوا"},
{"imp_2ms", "اِئْرِمْ"},
{"ind_1p", "نَأْرِمُ"},
{"ind_1s", "آرِمُ"},
{"ind_2d", "تَأْرِمَانِ"},
{"ind_2fp", "تَأْرِمْنَ"},
{"ind_2fs", "تَأْرِمِينَ"},
{"ind_2mp", "تَأْرِمُونَ"},
{"ind_2ms", "تَأْرِمُ"},
{"ind_3fd", "تَأْرِمَانِ"},
{"ind_3fp", "يَأْرِمْنَ"},
{"ind_3fs", "تَأْرِمُ"},
{"ind_3md", "يَأْرِمَانِ"},
{"ind_3mp", "يَأْرِمُونَ"},
{"ind_3ms", "يَأْرِمُ"},
{"past_1p", "أَرَمْنَا"},
{"past_1s", "أَرَمْتُ"},
{"past_2d", "أَرَمْتُمَا"},
{"past_2fp", "أَرَمْتُنَّ"},
{"past_2fs", "أَرَمْتِ"},
{"past_2mp", "أَرَمْتُمْ"},
{"past_2ms", "أَرَمْتَ"},
{"past_3fd", "أَرَمَتَا"},
{"past_3fp", "أَرَمْنَ"},
{"past_3fs", "أَرَمَتْ"},
{"past_3md", "أَرَمَا"},
{"past_3mp", "أَرَمُوا"},
{"past_3ms", "أَرَمَ"},
},
},
{
label = "وَأَدَ (p174)", root = "وأد", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "إِدَا"},
{"imp_2fp", "إِدْنَ"},
{"imp_2fs", "إِدِي"},
{"imp_2mp", "إِدُوا"},
{"imp_2ms", "إِدْ"},
{"ind_1p", "نَئِدُ"},
{"ind_1s", "أَئِدُ"},
{"ind_2d", "تَئِدَانِ"},
{"ind_2fp", "تَئِدْنَ"},
{"ind_2fs", "تَئِدِينَ"},
{"ind_2mp", "تَئِدُونَ"},
{"ind_2ms", "تَئِدُ"},
{"ind_3fd", "تَئِدَانِ"},
{"ind_3fp", "يَئِدْنَ"},
{"ind_3fs", "تَئِدُ"},
{"ind_3md", "يَئِدَانِ"},
{"ind_3mp", "يَئِدُونَ"},
{"ind_3ms", "يَئِدُ"},
{"past_1p", "وَأَدْنَا"},
{"past_1s", "وَأَدْتُ"},
{"past_2d", "وَأَدْتُمَا"},
{"past_2fp", "وَأَدْتُنَّ"},
{"past_2fs", "وَأَدْتِ"},
{"past_2mp", "وَأَدْتُمْ"},
{"past_2ms", "وَأَدْتَ"},
{"past_3fd", "وَأَدَتَا"},
{"past_3fp", "وَأَدْنَ"},
{"past_3fs", "وَأَدَتْ"},
{"past_3md", "وَأَدَا"},
{"past_3mp", "وَأَدُوا"},
{"past_3ms", "وَأَدَ"},
},
},
{
label = "ضافَ (p176)", root = "ضيف", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "ضِيفَا"},
{"imp_2fp", "ضِفْنَ"},
{"imp_2fs", "ضِيفِي"},
{"imp_2mp", "ضِيفُوا"},
{"imp_2ms", "ضِفْ"},
{"ind_1p", "نَضِيفُ"},
{"ind_1s", "أَضِيفُ"},
{"ind_2d", "تَضِيفَانِ"},
{"ind_2fp", "تَضِفْنَ"},
{"ind_2fs", "تَضِيفِينَ"},
{"ind_2mp", "تَضِيفُونَ"},
{"ind_2ms", "تَضِيفُ"},
{"ind_3fd", "تَضِيفَانِ"},
{"ind_3fp", "يَضِفْنَ"},
{"ind_3fs", "تَضِيفُ"},
{"ind_3md", "يَضِيفَانِ"},
{"ind_3mp", "يَضِيفُونَ"},
{"ind_3ms", "يَضِيفُ"},
{"past_1p", "ضِفْنَا"},
{"past_1s", "ضِفْتُ"},
{"past_2d", "ضِفْتُمَا"},
{"past_2fp", "ضِفْتُنَّ"},
{"past_2fs", "ضِفْتِ"},
{"past_2mp", "ضِفْتُمْ"},
{"past_2ms", "ضِفْتَ"},
{"past_3fd", "ضَافَتَا"},
{"past_3fp", "ضِفْنَ"},
{"past_3fs", "ضَافَتْ"},
{"past_3md", "ضَافَا"},
{"past_3mp", "ضَافُوا"},
{"past_3ms", "ضَافَ"},
},
},
{
label = "لانَ (p177)", root = "لين", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "لِينَا"},
{"imp_2fp", "لِنَّ"},
{"imp_2fs", "لِينِي"},
{"imp_2mp", "لِينُوا"},
{"imp_2ms", "لِنْ"},
{"ind_1p", "نَلِينُ"},
{"ind_1s", "أَلِينُ"},
{"ind_2d", "تَلِينَانِ"},
{"ind_2fp", "تَلِنَّ"},
{"ind_2fs", "تَلِينِينَ"},
{"ind_2mp", "تَلِينُونَ"},
{"ind_2ms", "تَلِينُ"},
{"ind_3fd", "تَلِينَانِ"},
{"ind_3fp", "يَلِنَّ"},
{"ind_3fs", "تَلِينُ"},
{"ind_3md", "يَلِينَانِ"},
{"ind_3mp", "يَلِينُونَ"},
{"ind_3ms", "يَلِينُ"},
{"past_1p", "لِنَّا"},
{"past_1s", "لِنْتُ"},
{"past_2d", "لِنْتُمَا"},
{"past_2fp", "لِنْتُنَّ"},
{"past_2fs", "لِنْتِ"},
{"past_2mp", "لِنْتُمْ"},
{"past_2ms", "لِنْتَ"},
{"past_3fd", "لَانَتَا"},
{"past_3fp", "لِنَّ"},
{"past_3fs", "لَانَتْ"},
{"past_3md", "لَانَا"},
{"past_3mp", "لَانُوا"},
{"past_3ms", "لَانَ"},
},
},
{
label = "وَأَى (p182)", root = "وأي", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "إِيَا"},
{"imp_2fp", "إِينَ"},
{"imp_2fs", "إِي"},
{"imp_2mp", "أُوا"},
{"imp_2ms", "إِ"},
{"ind_1p", "نَئِي"},
{"ind_1s", "أَئِي"},
{"ind_2d", "تَئِيَانِ"},
{"ind_2fp", "تَئِينَ"},
{"ind_2fs", "تَئِينَ"},
{"ind_2mp", "تَؤُونَ"},
{"ind_2ms", "تَئِي"},
{"ind_3fd", "تَئِيَانِ"},
{"ind_3fp", "يَئِينَ"},
{"ind_3fs", "تَئِي"},
{"ind_3md", "يَئِيَانِ"},
{"ind_3mp", "يَؤُونَ"},
{"ind_3ms", "يَئِي"},
{"past_1p", "وَأَيْنَا"},
{"past_1s", "وَأَيْتُ"},
{"past_2d", "وَأَيْتُمَا"},
{"past_2fp", "وَأَيْتُنَّ"},
{"past_2fs", "وَأَيْتِ"},
{"past_2mp", "وَأَيْتُمْ"},
{"past_2ms", "وَأَيْتَ"},
{"past_3fd", "وَأَتَا"},
{"past_3fp", "وَأَيْنَ"},
{"past_3fs", "وَأَتْ"},
{"past_3md", "وَأَيَا"},
{"past_3mp", "وَأَوْا"},
{"past_3ms", "وَأَى"},
},
},
{
label = "وَعَى (p182)", root = "وعي", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "عِيَا"},
{"imp_2fp", "عِينَ"},
{"imp_2fs", "عِي"},
{"imp_2mp", "عُوا"},
{"imp_2ms", "عِ"},
{"ind_1p", "نَعِي"},
{"ind_1s", "أَعِي"},
{"ind_2d", "تَعِيَانِ"},
{"ind_2fp", "تَعِينَ"},
{"ind_2fs", "تَعِينَ"},
{"ind_2mp", "تَعُونَ"},
{"ind_2ms", "تَعِي"},
{"ind_3fd", "تَعِيَانِ"},
{"ind_3fp", "يَعِينَ"},
{"ind_3fs", "تَعِي"},
{"ind_3md", "يَعِيَانِ"},
{"ind_3mp", "يَعُونَ"},
{"ind_3ms", "يَعِي"},
{"past_1p", "وَعَيْنَا"},
{"past_1s", "وَعَيْتُ"},
{"past_2d", "وَعَيْتُمَا"},
{"past_2fp", "وَعَيْتُنَّ"},
{"past_2fs", "وَعَيْتِ"},
{"past_2mp", "وَعَيْتُمْ"},
{"past_2ms", "وَعَيْتَ"},
{"past_3fd", "وَعَتَا"},
{"past_3fp", "وَعَيْنَ"},
{"past_3fs", "وَعَتْ"},
{"past_3md", "وَعَيَا"},
{"past_3mp", "وَعَوْا"},
{"past_3ms", "وَعَى"},
},
},
{
label = "أَوَى (p184)", root = "أوي", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِئْوِيَا"},
{"imp_2fp", "اِئْوِينَ"},
{"imp_2fs", "اِئْوِي"},
{"imp_2mp", "اِئْوُوا"},
{"imp_2ms", "اِئْوِ"},
{"ind_1p", "نَأْوِي"},
{"ind_1s", "آوِي"},
{"ind_2d", "تَأْوِيَانِ"},
{"ind_2fp", "تَأْوِينَ"},
{"ind_2fs", "تَأْوِينَ"},
{"ind_2mp", "تَأْوُونَ"},
{"ind_2ms", "تَأْوِي"},
{"ind_3fd", "تَأْوِيَانِ"},
{"ind_3fp", "يَأْوِينَ"},
{"ind_3fs", "تَأْوِي"},
{"ind_3md", "يَأْوِيَانِ"},
{"ind_3mp", "يَأْوُونَ"},
{"ind_3ms", "يَأْوِي"},
{"past_1p", "أَوَيْنَا"},
{"past_1s", "أَوَيْتُ"},
{"past_2d", "أَوَيْتُمَا"},
{"past_2fp", "أَوَيْتُنَّ"},
{"past_2fs", "أَوَيْتِ"},
{"past_2mp", "أَوَيْتُمْ"},
{"past_2ms", "أَوَيْتَ"},
{"past_3fd", "أَوَتَا"},
{"past_3fp", "أَوَيْنَ"},
{"past_3fs", "أَوَتْ"},
{"past_3md", "أَوَيَا"},
{"past_3mp", "أَوَوْا"},
{"past_3ms", "أَوَى"},
},
},
{
label = "حَوَى (p184)", root = "حوي", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِحْوِيَا"},
{"imp_2fp", "اِحْوِينَ"},
{"imp_2fs", "اِحْوِي"},
{"imp_2mp", "اِحْوُوا"},
{"imp_2ms", "اِحْوِ"},
{"ind_1p", "نَحْوِي"},
{"ind_1s", "أَحْوِي"},
{"ind_2d", "تَحْوِيَانِ"},
{"ind_2fp", "تَحْوِينَ"},
{"ind_2fs", "تَحْوِينَ"},
{"ind_2mp", "تَحْوُونَ"},
{"ind_2ms", "تَحْوِي"},
{"ind_3fd", "تَحْوِيَانِ"},
{"ind_3fp", "يَحْوِينَ"},
{"ind_3fs", "تَحْوِي"},
{"ind_3md", "يَحْوِيَانِ"},
{"ind_3mp", "يَحْوُونَ"},
{"ind_3ms", "يَحْوِي"},
{"past_1p", "حَوَيْنَا"},
{"past_1s", "حَوَيْتُ"},
{"past_2d", "حَوَيْتُمَا"},
{"past_2fp", "حَوَيْتُنَّ"},
{"past_2fs", "حَوَيْتِ"},
{"past_2mp", "حَوَيْتُمْ"},
{"past_2ms", "حَوَيْتَ"},
{"past_3fd", "حَوَتَا"},
{"past_3fp", "حَوَيْنَ"},
{"past_3fs", "حَوَتْ"},
{"past_3md", "حَوَيَا"},
{"past_3mp", "حَوَوْا"},
{"past_3ms", "حَوَى"},
},
},
}
0o99065hgt2jqhgcvexvucxmlvqyay1
وحدة:ar-verb/testcases/10
828
242333
1159029
1158897
2026-09-10T12:39:43Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159029
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 10 من 15. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/10")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_10()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
26qloj91u580zdp2osrqjvd1boykhij
1159087
1159029
2026-09-10T19:34:16Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159087
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 10 من 16. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/10")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_10()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
bcasgubiunsyfp0x9z3uumij92hyb0v
نقاش الوحدة:ar-verb/testcases/10
829
242334
1159030
1158898
2026-09-10T12:39:44Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159030
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/10|الجزء 10 من 15]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، [[نقاش الوحدة:ar-verb/testcases/1|1]]، [[نقاش الوحدة:ar-verb/testcases/2|2]]، [[نقاش الوحدة:ar-verb/testcases/3|3]]، [[نقاش الوحدة:ar-verb/testcases/4|4]]، [[نقاش الوحدة:ar-verb/testcases/5|5]]، [[نقاش الوحدة:ar-verb/testcases/6|6]]، [[نقاش الوحدة:ar-verb/testcases/7|7]]، [[نقاش الوحدة:ar-verb/testcases/8|8]]، [[نقاش الوحدة:ar-verb/testcases/9|9]]، 10، [[نقاش الوحدة:ar-verb/testcases/11|11]]، [[نقاش الوحدة:ar-verb/testcases/12|12]]، [[نقاش الوحدة:ar-verb/testcases/13|13]]، [[نقاش الوحدة:ar-verb/testcases/14|14]]، [[نقاش الوحدة:ar-verb/testcases/15|15]] — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/10|run_tests}}
kngdi2rvhjm26ltpkjix0bmf01psq3b
1159088
1159030
2026-09-10T19:34:17Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159088
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/10|الجزء 10 من 16]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، [[نقاش الوحدة:ar-verb/testcases/1|1]]، [[نقاش الوحدة:ar-verb/testcases/2|2]]، [[نقاش الوحدة:ar-verb/testcases/3|3]]، [[نقاش الوحدة:ar-verb/testcases/4|4]]، [[نقاش الوحدة:ar-verb/testcases/5|5]]، [[نقاش الوحدة:ar-verb/testcases/6|6]]، [[نقاش الوحدة:ar-verb/testcases/7|7]]، [[نقاش الوحدة:ar-verb/testcases/8|8]]، [[نقاش الوحدة:ar-verb/testcases/9|9]]، 10، [[نقاش الوحدة:ar-verb/testcases/11|11]]، [[نقاش الوحدة:ar-verb/testcases/12|12]]، [[نقاش الوحدة:ar-verb/testcases/13|13]]، [[نقاش الوحدة:ar-verb/testcases/14|14]]، [[نقاش الوحدة:ar-verb/testcases/15|15]]، [[نقاش الوحدة:ar-verb/testcases/16|16]] — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/10|run_tests}}
g3pvvnl8b3vqy9f6in4qovgjsquo1ci
وحدة:ar-verb/testcases/بيانات/11
828
242575
1159031
1158917
2026-09-10T12:39:46Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159031
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 11 من 15.
return {
{
label = "زَأَرَ (p194)", root = "زأر", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "اِزْأَرَا"},
{"imp_2fp", "اِزْأَرْنَ"},
{"imp_2fs", "اِزْأَرِي"},
{"imp_2mp", "اِزْأَرُوا"},
{"imp_2ms", "اِزْأَرْ"},
{"ind_1p", "نَزْأَرُ"},
{"ind_1s", "أَزْأَرُ"},
{"ind_2d", "تَزْأَرَانِ"},
{"ind_2fp", "تَزْأَرْنَ"},
{"ind_2fs", "تَزْأَرِينَ"},
{"ind_2mp", "تَزْأَرُونَ"},
{"ind_2ms", "تَزْأَرُ"},
{"ind_3fd", "تَزْأَرَانِ"},
{"ind_3fp", "يَزْأَرْنَ"},
{"ind_3fs", "تَزْأَرُ"},
{"ind_3md", "يَزْأَرَانِ"},
{"ind_3mp", "يَزْأَرُونَ"},
{"ind_3ms", "يَزْأَرُ"},
{"past_1p", "زَأَرْنَا"},
{"past_1s", "زَأَرْتُ"},
{"past_2d", "زَأَرْتُمَا"},
{"past_2fp", "زَأَرْتُنَّ"},
{"past_2fs", "زَأَرْتِ"},
{"past_2mp", "زَأَرْتُمْ"},
{"past_2ms", "زَأَرْتَ"},
{"past_3fd", "زَأَرَتَا"},
{"past_3fp", "زَأَرْنَ"},
{"past_3fs", "زَأَرَتْ"},
{"past_3md", "زَأَرَا"},
{"past_3mp", "زَأَرُوا"},
{"past_3ms", "زَأَرَ"},
},
},
{
label = "وَزَعَ (p199)", root = "وزع", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "زَعَا"},
{"imp_2fp", "زَعْنَ"},
{"imp_2fs", "زَعِي"},
{"imp_2mp", "زَعُوا"},
{"imp_2ms", "زَعْ"},
{"ind_1p", "نَزَعُ"},
{"ind_1s", "أَزَعُ"},
{"ind_2d", "تَزَعَانِ"},
{"ind_2fp", "تَزَعْنَ"},
{"ind_2fs", "تَزَعِينَ"},
{"ind_2mp", "تَزَعُونَ"},
{"ind_2ms", "تَزَعُ"},
{"ind_3fd", "تَزَعَانِ"},
{"ind_3fp", "يَزَعْنَ"},
{"ind_3fs", "تَزَعُ"},
{"ind_3md", "يَزَعَانِ"},
{"ind_3mp", "يَزَعُونَ"},
{"ind_3ms", "يَزَعُ"},
{"past_1p", "وَزَعْنَا"},
{"past_1s", "وَزَعْتُ"},
{"past_2d", "وَزَعْتُمَا"},
{"past_2fp", "وَزَعْتُنَّ"},
{"past_2fs", "وَزَعْتِ"},
{"past_2mp", "وَزَعْتُمْ"},
{"past_2ms", "وَزَعْتَ"},
{"past_3fd", "وَزَعَتَا"},
{"past_3fp", "وَزَعْنَ"},
{"past_3fs", "وَزَعَتْ"},
{"past_3md", "وَزَعَا"},
{"past_3mp", "وَزَعُوا"},
{"past_3ms", "وَزَعَ"},
},
},
{
label = "داءَ (p201)", root = "دوء", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "دَاءَا"},
{"imp_2fp", "دَأْنَ"},
{"imp_2fs", "دَائِي"},
{"imp_2mp", "دَاؤُوا"},
{"imp_2ms", "دَأْ"},
{"ind_1p", "نَدَاءُ"},
{"ind_1s", "أَدَاءُ"},
{"ind_2d", "تَدَاآنِ"},
{"ind_2fp", "تَدَأْنَ"},
{"ind_2fs", "تَدَائِينَ"},
{"ind_2mp", "تَدَاؤُونَ"},
{"ind_2ms", "تَدَاءُ"},
{"ind_3fd", "تَدَاآنِ"},
{"ind_3fp", "يَدَأْنَ"},
{"ind_3fs", "تَدَاءُ"},
{"ind_3md", "يَدَاآنِ"},
{"ind_3mp", "يَدَاؤُونَ"},
{"ind_3ms", "يَدَاءُ"},
{"past_1p", "دِئْنَا"},
{"past_1s", "دِئْتُ"},
{"past_2d", "دِئْتُمَا"},
{"past_2fp", "دِئْتُنَّ"},
{"past_2fs", "دِئْتِ"},
{"past_2mp", "دِئْتُمْ"},
{"past_2ms", "دِئْتَ"},
{"past_3fd", "دَاءَتَا"},
{"past_3fp", "دِئْنَ"},
{"past_3fs", "دَاءَتْ"},
{"past_3md", "دَاءَا"},
{"past_3mp", "دَاؤُوا"},
{"past_3ms", "دَاءَ"},
},
},
{
label = "جادَ (p201)", root = "جود", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "جَادَا"},
{"imp_2fp", "جَدْنَ"},
{"imp_2fs", "جَادِي"},
{"imp_2mp", "جَادُوا"},
{"imp_2ms", "جَدْ"},
{"ind_1p", "نَجَادُ"},
{"ind_1s", "أَجَادُ"},
{"ind_2d", "تَجَادَانِ"},
{"ind_2fp", "تَجَدْنَ"},
{"ind_2fs", "تَجَادِينَ"},
{"ind_2mp", "تَجَادُونَ"},
{"ind_2ms", "تَجَادُ"},
{"ind_3fd", "تَجَادَانِ"},
{"ind_3fp", "يَجَدْنَ"},
{"ind_3fs", "تَجَادُ"},
{"ind_3md", "يَجَادَانِ"},
{"ind_3mp", "يَجَادُونَ"},
{"ind_3ms", "يَجَادُ"},
{"past_1p", "جِدْنَا"},
{"past_1s", "جِدْتُ"},
{"past_2d", "جِدْتُمَا"},
{"past_2fp", "جِدْتُنَّ"},
{"past_2fs", "جِدْتِ"},
{"past_2mp", "جِدْتُمْ"},
{"past_2ms", "جِدْتَ"},
{"past_3fd", "جَادَتَا"},
{"past_3fs", "جَادَتْ"},
{"past_3md", "جَادَا"},
{"past_3mp", "جَادُوا"},
{"past_3ms", "جَادَ"},
},
},
{
label = "حارَ (p202)", root = "حور", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "حَارَا"},
{"imp_2fp", "حَرْنَ"},
{"imp_2fs", "حَارِي"},
{"imp_2mp", "حَارُوا"},
{"imp_2ms", "حَرْ"},
{"ind_1p", "نَحَارُ"},
{"ind_1s", "أَحَارُ"},
{"ind_2d", "تَحَارَانِ"},
{"ind_2fp", "تَحَرْنَ"},
{"ind_2fs", "تَحَارِينَ"},
{"ind_2mp", "تَحَارُونَ"},
{"ind_2ms", "تَحَارُ"},
{"ind_3fd", "تَحَارَانِ"},
{"ind_3fp", "يَحَرْنَ"},
{"ind_3fs", "تَحَارُ"},
{"ind_3md", "يَحَارَانِ"},
{"ind_3mp", "يَحَارُونَ"},
{"ind_3ms", "يَحَارُ"},
{"past_1p", "حِرْنَا"},
{"past_1s", "حِرْتُ"},
{"past_2d", "حِرْتُمَا"},
{"past_2fp", "حِرْتُنَّ"},
{"past_2fs", "حِرْتِ"},
{"past_2mp", "حِرْتُمْ"},
{"past_2ms", "حِرْتَ"},
{"past_3fd", "حَارَتَا"},
{"past_3fp", "حِرْنَ"},
{"past_3fs", "حَارَتْ"},
{"past_3md", "حَارَا"},
{"past_3mp", "حَارُوا"},
{"past_3ms", "حَارَ"},
},
},
{
label = "نَهَى (p204)", root = "نهي", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "اِنْهَيَا"},
{"imp_2fp", "اِنْهَيْنَ"},
{"imp_2fs", "اِنْهَيْ"},
{"imp_2mp", "اِنْهَوْا"},
{"imp_2ms", "اِنْهَ"},
{"ind_1p", "نَنْهَى"},
{"ind_1s", "أَنْهَى"},
{"ind_2d", "تَنْهَيَانِ"},
{"ind_2fp", "تَنْهَيْنَ"},
{"ind_2fs", "تَنْهَيْنَ"},
{"ind_2mp", "تَنْهَوْنَ"},
{"ind_2ms", "تَنْهَى"},
{"ind_3fd", "تَنْهَيَانِ"},
{"ind_3fp", "يَنْهَيْنَ"},
{"ind_3fs", "تَنْهَى"},
{"ind_3md", "يَنْهَيَانِ"},
{"ind_3mp", "يَنْهَوْنَ"},
{"ind_3ms", "يَنْهَى"},
{"past_1p", "نَهَيْنَا"},
{"past_1s", "نَهَيْتُ"},
{"past_2d", "نَهَيْتُمَا"},
{"past_2fp", "نَهَيْتُنَّ"},
{"past_2fs", "نَهَيْتِ"},
{"past_2mp", "نَهَيْتُمْ"},
{"past_2ms", "نَهَيْتَ"},
{"past_3fd", "نَهَتَا"},
{"past_3fp", "نَهَيْنَ"},
{"past_3fs", "نَهَتْ"},
{"past_3md", "نَهَيَا"},
{"past_3mp", "نَهَوْا"},
{"past_3ms", "نَهَى"},
},
},
{
label = "ذَلَى (p205)", root = "ذلي", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "اِذْلَيَا"},
{"imp_2fp", "اِذْلَيْنَ"},
{"imp_2fs", "اِذْلَيْ"},
{"imp_2mp", "اِذْلَوْا"},
{"imp_2ms", "اِذْلَ"},
{"ind_1p", "نَذْلَى"},
{"ind_1s", "أَذْلَى"},
{"ind_2d", "تَذْلَيَانِ"},
{"ind_2fp", "تَذْلَيْنَ"},
{"ind_2fs", "تَذْلَيْنَ"},
{"ind_2mp", "تَذْلَوْنَ"},
{"ind_2ms", "تَذْلَى"},
{"ind_3fd", "تَذْلَيَانِ"},
{"ind_3fp", "يَذْلَيْنَ"},
{"ind_3fs", "تَذْلَى"},
{"ind_3md", "يَذْلَيَانِ"},
{"ind_3mp", "يَذْلَوْنَ"},
{"ind_3ms", "يَذْلَى"},
{"past_1p", "ذَلَيْنَا"},
{"past_1s", "ذَلَيْتُ"},
{"past_2d", "ذَلَيْتُمَا"},
{"past_2fp", "ذَلَيْتُنَّ"},
{"past_2fs", "ذَلَيْتِ"},
{"past_2mp", "ذَلَيْتُمْ"},
{"past_2ms", "ذَلَيْتَ"},
{"past_3fd", "ذَلَتَا"},
{"past_3fp", "ذَلَيْنَ"},
{"past_3fs", "ذَلَتْ"},
{"past_3md", "ذَلَيَا"},
{"past_3mp", "ذَلَوْا"},
{"past_3ms", "ذَلَى"},
},
},
{
label = "حَلُوَ (p222)", root = "حلو", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُحْلُوَا"},
{"imp_2fp", "اُحْلُونَ"},
{"imp_2fs", "اُحْلُوِي"},
{"imp_2mp", "اُحْلُوا"},
{"imp_2ms", "اُحْلُ"},
{"ind_1p", "نَحْلُو"},
{"ind_1s", "أَحْلُو"},
{"ind_2d", "تَحْلُوَانِ"},
{"ind_2fp", "تَحْلُونَ"},
{"ind_2fs", "تَحْلُوِينَ"},
{"ind_2mp", "تَحْلُونَ"},
{"ind_2ms", "تَحْلُو"},
{"ind_3fd", "تَحْلُوَانِ"},
{"ind_3fp", "يَحْلُونَ"},
{"ind_3fs", "تَحْلُو"},
{"ind_3md", "يَحْلُوَانِ"},
{"ind_3mp", "يَحْلُونَ"},
{"ind_3ms", "يَحْلُو"},
{"past_1p", "حَلُونَا"},
{"past_1s", "حَلُوتُ"},
{"past_2d", "حَلُوتُمَا"},
{"past_2fp", "حَلُوتُنَّ"},
{"past_2fs", "حَلُوتِ"},
{"past_2mp", "حَلُوتُمْ"},
{"past_2ms", "حَلُوتَ"},
{"past_3fd", "حَلُوَتَا"},
{"past_3fp", "حَلُونَ"},
{"past_3fs", "حَلُوَتْ"},
{"past_3md", "حَلُوَا"},
{"past_3mp", "حَلُوا"},
{"past_3ms", "حَلُوَ"},
},
},
{
label = "سَرُوَ (p222)", root = "سرو", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُسْرُوَا"},
{"imp_2fp", "اُسْرُونَ"},
{"imp_2fs", "اُسْرُوِي"},
{"imp_2mp", "اُسْرُوا"},
{"imp_2ms", "اُسْرُ"},
{"ind_1p", "نَسْرُو"},
{"ind_1s", "أَسْرُو"},
{"ind_2d", "تَسْرُوَانِ"},
{"ind_2fp", "تَسْرُونَ"},
{"ind_2fs", "تَسْرُوِينَ"},
{"ind_2mp", "تَسْرُونَ"},
{"ind_2ms", "تَسْرُو"},
{"ind_3fd", "تَسْرُوَانِ"},
{"ind_3fs", "تَسْرُو"},
{"ind_3md", "يَسْرُوَانِ"},
{"ind_3mp", "يَسْرُونَ"},
{"ind_3ms", "يَسْرُو"},
{"past_1p", "سَرُونَا"},
{"past_1s", "سَرُوتُ"},
{"past_2d", "سَرُوتُمَا"},
{"past_2fp", "سَرُوتُنَّ"},
{"past_2fs", "سَرُوتِ"},
{"past_2mp", "سَرُوتُمْ"},
{"past_2ms", "سَرُوتَ"},
{"past_3fd", "سَرُوَتَا"},
{"past_3fp", "سَرُونَ"},
{"past_3fs", "سَرُوَتْ"},
{"past_3md", "سَرُوَا"},
{"past_3mp", "سَرُوا"},
{"past_3ms", "سَرُوَ"},
},
},
{
label = "صَئِبَ (p235)", root = "صئب", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِصْأَبَا"},
{"imp_2fp", "اِصْأَبْنَ"},
{"imp_2fs", "اِصْأَبِي"},
{"imp_2mp", "اِصْأَبُوا"},
{"imp_2ms", "اِصْأَبْ"},
{"ind_1p", "نَصْأَبُ"},
{"ind_1s", "أَصْأَبُ"},
{"ind_2d", "تَصْأَبَانِ"},
{"ind_2fp", "تَصْأَبْنَ"},
{"ind_2fs", "تَصْأَبِينَ"},
{"ind_2mp", "تَصْأَبُونَ"},
{"ind_2ms", "تَصْأَبُ"},
{"ind_3fd", "تَصْأَبَانِ"},
{"ind_3fp", "يَصْأَبْنَ"},
{"ind_3fs", "تَصْأَبُ"},
{"ind_3md", "يَصْأَبَانِ"},
{"ind_3mp", "يَصْأَبُونَ"},
{"ind_3ms", "يَصْأَبُ"},
{"past_1p", "صَئِبْنَا"},
{"past_1s", "صَئِبْتُ"},
{"past_2d", "صَئِبْتُمَا"},
{"past_2fp", "صَئِبْتُنَّ"},
{"past_2fs", "صَئِبْتِ"},
{"past_2mp", "صَئِبْتُمْ"},
{"past_2ms", "صَئِبْتَ"},
{"past_3fd", "صَئِبَتَا"},
{"past_3fp", "صَئِبْنَ"},
{"past_3fs", "صَئِبَتْ"},
{"past_3md", "صَئِبَا"},
{"past_3mp", "صَئِبُوا"},
{"past_3ms", "صَئِبَ"},
},
},
{
label = "وَجِعَ (p240)", root = "وجع", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِيجَعَا"},
{"imp_2fp", "اِيجَعْنَ"},
{"imp_2fs", "اِيجَعِي"},
{"imp_2mp", "اِيجَعُوا"},
{"imp_2ms", "اِيجَعْ"},
{"ind_1p", "نَوْجَعُ"},
{"ind_1s", "أَوْجَعُ"},
{"ind_2d", "تَوْجَعَانِ"},
{"ind_2fp", "تَوْجَعْنَ"},
{"ind_2fs", "تَوْجَعِينَ"},
{"ind_2mp", "تَوْجَعُونَ"},
{"ind_2ms", "تَوْجَعُ"},
{"ind_3fd", "تَوْجَعَانِ"},
{"ind_3fp", "يَوْجَعْنَ"},
{"ind_3fs", "تَوْجَعُ"},
{"ind_3md", "يَوْجَعَانِ"},
{"ind_3mp", "يَوْجَعُونَ"},
{"ind_3ms", "يَوْجَعُ"},
{"past_1p", "وَجِعْنَا"},
{"past_1s", "وَجِعْتُ"},
{"past_2d", "وَجِعْتُمَا"},
{"past_2fp", "وَجِعْتُنَّ"},
{"past_2fs", "وَجِعْتِ"},
{"past_2mp", "وَجِعْتُمْ"},
{"past_2ms", "وَجِعْتَ"},
{"past_3fd", "وَجِعَتَا"},
{"past_3fp", "وَجِعْنَ"},
{"past_3fs", "وَجِعَتْ"},
{"past_3md", "وَجِعَا"},
{"past_3mp", "وَجِعُوا"},
{"past_3ms", "وَجِعَ"},
},
},
{
label = "كادَ (p242)", root = "كود", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "كَادَا"},
{"imp_2fp", "كَدْنَ"},
{"imp_2fs", "كَادِي"},
{"imp_2mp", "كَادُوا"},
{"imp_2ms", "كَدْ"},
{"ind_1p", "نَكَادُ"},
{"ind_1s", "أَكَادُ"},
{"ind_2d", "تَكَادَانِ"},
{"ind_2fp", "تَكَدْنَ"},
{"ind_2fs", "تَكَادِينَ"},
{"ind_2mp", "تَكَادُونَ"},
{"ind_2ms", "تَكَادُ"},
{"ind_3fd", "تَكَادَانِ"},
{"ind_3fp", "يَكَدْنَ"},
{"ind_3fs", "تَكَادُ"},
{"ind_3md", "يَكَادَانِ"},
{"ind_3mp", "يَكَادُونَ"},
{"ind_3ms", "يَكَادُ"},
{"past_1p", "كِدْنَا"},
{"past_1s", "كِدْتُ"},
{"past_2d", "كِدْتُمَا"},
{"past_2fp", "كِدْتُنَّ"},
{"past_2fs", "كِدْتِ"},
{"past_2mp", "كِدْتُمْ"},
{"past_2ms", "كِدْتَ"},
{"past_3fd", "كَادَتَا"},
{"past_3fp", "كِدْنَ"},
{"past_3fs", "كَادَتْ"},
{"past_3md", "كَادَا"},
{"past_3mp", "كَادُوا"},
{"past_3ms", "كَادَ"},
},
},
{
label = "هاءَ (p242)", root = "هوء", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "هَاءَا"},
{"imp_2fp", "هَأْنَ"},
{"imp_2fs", "هَائِي"},
{"imp_2mp", "هَاؤُوا"},
{"imp_2ms", "هَأْ"},
{"ind_1p", "نَهَاءُ"},
{"ind_1s", "أَهَاءُ"},
{"ind_2d", "تَهَاآنِ"},
{"ind_2fp", "تَهَأْنَ"},
{"ind_2fs", "تَهَائِينَ"},
{"ind_2mp", "تَهَاؤُونَ"},
{"ind_2ms", "تَهَاءُ"},
{"ind_3fd", "تَهَاآنِ"},
{"ind_3fp", "يَهَأْنَ"},
{"ind_3fs", "تَهَاءُ"},
{"ind_3md", "يَهَاآنِ"},
{"ind_3mp", "يَهَاؤُونَ"},
{"ind_3ms", "يَهَاءُ"},
{"past_1p", "هِئْنَا"},
{"past_1s", "هِئْتُ"},
{"past_2d", "هِئْتُمَا"},
{"past_2fp", "هِئْتُنَّ"},
{"past_2fs", "هِئْتِ"},
{"past_2mp", "هِئْتُمْ"},
{"past_2ms", "هِئْتَ"},
{"past_3fd", "هَاءَتَا"},
{"past_3fp", "هِئْنَ"},
{"past_3fs", "هَاءَتْ"},
{"past_3md", "هَاءَا"},
{"past_3mp", "هَاؤُوا"},
{"past_3ms", "هَاءَ"},
},
},
{
label = "أَذِيَ (p245)", root = "أذي", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِئْذَيَا"},
{"imp_2fp", "اِئْذَيْنَ"},
{"imp_2fs", "اِئْذَيْ"},
{"imp_2mp", "اِئْذَوْا"},
{"imp_2ms", "اِئْذَ"},
{"ind_1p", "نَأْذَى"},
{"ind_1s", "آذَى"},
{"ind_2d", "تَأْذَيَانِ"},
{"ind_2fp", "تَأْذَيْنَ"},
{"ind_2fs", "تَأْذَيْنَ"},
{"ind_2mp", "تَأْذَوْنَ"},
{"ind_2ms", "تَأْذَى"},
{"ind_3fd", "تَأْذَيَانِ"},
{"ind_3fp", "يَأْذَيْنَ"},
{"ind_3fs", "تَأْذَى"},
{"ind_3md", "يَأْذَيَانِ"},
{"ind_3mp", "يَأْذَوْنَ"},
{"ind_3ms", "يَأْذَى"},
{"past_1p", "أَذِينَا"},
{"past_1s", "أَذِيتُ"},
{"past_2d", "أَذِيتُمَا"},
{"past_2fp", "أَذِيتُنَّ"},
{"past_2fs", "أَذِيتِ"},
{"past_2mp", "أَذِيتُمْ"},
{"past_2ms", "أَذِيتَ"},
{"past_3fd", "أَذِيَتَا"},
{"past_3fp", "أَذِينَ"},
{"past_3fs", "أَذِيَتْ"},
{"past_3md", "أَذِيَا"},
{"past_3mp", "أَذُوا"},
{"past_3ms", "أَذِيَ"},
},
},
{
label = "سَخِيَ (p245)", root = "سخي", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِسْخَيَا"},
{"imp_2fp", "اِسْخَيْنَ"},
{"imp_2fs", "اِسْخَيْ"},
{"imp_2mp", "اِسْخَوْا"},
{"imp_2ms", "اِسْخَ"},
{"ind_1p", "نَسْخَى"},
{"ind_1s", "أَسْخَى"},
{"ind_2d", "تَسْخَيَانِ"},
{"ind_2fp", "تَسْخَيْنَ"},
{"ind_2fs", "تَسْخَيْنَ"},
{"ind_2mp", "تَسْخَوْنَ"},
{"ind_2ms", "تَسْخَى"},
{"ind_3fd", "تَسْخَيَانِ"},
{"ind_3fs", "تَسْخَى"},
{"ind_3md", "يَسْخَيَانِ"},
{"ind_3mp", "يَسْخَوْنَ"},
{"ind_3ms", "يَسْخَى"},
{"past_1p", "سَخِينَا"},
{"past_1s", "سَخِيتُ"},
{"past_2d", "سَخِيتُمَا"},
{"past_2fp", "سَخِيتُنَّ"},
{"past_2fs", "سَخِيتِ"},
{"past_2mp", "سَخِيتُمْ"},
{"past_2ms", "سَخِيتَ"},
{"past_3fd", "سَخِيَتَا"},
{"past_3fp", "سَخِينَ"},
{"past_3fs", "سَخِيَتْ"},
{"past_3md", "سَخِيَا"},
{"past_3mp", "سَخُوا"},
{"past_3ms", "سَخِيَ"},
},
},
{
label = "أَسِيَ (p246)", root = "أسي", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِئْسَيَا"},
{"imp_2fp", "اِئْسَيْنَ"},
{"imp_2fs", "اِئْسَيْ"},
{"imp_2mp", "اِئْسَوْا"},
{"imp_2ms", "اِئْسَ"},
{"ind_1p", "نَأْسَى"},
{"ind_1s", "آسَى"},
{"ind_2d", "تَأْسَيَانِ"},
{"ind_2fp", "تَأْسَيْنَ"},
{"ind_2fs", "تَأْسَيْنَ"},
{"ind_2mp", "تَأْسَوْنَ"},
{"ind_2ms", "تَأْسَى"},
{"ind_3fd", "تَأْسَيَانِ"},
{"ind_3fp", "يَأْسَيْنَ"},
{"ind_3fs", "تَأْسَى"},
{"ind_3md", "يَأْسَيَانِ"},
{"ind_3mp", "يَأْسَوْنَ"},
{"ind_3ms", "يَأْسَى"},
{"past_1p", "أَسِينَا"},
{"past_1s", "أَسِيتُ"},
{"past_2d", "أَسِيتُمَا"},
{"past_2fp", "أَسِيتُنَّ"},
{"past_2fs", "أَسِيتِ"},
{"past_2mp", "أَسِيتُمْ"},
{"past_2ms", "أَسِيتَ"},
{"past_3fd", "أَسِيَتَا"},
{"past_3fp", "أَسِينَ"},
{"past_3fs", "أَسِيَتْ"},
{"past_3md", "أَسِيَا"},
{"past_3mp", "أَسُوا"},
{"past_3ms", "أَسِيَ"},
},
},
{
label = "عَرِيَ (p246)", root = "عري", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِعْرَيَا"},
{"imp_2fp", "اِعْرَيْنَ"},
{"imp_2fs", "اِعْرَيْ"},
{"imp_2mp", "اِعْرَوْا"},
{"imp_2ms", "اِعْرَ"},
{"ind_1p", "نَعْرَى"},
{"ind_1s", "أَعْرَى"},
{"ind_2d", "تَعْرَيَانِ"},
{"ind_2fp", "تَعْرَيْنَ"},
{"ind_2fs", "تَعْرَيْنَ"},
{"ind_2mp", "تَعْرَوْنَ"},
{"ind_2ms", "تَعْرَى"},
{"ind_3fd", "تَعْرَيَانِ"},
{"ind_3fs", "تَعْرَى"},
{"ind_3md", "يَعْرَيَانِ"},
{"ind_3mp", "يَعْرَوْنَ"},
{"ind_3ms", "يَعْرَى"},
{"past_1p", "عَرِينَا"},
{"past_1s", "عَرِيتُ"},
{"past_2d", "عَرِيتُمَا"},
{"past_2fp", "عَرِيتُنَّ"},
{"past_2fs", "عَرِيتِ"},
{"past_2mp", "عَرِيتُمْ"},
{"past_2ms", "عَرِيتَ"},
{"past_3fd", "عَرِيَتَا"},
{"past_3fp", "عَرِينَ"},
{"past_3fs", "عَرِيَتْ"},
{"past_3md", "عَرِيَا"},
{"past_3mp", "عَرُوا"},
{"past_3ms", "عَرِيَ"},
},
},
{
label = "نَفَّذَ (p260)", root = "نفذ", wazn = "فعّل",
forms = {
{"imp_2d", "نَفِّذَا"},
{"imp_2fp", "نَفِّذْنَ"},
{"imp_2fs", "نَفِّذِي"},
{"imp_2mp", "نَفِّذُوا"},
{"imp_2ms", "نَفِّذْ"},
{"ind_1p", "نُنَفِّذُ"},
{"ind_1s", "أُنَفِّذُ"},
{"ind_2d", "تُنَفِّذَانِ"},
{"ind_2fp", "تُنَفِّذْنَ"},
{"ind_2fs", "تُنَفِّذِينَ"},
{"ind_2mp", "تُنَفِّذُونَ"},
{"ind_2ms", "تُنَفِّذُ"},
{"ind_3fd", "تُنَفِّذَانِ"},
{"ind_3fp", "يُنَفِّذْنَ"},
{"ind_3fs", "تُنَفِّذُ"},
{"ind_3md", "يُنَفِّذَانِ"},
{"ind_3mp", "يُنَفِّذُونَ"},
{"ind_3ms", "يُنَفِّذُ"},
{"past_1p", "نَفَّذْنَا"},
{"past_1s", "نَفَّذْتُ"},
{"past_2d", "نَفَّذْتُمَا"},
{"past_2fp", "نَفَّذْتُنَّ"},
{"past_2fs", "نَفَّذْتِ"},
{"past_2mp", "نَفَّذْتُمْ"},
{"past_2ms", "نَفَّذْتَ"},
{"past_3fd", "نَفَّذَتَا"},
{"past_3fp", "نَفَّذْنَ"},
{"past_3fs", "نَفَّذَتْ"},
{"past_3md", "نَفَّذَا"},
{"past_3mp", "نَفَّذُوا"},
{"past_3ms", "نَفَّذَ"},
},
},
{
label = "فَيَّأَ (p269)", root = "فيأ", wazn = "فعّل",
forms = {
{"imp_2d", "فَيِّئَا"},
{"imp_2fp", "فَيِّئْنَ"},
{"imp_2fs", "فَيِّئِي"},
{"imp_2mp", "فَيِّئُوا"},
{"imp_2ms", "فَيِّئْ"},
{"ind_1p", "نُفَيِّئُ"},
{"ind_1s", "أُفَيِّئُ"},
{"ind_2d", "تُفَيِّئَانِ"},
{"ind_2fp", "تُفَيِّئْنَ"},
{"ind_2fs", "تُفَيِّئِينَ"},
{"ind_2mp", "تُفَيِّئُونَ"},
{"ind_2ms", "تُفَيِّئُ"},
{"ind_3fd", "تُفَيِّئَانِ"},
{"ind_3fs", "تُفَيِّئُ"},
{"ind_3md", "يُفَيِّئَانِ"},
{"ind_3mp", "يُفَيِّئُونَ"},
{"ind_3ms", "يُفَيِّئُ"},
{"past_1p", "فَيَّأْنَا"},
{"past_1s", "فَيَّأْتُ"},
{"past_2d", "فَيَّأْتُمَا"},
{"past_2fp", "فَيَّأْتُنَّ"},
{"past_2fs", "فَيَّأْتِ"},
{"past_2mp", "فَيَّأْتُمْ"},
{"past_2ms", "فَيَّأْتَ"},
{"past_3fd", "فَيَّأَتَا"},
{"past_3fp", "فَيَّأْنَ"},
{"past_3fs", "فَيَّأَتْ"},
{"past_3md", "فَيَّآ"},
{"past_3mp", "فَيَّؤُوا"},
{"past_3ms", "فَيَّأَ"},
},
},
{
label = "أَدَّى (p271)", root = "أدي", wazn = "فعّل",
forms = {
{"imp_2d", "أَدِّيَا"},
{"imp_2fp", "أَدِّينَ"},
{"imp_2fs", "أَدِّي"},
{"imp_2mp", "أَدُّوا"},
{"imp_2ms", "أَدِّ"},
{"ind_1p", "نُؤَدِّي"},
{"ind_1s", "أُؤَدِّي"},
{"ind_2d", "تُؤَدِّيَانِ"},
{"ind_2fp", "تُؤَدِّينَ"},
{"ind_2fs", "تُؤَدِّينَ"},
{"ind_2mp", "تُؤَدُّونَ"},
{"ind_2ms", "تُؤَدِّي"},
{"ind_3fd", "تُؤَدِّيَانِ"},
{"ind_3fp", "يُؤَدِّينَ"},
{"ind_3fs", "تُؤَدِّي"},
{"ind_3md", "يُؤَدِّيَانِ"},
{"ind_3mp", "يُؤَدُّونَ"},
{"ind_3ms", "يُؤَدِّي"},
{"past_1p", "أَدَّيْنَا"},
{"past_1s", "أَدَّيْتُ"},
{"past_2d", "أَدَّيْتُمَا"},
{"past_2fp", "أَدَّيْتُنَّ"},
{"past_2fs", "أَدَّيْتِ"},
{"past_2mp", "أَدَّيْتُمْ"},
{"past_2ms", "أَدَّيْتَ"},
{"past_3fd", "أَدَّتَا"},
{"past_3fp", "أَدَّيْنَ"},
{"past_3fs", "أَدَّتْ"},
{"past_3md", "أَدَّيَا"},
{"past_3mp", "أَدَّوْا"},
{"past_3ms", "أَدَّى"},
},
},
{
label = "رَأَّى (p271)", root = "رأو", wazn = "فعّل",
forms = {
{"imp_2d", "رَئِّيَا"},
{"imp_2fp", "رَئِّينَ"},
{"imp_2fs", "رَئِّي"},
{"imp_2mp", "رَؤُّوا"},
{"imp_2ms", "رَأِّ"},
{"ind_1p", "نُرَئِّي"},
{"ind_1s", "أُرَئِّي"},
{"ind_2d", "تُرَئِّيَانِ"},
{"ind_2fp", "تُرَئِّينَ"},
{"ind_2fs", "تُرَئِّينَ"},
{"ind_2mp", "تُرَؤُّونَ"},
{"ind_2ms", "تُرَئِّي"},
{"ind_3fd", "تُرَئِّيَانِ"},
{"ind_3fp", "يُرَئِّينَ"},
{"ind_3fs", "تُرَئِّي"},
{"ind_3md", "يُرَئِّيَانِ"},
{"ind_3mp", "يُرَؤُّونَ"},
{"ind_3ms", "يُرَئِّي"},
{"past_1p", "رَأَّيْنَا"},
{"past_1s", "رَأَّيْتُ"},
{"past_2d", "رَأَّيْتُمَا"},
{"past_2fp", "رَأَّيْتُنَّ"},
{"past_2fs", "رَأَّيْتِ"},
{"past_2mp", "رَأَّيْتُمْ"},
{"past_2ms", "رَأَّيْتَ"},
{"past_3fd", "رَأَّتَا"},
{"past_3fp", "رَأَّيْنَ"},
{"past_3fs", "رَأَّتْ"},
{"past_3md", "رَأَّيَا"},
{"past_3mp", "رَأَّوْا"},
{"past_3ms", "رَأَّى"},
},
},
{
label = "جايَأَ (p283)", root = "جيأ", wazn = "فاعل",
forms = {
{"imp_2d", "جَايِئَا"},
{"imp_2fp", "جَايِئْنَ"},
{"imp_2fs", "جَايِئِي"},
{"imp_2mp", "جَايِئُوا"},
{"imp_2ms", "جَايِئْ"},
{"ind_1p", "نُجَايِئُ"},
{"ind_1s", "أُجَايِئُ"},
{"ind_2d", "تُجَايِئَانِ"},
{"ind_2fp", "تُجَايِئْنَ"},
{"ind_2fs", "تُجَايِئِينَ"},
{"ind_2mp", "تُجَايِئُونَ"},
{"ind_2ms", "تُجَايِئُ"},
{"ind_3fd", "تُجَايِئَانِ"},
{"ind_3fp", "يُجَايِئْنَ"},
{"ind_3fs", "تُجَايِئُ"},
{"ind_3md", "يُجَايِئَانِ"},
{"ind_3mp", "يُجَايِئُونَ"},
{"ind_3ms", "يُجَايِئُ"},
{"past_1p", "جَايَأْنَا"},
{"past_1s", "جَايَأْتُ"},
{"past_2d", "جَايَأْتُمَا"},
{"past_2fp", "جَايَأْتُنَّ"},
{"past_2fs", "جَايَأْتِ"},
{"past_2mp", "جَايَأْتُمْ"},
{"past_2ms", "جَايَأْتَ"},
{"past_3fd", "جَايَأَتَا"},
{"past_3fp", "جَايَأْنَ"},
{"past_3fs", "جَايَأَتْ"},
{"past_3md", "جَايَآ"},
{"past_3mp", "جَايَؤُوا"},
{"past_3ms", "جَايَأَ"},
},
},
{
label = "وارَى (p286)", root = "وري", wazn = "فاعل",
forms = {
{"imp_2d", "وَارِيَا"},
{"imp_2fp", "وَارِينَ"},
{"imp_2fs", "وَارِي"},
{"imp_2mp", "وَارُوا"},
{"imp_2ms", "وَارِ"},
{"ind_1p", "نُوَارِي"},
{"ind_1s", "أُوَارِي"},
{"ind_2d", "تُوَارِيَانِ"},
{"ind_2fp", "تُوَارِينَ"},
{"ind_2fs", "تُوَارِينَ"},
{"ind_2mp", "تُوَارُونَ"},
{"ind_2ms", "تُوَارِي"},
{"ind_3fd", "تُوَارِيَانِ"},
{"ind_3fp", "يُوَارِينَ"},
{"ind_3fs", "تُوَارِي"},
{"ind_3md", "يُوَارِيَانِ"},
{"ind_3mp", "يُوَارُونَ"},
{"ind_3ms", "يُوَارِي"},
{"past_1p", "وَارَيْنَا"},
{"past_1s", "وَارَيْتُ"},
{"past_2d", "وَارَيْتُمَا"},
{"past_2fp", "وَارَيْتُنَّ"},
{"past_2fs", "وَارَيْتِ"},
{"past_2mp", "وَارَيْتُمْ"},
{"past_2ms", "وَارَيْتَ"},
{"past_3fd", "وَارَتَا"},
{"past_3fp", "وَارَيْنَ"},
{"past_3fs", "وَارَتْ"},
{"past_3md", "وَارَيَا"},
{"past_3mp", "وَارَوْا"},
{"past_3ms", "وَارَى"},
},
},
{
label = "قاوَى (p288)", root = "قوي", wazn = "فاعل",
forms = {
{"imp_2d", "قَاوِيَا"},
{"imp_2fp", "قَاوِينَ"},
{"imp_2fs", "قَاوِي"},
{"imp_2mp", "قَاوُوا"},
{"imp_2ms", "قَاوِ"},
{"ind_1p", "نُقَاوِي"},
{"ind_1s", "أُقَاوِي"},
{"ind_2d", "تُقَاوِيَانِ"},
{"ind_2fp", "تُقَاوِينَ"},
{"ind_2fs", "تُقَاوِينَ"},
{"ind_2mp", "تُقَاوُونَ"},
{"ind_2ms", "تُقَاوِي"},
{"ind_3fd", "تُقَاوِيَانِ"},
{"ind_3fp", "يُقَاوِينَ"},
{"ind_3fs", "تُقَاوِي"},
{"ind_3md", "يُقَاوِيَانِ"},
{"ind_3mp", "يُقَاوُونَ"},
{"ind_3ms", "يُقَاوِي"},
{"past_1p", "قَاوَيْنَا"},
{"past_1s", "قَاوَيْتُ"},
{"past_2d", "قَاوَيْتُمَا"},
{"past_2fp", "قَاوَيْتُنَّ"},
{"past_2fs", "قَاوَيْتِ"},
{"past_2mp", "قَاوَيْتُمْ"},
{"past_2ms", "قَاوَيْتَ"},
{"past_3fd", "قَاوَتَا"},
{"past_3fp", "قَاوَيْنَ"},
{"past_3fs", "قَاوَتْ"},
{"past_3md", "قَاوَيَا"},
{"past_3mp", "قَاوَوْا"},
{"past_3ms", "قَاوَى"},
},
},
{
label = "أَبْأَسَ (p293)", root = "بأس", wazn = "أفعل",
forms = {
{"imp_2d", "أَبْئِسَا"},
{"imp_2fp", "أَبْئِسْنَ"},
{"imp_2fs", "أَبْئِسِي"},
{"imp_2mp", "أَبْئِسُوا"},
{"imp_2ms", "أَبْئِسْ"},
{"ind_1p", "نُبْئِسُ"},
{"ind_1s", "أُبْئِسُ"},
{"ind_2d", "تُبْئِسَانِ"},
{"ind_2fp", "تُبْئِسْنَ"},
{"ind_2fs", "تُبْئِسِينَ"},
{"ind_2mp", "تُبْئِسُونَ"},
{"ind_2ms", "تُبْئِسُ"},
{"ind_3fd", "تُبْئِسَانِ"},
{"ind_3fp", "يُبْئِسْنَ"},
{"ind_3fs", "تُبْئِسُ"},
{"ind_3md", "يُبْئِسَانِ"},
{"ind_3mp", "يُبْئِسُونَ"},
{"ind_3ms", "يُبْئِسُ"},
{"past_1p", "أَبْأَسْنَا"},
{"past_1s", "أَبْأَسْتُ"},
{"past_2d", "أَبْأَسْتُمَا"},
{"past_2fp", "أَبْأَسْتُنَّ"},
{"past_2fs", "أَبْأَسْتِ"},
{"past_2mp", "أَبْأَسْتُمْ"},
{"past_2ms", "أَبْأَسْتَ"},
{"past_3fd", "أَبْأَسَتَا"},
{"past_3fp", "أَبْأَسْنَ"},
{"past_3fs", "أَبْأَسَتْ"},
{"past_3md", "أَبْأَسَا"},
{"past_3mp", "أَبْأَسُوا"},
{"past_3ms", "أَبْأَسَ"},
},
},
{
label = "أَثارَ (p296)", root = "ثور", wazn = "أفعل",
forms = {
{"imp_2d", "أَثِيرَا"},
{"imp_2fp", "أَثِرْنَ"},
{"imp_2fs", "أَثِيرِي"},
{"imp_2mp", "أَثِيرُوا"},
{"imp_2ms", "أَثِرْ"},
{"ind_1p", "نُثِيرُ"},
{"ind_1s", "أُثِيرُ"},
{"ind_2d", "تُثِيرَانِ"},
{"ind_2fp", "تُثِرْنَ"},
{"ind_2fs", "تُثِيرِينَ"},
{"ind_2mp", "تُثِيرُونَ"},
{"ind_2ms", "تُثِيرُ"},
{"ind_3fd", "تُثِيرَانِ"},
{"ind_3fp", "يُثِرْنَ"},
{"ind_3fs", "تُثِيرُ"},
{"ind_3md", "يُثِيرَانِ"},
{"ind_3mp", "يُثِيرُونَ"},
{"ind_3ms", "يُثِيرُ"},
{"past_1p", "أَثَرْنَا"},
{"past_1s", "أَثَرْتُ"},
{"past_2d", "أَثَرْتُمَا"},
{"past_2fp", "أَثَرْتُنَّ"},
{"past_2fs", "أَثَرْتِ"},
{"past_2mp", "أَثَرْتُمْ"},
{"past_2ms", "أَثَرْتَ"},
{"past_3fd", "أَثَارَتَا"},
{"past_3fp", "أَثَرْنَ"},
{"past_3fs", "أَثَارَتْ"},
{"past_3md", "أَثَارَا"},
{"past_3mp", "أَثَارُوا"},
{"past_3ms", "أَثَارَ"},
},
},
{
label = "أَرادَ (p296)", root = "رود", wazn = "أفعل",
forms = {
{"imp_2d", "أَرِيدَا"},
{"imp_2fp", "أَرِدْنَ"},
{"imp_2fs", "أَرِيدِي"},
{"imp_2mp", "أَرِيدُوا"},
{"imp_2ms", "أَرِدْ"},
{"ind_1p", "نُرِيدُ"},
{"ind_1s", "أُرِيدُ"},
{"ind_2d", "تُرِيدَانِ"},
{"ind_2fp", "تُرِدْنَ"},
{"ind_2fs", "تُرِيدِينَ"},
{"ind_2mp", "تُرِيدُونَ"},
{"ind_2ms", "تُرِيدُ"},
{"ind_3fd", "تُرِيدَانِ"},
{"ind_3fp", "يُرِدْنَ"},
{"ind_3fs", "تُرِيدُ"},
{"ind_3md", "يُرِيدَانِ"},
{"ind_3mp", "يُرِيدُونَ"},
{"ind_3ms", "يُرِيدُ"},
{"past_1p", "أَرَدْنَا"},
{"past_1s", "أَرَدْتُ"},
{"past_2d", "أَرَدْتُمَا"},
{"past_2fp", "أَرَدْتُنَّ"},
{"past_2fs", "أَرَدْتِ"},
{"past_2mp", "أَرَدْتُمْ"},
{"past_2ms", "أَرَدْتَ"},
{"past_3fd", "أَرَادَتَا"},
{"past_3fp", "أَرَدْنَ"},
{"past_3fs", "أَرَادَتْ"},
{"past_3md", "أَرَادَا"},
{"past_3mp", "أَرَادُوا"},
{"past_3ms", "أَرَادَ"},
},
},
{
label = "أَخْيَلَ (p297)", root = "خيل", wazn = "أفعل",
forms = {
{"imp_2d", "أَخْيِلَا"},
{"imp_2fp", "أَخْيِلْنَ"},
{"imp_2fs", "أَخْيِلِي"},
{"imp_2mp", "أَخْيِلُوا"},
{"imp_2ms", "أَخْيِلْ"},
{"ind_1p", "نُخْيِلُ"},
{"ind_1s", "أُخْيِلُ"},
{"ind_2d", "تُخْيِلَانِ"},
{"ind_2fp", "تُخْيِلْنَ"},
{"ind_2fs", "تُخْيِلِينَ"},
{"ind_2mp", "تُخْيِلُونَ"},
{"ind_2ms", "تُخْيِلُ"},
{"ind_3fd", "تُخْيِلَانِ"},
{"ind_3fp", "يُخْيِلْنَ"},
{"ind_3fs", "تُخْيِلُ"},
{"ind_3md", "يُخْيِلَانِ"},
{"ind_3mp", "يُخْيِلُونَ"},
{"ind_3ms", "يُخْيِلُ"},
{"past_1p", "أَخْيَلْنَا"},
{"past_1s", "أَخْيَلْتُ"},
{"past_2d", "أَخْيَلْتُمَا"},
{"past_2fp", "أَخْيَلْتُنَّ"},
{"past_2fs", "أَخْيَلْتِ"},
{"past_2mp", "أَخْيَلْتُمْ"},
{"past_2ms", "أَخْيَلْتَ"},
{"past_3fd", "أَخْيَلَتَا"},
{"past_3fp", "أَخْيَلْنَ"},
{"past_3fs", "أَخْيَلَتْ"},
{"past_3md", "أَخْيَلَا"},
{"past_3mp", "أَخْيَلُوا"},
{"past_3ms", "أَخْيَلَ"},
},
},
{
label = "أَسَاءَ (p298)", root = "سوء", wazn = "أفعل",
forms = {
{"imp_2d", "أَسِيئَا"},
{"imp_2fp", "أَسِئْنَ"},
{"imp_2fs", "أَسِيئِي"},
{"imp_2mp", "أَسِيؤُوا"},
{"imp_2ms", "أَسِئْ"},
{"ind_1p", "نُسِيءُ"},
{"ind_1s", "أُسِيءُ"},
{"ind_2d", "تُسِيئَانِ"},
{"ind_2fp", "تُسِئْنَ"},
{"ind_2fs", "تُسِيئِينَ"},
{"ind_2mp", "تُسِيؤُونَ"},
{"ind_2ms", "تُسِيءُ"},
{"ind_3fd", "تُسِيئَانِ"},
{"ind_3fp", "يُسِئْنَ"},
{"ind_3fs", "تُسِيءُ"},
{"ind_3md", "يُسِيئَانِ"},
{"ind_3mp", "يُسِيؤُونَ"},
{"ind_3ms", "يُسِيءُ"},
{"past_1p", "أَسَأْنَا"},
{"past_1s", "أَسَأْتُ"},
{"past_2d", "أَسَأْتُمَا"},
{"past_2fp", "أَسَأْتُنَّ"},
{"past_2fs", "أَسَأْتِ"},
{"past_2mp", "أَسَأْتُمْ"},
{"past_2ms", "أَسَأْتَ"},
{"past_3fd", "أَسَاءَتَا"},
{"past_3fp", "أَسَأْنَ"},
{"past_3fs", "أَسَاءَتْ"},
{"past_3md", "أَسَاءَا"},
{"past_3mp", "أَسَاؤُوا"},
{"past_3ms", "أَسَاءَ"},
},
},
{
label = "أَبْدَى (p299)", root = "بدو", wazn = "أفعل",
forms = {
{"imp_2d", "أَبْدِيَا"},
{"imp_2fp", "أَبْدِينَ"},
{"imp_2fs", "أَبْدِي"},
{"imp_2mp", "أَبْدُوا"},
{"imp_2ms", "أَبْدِ"},
{"ind_1p", "نُبْدِي"},
{"ind_1s", "أُبْدِي"},
{"ind_2d", "تُبْدِيَانِ"},
{"ind_2fp", "تُبْدِينَ"},
{"ind_2fs", "تُبْدِينَ"},
{"ind_2mp", "تُبْدُونَ"},
{"ind_2ms", "تُبْدِي"},
{"ind_3fd", "تُبْدِيَانِ"},
{"ind_3fp", "يُبْدِينَ"},
{"ind_3fs", "تُبْدِي"},
{"ind_3md", "يُبْدِيَانِ"},
{"ind_3mp", "يُبْدُونَ"},
{"ind_3ms", "يُبْدِي"},
{"past_1p", "أَبْدَيْنَا"},
{"past_1s", "أَبْدَيْتُ"},
{"past_2d", "أَبْدَيْتُمَا"},
{"past_2fp", "أَبْدَيْتُنَّ"},
{"past_2fs", "أَبْدَيْتِ"},
{"past_2mp", "أَبْدَيْتُمْ"},
{"past_2ms", "أَبْدَيْتَ"},
{"past_3fd", "أَبْدَتَا"},
{"past_3fp", "أَبْدَيْنَ"},
{"past_3fs", "أَبْدَتْ"},
{"past_3md", "أَبْدَيَا"},
{"past_3mp", "أَبْدَوْا"},
{"past_3ms", "أَبْدَى"},
},
},
}
6d3m4u9a1iav5zdkgibh684431zjoad
1159089
1159031
2026-09-10T19:34:19Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159089
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 11 من 16.
return {
{
label = "زَأَرَ (p194)", root = "زأر", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "اِزْأَرَا"},
{"imp_2fp", "اِزْأَرْنَ"},
{"imp_2fs", "اِزْأَرِي"},
{"imp_2mp", "اِزْأَرُوا"},
{"imp_2ms", "اِزْأَرْ"},
{"ind_1p", "نَزْأَرُ"},
{"ind_1s", "أَزْأَرُ"},
{"ind_2d", "تَزْأَرَانِ"},
{"ind_2fp", "تَزْأَرْنَ"},
{"ind_2fs", "تَزْأَرِينَ"},
{"ind_2mp", "تَزْأَرُونَ"},
{"ind_2ms", "تَزْأَرُ"},
{"ind_3fd", "تَزْأَرَانِ"},
{"ind_3fp", "يَزْأَرْنَ"},
{"ind_3fs", "تَزْأَرُ"},
{"ind_3md", "يَزْأَرَانِ"},
{"ind_3mp", "يَزْأَرُونَ"},
{"ind_3ms", "يَزْأَرُ"},
{"past_1p", "زَأَرْنَا"},
{"past_1s", "زَأَرْتُ"},
{"past_2d", "زَأَرْتُمَا"},
{"past_2fp", "زَأَرْتُنَّ"},
{"past_2fs", "زَأَرْتِ"},
{"past_2mp", "زَأَرْتُمْ"},
{"past_2ms", "زَأَرْتَ"},
{"past_3fd", "زَأَرَتَا"},
{"past_3fp", "زَأَرْنَ"},
{"past_3fs", "زَأَرَتْ"},
{"past_3md", "زَأَرَا"},
{"past_3mp", "زَأَرُوا"},
{"past_3ms", "زَأَرَ"},
},
},
{
label = "وَزَعَ (p199)", root = "وزع", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "زَعَا"},
{"imp_2fp", "زَعْنَ"},
{"imp_2fs", "زَعِي"},
{"imp_2mp", "زَعُوا"},
{"imp_2ms", "زَعْ"},
{"ind_1p", "نَزَعُ"},
{"ind_1s", "أَزَعُ"},
{"ind_2d", "تَزَعَانِ"},
{"ind_2fp", "تَزَعْنَ"},
{"ind_2fs", "تَزَعِينَ"},
{"ind_2mp", "تَزَعُونَ"},
{"ind_2ms", "تَزَعُ"},
{"ind_3fd", "تَزَعَانِ"},
{"ind_3fp", "يَزَعْنَ"},
{"ind_3fs", "تَزَعُ"},
{"ind_3md", "يَزَعَانِ"},
{"ind_3mp", "يَزَعُونَ"},
{"ind_3ms", "يَزَعُ"},
{"past_1p", "وَزَعْنَا"},
{"past_1s", "وَزَعْتُ"},
{"past_2d", "وَزَعْتُمَا"},
{"past_2fp", "وَزَعْتُنَّ"},
{"past_2fs", "وَزَعْتِ"},
{"past_2mp", "وَزَعْتُمْ"},
{"past_2ms", "وَزَعْتَ"},
{"past_3fd", "وَزَعَتَا"},
{"past_3fp", "وَزَعْنَ"},
{"past_3fs", "وَزَعَتْ"},
{"past_3md", "وَزَعَا"},
{"past_3mp", "وَزَعُوا"},
{"past_3ms", "وَزَعَ"},
},
},
{
label = "داءَ (p201)", root = "دوء", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "دَاءَا"},
{"imp_2fp", "دَأْنَ"},
{"imp_2fs", "دَائِي"},
{"imp_2mp", "دَاؤُوا"},
{"imp_2ms", "دَأْ"},
{"ind_1p", "نَدَاءُ"},
{"ind_1s", "أَدَاءُ"},
{"ind_2d", "تَدَاآنِ"},
{"ind_2fp", "تَدَأْنَ"},
{"ind_2fs", "تَدَائِينَ"},
{"ind_2mp", "تَدَاؤُونَ"},
{"ind_2ms", "تَدَاءُ"},
{"ind_3fd", "تَدَاآنِ"},
{"ind_3fp", "يَدَأْنَ"},
{"ind_3fs", "تَدَاءُ"},
{"ind_3md", "يَدَاآنِ"},
{"ind_3mp", "يَدَاؤُونَ"},
{"ind_3ms", "يَدَاءُ"},
{"past_1p", "دِئْنَا"},
{"past_1s", "دِئْتُ"},
{"past_2d", "دِئْتُمَا"},
{"past_2fp", "دِئْتُنَّ"},
{"past_2fs", "دِئْتِ"},
{"past_2mp", "دِئْتُمْ"},
{"past_2ms", "دِئْتَ"},
{"past_3fd", "دَاءَتَا"},
{"past_3fp", "دِئْنَ"},
{"past_3fs", "دَاءَتْ"},
{"past_3md", "دَاءَا"},
{"past_3mp", "دَاؤُوا"},
{"past_3ms", "دَاءَ"},
},
},
{
label = "جادَ (p201)", root = "جود", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "جَادَا"},
{"imp_2fp", "جَدْنَ"},
{"imp_2fs", "جَادِي"},
{"imp_2mp", "جَادُوا"},
{"imp_2ms", "جَدْ"},
{"ind_1p", "نَجَادُ"},
{"ind_1s", "أَجَادُ"},
{"ind_2d", "تَجَادَانِ"},
{"ind_2fp", "تَجَدْنَ"},
{"ind_2fs", "تَجَادِينَ"},
{"ind_2mp", "تَجَادُونَ"},
{"ind_2ms", "تَجَادُ"},
{"ind_3fd", "تَجَادَانِ"},
{"ind_3fp", "يَجَدْنَ"},
{"ind_3fs", "تَجَادُ"},
{"ind_3md", "يَجَادَانِ"},
{"ind_3mp", "يَجَادُونَ"},
{"ind_3ms", "يَجَادُ"},
{"past_1p", "جِدْنَا"},
{"past_1s", "جِدْتُ"},
{"past_2d", "جِدْتُمَا"},
{"past_2fp", "جِدْتُنَّ"},
{"past_2fs", "جِدْتِ"},
{"past_2mp", "جِدْتُمْ"},
{"past_2ms", "جِدْتَ"},
{"past_3fd", "جَادَتَا"},
{"past_3fs", "جَادَتْ"},
{"past_3md", "جَادَا"},
{"past_3mp", "جَادُوا"},
{"past_3ms", "جَادَ"},
},
},
{
label = "حارَ (p202)", root = "حور", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "حَارَا"},
{"imp_2fp", "حَرْنَ"},
{"imp_2fs", "حَارِي"},
{"imp_2mp", "حَارُوا"},
{"imp_2ms", "حَرْ"},
{"ind_1p", "نَحَارُ"},
{"ind_1s", "أَحَارُ"},
{"ind_2d", "تَحَارَانِ"},
{"ind_2fp", "تَحَرْنَ"},
{"ind_2fs", "تَحَارِينَ"},
{"ind_2mp", "تَحَارُونَ"},
{"ind_2ms", "تَحَارُ"},
{"ind_3fd", "تَحَارَانِ"},
{"ind_3fp", "يَحَرْنَ"},
{"ind_3fs", "تَحَارُ"},
{"ind_3md", "يَحَارَانِ"},
{"ind_3mp", "يَحَارُونَ"},
{"ind_3ms", "يَحَارُ"},
{"past_1p", "حِرْنَا"},
{"past_1s", "حِرْتُ"},
{"past_2d", "حِرْتُمَا"},
{"past_2fp", "حِرْتُنَّ"},
{"past_2fs", "حِرْتِ"},
{"past_2mp", "حِرْتُمْ"},
{"past_2ms", "حِرْتَ"},
{"past_3fd", "حَارَتَا"},
{"past_3fp", "حِرْنَ"},
{"past_3fs", "حَارَتْ"},
{"past_3md", "حَارَا"},
{"past_3mp", "حَارُوا"},
{"past_3ms", "حَارَ"},
},
},
{
label = "نَهَى (p204)", root = "نهي", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "اِنْهَيَا"},
{"imp_2fp", "اِنْهَيْنَ"},
{"imp_2fs", "اِنْهَيْ"},
{"imp_2mp", "اِنْهَوْا"},
{"imp_2ms", "اِنْهَ"},
{"ind_1p", "نَنْهَى"},
{"ind_1s", "أَنْهَى"},
{"ind_2d", "تَنْهَيَانِ"},
{"ind_2fp", "تَنْهَيْنَ"},
{"ind_2fs", "تَنْهَيْنَ"},
{"ind_2mp", "تَنْهَوْنَ"},
{"ind_2ms", "تَنْهَى"},
{"ind_3fd", "تَنْهَيَانِ"},
{"ind_3fp", "يَنْهَيْنَ"},
{"ind_3fs", "تَنْهَى"},
{"ind_3md", "يَنْهَيَانِ"},
{"ind_3mp", "يَنْهَوْنَ"},
{"ind_3ms", "يَنْهَى"},
{"past_1p", "نَهَيْنَا"},
{"past_1s", "نَهَيْتُ"},
{"past_2d", "نَهَيْتُمَا"},
{"past_2fp", "نَهَيْتُنَّ"},
{"past_2fs", "نَهَيْتِ"},
{"past_2mp", "نَهَيْتُمْ"},
{"past_2ms", "نَهَيْتَ"},
{"past_3fd", "نَهَتَا"},
{"past_3fp", "نَهَيْنَ"},
{"past_3fs", "نَهَتْ"},
{"past_3md", "نَهَيَا"},
{"past_3mp", "نَهَوْا"},
{"past_3ms", "نَهَى"},
},
},
{
label = "ذَلَى (p205)", root = "ذلي", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "اِذْلَيَا"},
{"imp_2fp", "اِذْلَيْنَ"},
{"imp_2fs", "اِذْلَيْ"},
{"imp_2mp", "اِذْلَوْا"},
{"imp_2ms", "اِذْلَ"},
{"ind_1p", "نَذْلَى"},
{"ind_1s", "أَذْلَى"},
{"ind_2d", "تَذْلَيَانِ"},
{"ind_2fp", "تَذْلَيْنَ"},
{"ind_2fs", "تَذْلَيْنَ"},
{"ind_2mp", "تَذْلَوْنَ"},
{"ind_2ms", "تَذْلَى"},
{"ind_3fd", "تَذْلَيَانِ"},
{"ind_3fp", "يَذْلَيْنَ"},
{"ind_3fs", "تَذْلَى"},
{"ind_3md", "يَذْلَيَانِ"},
{"ind_3mp", "يَذْلَوْنَ"},
{"ind_3ms", "يَذْلَى"},
{"past_1p", "ذَلَيْنَا"},
{"past_1s", "ذَلَيْتُ"},
{"past_2d", "ذَلَيْتُمَا"},
{"past_2fp", "ذَلَيْتُنَّ"},
{"past_2fs", "ذَلَيْتِ"},
{"past_2mp", "ذَلَيْتُمْ"},
{"past_2ms", "ذَلَيْتَ"},
{"past_3fd", "ذَلَتَا"},
{"past_3fp", "ذَلَيْنَ"},
{"past_3fs", "ذَلَتْ"},
{"past_3md", "ذَلَيَا"},
{"past_3mp", "ذَلَوْا"},
{"past_3ms", "ذَلَى"},
},
},
{
label = "حَلُوَ (p222)", root = "حلو", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُحْلُوَا"},
{"imp_2fp", "اُحْلُونَ"},
{"imp_2fs", "اُحْلُوِي"},
{"imp_2mp", "اُحْلُوا"},
{"imp_2ms", "اُحْلُ"},
{"ind_1p", "نَحْلُو"},
{"ind_1s", "أَحْلُو"},
{"ind_2d", "تَحْلُوَانِ"},
{"ind_2fp", "تَحْلُونَ"},
{"ind_2fs", "تَحْلُوِينَ"},
{"ind_2mp", "تَحْلُونَ"},
{"ind_2ms", "تَحْلُو"},
{"ind_3fd", "تَحْلُوَانِ"},
{"ind_3fp", "يَحْلُونَ"},
{"ind_3fs", "تَحْلُو"},
{"ind_3md", "يَحْلُوَانِ"},
{"ind_3mp", "يَحْلُونَ"},
{"ind_3ms", "يَحْلُو"},
{"past_1p", "حَلُونَا"},
{"past_1s", "حَلُوتُ"},
{"past_2d", "حَلُوتُمَا"},
{"past_2fp", "حَلُوتُنَّ"},
{"past_2fs", "حَلُوتِ"},
{"past_2mp", "حَلُوتُمْ"},
{"past_2ms", "حَلُوتَ"},
{"past_3fd", "حَلُوَتَا"},
{"past_3fp", "حَلُونَ"},
{"past_3fs", "حَلُوَتْ"},
{"past_3md", "حَلُوَا"},
{"past_3mp", "حَلُوا"},
{"past_3ms", "حَلُوَ"},
},
},
{
label = "سَرُوَ (p222)", root = "سرو", wazn = "فعُل يفعُل",
forms = {
{"imp_2d", "اُسْرُوَا"},
{"imp_2fp", "اُسْرُونَ"},
{"imp_2fs", "اُسْرُوِي"},
{"imp_2mp", "اُسْرُوا"},
{"imp_2ms", "اُسْرُ"},
{"ind_1p", "نَسْرُو"},
{"ind_1s", "أَسْرُو"},
{"ind_2d", "تَسْرُوَانِ"},
{"ind_2fp", "تَسْرُونَ"},
{"ind_2fs", "تَسْرُوِينَ"},
{"ind_2mp", "تَسْرُونَ"},
{"ind_2ms", "تَسْرُو"},
{"ind_3fd", "تَسْرُوَانِ"},
{"ind_3fs", "تَسْرُو"},
{"ind_3md", "يَسْرُوَانِ"},
{"ind_3mp", "يَسْرُونَ"},
{"ind_3ms", "يَسْرُو"},
{"past_1p", "سَرُونَا"},
{"past_1s", "سَرُوتُ"},
{"past_2d", "سَرُوتُمَا"},
{"past_2fp", "سَرُوتُنَّ"},
{"past_2fs", "سَرُوتِ"},
{"past_2mp", "سَرُوتُمْ"},
{"past_2ms", "سَرُوتَ"},
{"past_3fd", "سَرُوَتَا"},
{"past_3fp", "سَرُونَ"},
{"past_3fs", "سَرُوَتْ"},
{"past_3md", "سَرُوَا"},
{"past_3mp", "سَرُوا"},
{"past_3ms", "سَرُوَ"},
},
},
{
label = "صَئِبَ (p235)", root = "صئب", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِصْأَبَا"},
{"imp_2fp", "اِصْأَبْنَ"},
{"imp_2fs", "اِصْأَبِي"},
{"imp_2mp", "اِصْأَبُوا"},
{"imp_2ms", "اِصْأَبْ"},
{"ind_1p", "نَصْأَبُ"},
{"ind_1s", "أَصْأَبُ"},
{"ind_2d", "تَصْأَبَانِ"},
{"ind_2fp", "تَصْأَبْنَ"},
{"ind_2fs", "تَصْأَبِينَ"},
{"ind_2mp", "تَصْأَبُونَ"},
{"ind_2ms", "تَصْأَبُ"},
{"ind_3fd", "تَصْأَبَانِ"},
{"ind_3fp", "يَصْأَبْنَ"},
{"ind_3fs", "تَصْأَبُ"},
{"ind_3md", "يَصْأَبَانِ"},
{"ind_3mp", "يَصْأَبُونَ"},
{"ind_3ms", "يَصْأَبُ"},
{"past_1p", "صَئِبْنَا"},
{"past_1s", "صَئِبْتُ"},
{"past_2d", "صَئِبْتُمَا"},
{"past_2fp", "صَئِبْتُنَّ"},
{"past_2fs", "صَئِبْتِ"},
{"past_2mp", "صَئِبْتُمْ"},
{"past_2ms", "صَئِبْتَ"},
{"past_3fd", "صَئِبَتَا"},
{"past_3fp", "صَئِبْنَ"},
{"past_3fs", "صَئِبَتْ"},
{"past_3md", "صَئِبَا"},
{"past_3mp", "صَئِبُوا"},
{"past_3ms", "صَئِبَ"},
},
},
{
label = "وَجِعَ (p240)", root = "وجع", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِيجَعَا"},
{"imp_2fp", "اِيجَعْنَ"},
{"imp_2fs", "اِيجَعِي"},
{"imp_2mp", "اِيجَعُوا"},
{"imp_2ms", "اِيجَعْ"},
{"ind_1p", "نَوْجَعُ"},
{"ind_1s", "أَوْجَعُ"},
{"ind_2d", "تَوْجَعَانِ"},
{"ind_2fp", "تَوْجَعْنَ"},
{"ind_2fs", "تَوْجَعِينَ"},
{"ind_2mp", "تَوْجَعُونَ"},
{"ind_2ms", "تَوْجَعُ"},
{"ind_3fd", "تَوْجَعَانِ"},
{"ind_3fp", "يَوْجَعْنَ"},
{"ind_3fs", "تَوْجَعُ"},
{"ind_3md", "يَوْجَعَانِ"},
{"ind_3mp", "يَوْجَعُونَ"},
{"ind_3ms", "يَوْجَعُ"},
{"past_1p", "وَجِعْنَا"},
{"past_1s", "وَجِعْتُ"},
{"past_2d", "وَجِعْتُمَا"},
{"past_2fp", "وَجِعْتُنَّ"},
{"past_2fs", "وَجِعْتِ"},
{"past_2mp", "وَجِعْتُمْ"},
{"past_2ms", "وَجِعْتَ"},
{"past_3fd", "وَجِعَتَا"},
{"past_3fp", "وَجِعْنَ"},
{"past_3fs", "وَجِعَتْ"},
{"past_3md", "وَجِعَا"},
{"past_3mp", "وَجِعُوا"},
{"past_3ms", "وَجِعَ"},
},
},
{
label = "كادَ (p242)", root = "كود", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "كَادَا"},
{"imp_2fp", "كَدْنَ"},
{"imp_2fs", "كَادِي"},
{"imp_2mp", "كَادُوا"},
{"imp_2ms", "كَدْ"},
{"ind_1p", "نَكَادُ"},
{"ind_1s", "أَكَادُ"},
{"ind_2d", "تَكَادَانِ"},
{"ind_2fp", "تَكَدْنَ"},
{"ind_2fs", "تَكَادِينَ"},
{"ind_2mp", "تَكَادُونَ"},
{"ind_2ms", "تَكَادُ"},
{"ind_3fd", "تَكَادَانِ"},
{"ind_3fp", "يَكَدْنَ"},
{"ind_3fs", "تَكَادُ"},
{"ind_3md", "يَكَادَانِ"},
{"ind_3mp", "يَكَادُونَ"},
{"ind_3ms", "يَكَادُ"},
{"past_1p", "كِدْنَا"},
{"past_1s", "كِدْتُ"},
{"past_2d", "كِدْتُمَا"},
{"past_2fp", "كِدْتُنَّ"},
{"past_2fs", "كِدْتِ"},
{"past_2mp", "كِدْتُمْ"},
{"past_2ms", "كِدْتَ"},
{"past_3fd", "كَادَتَا"},
{"past_3fp", "كِدْنَ"},
{"past_3fs", "كَادَتْ"},
{"past_3md", "كَادَا"},
{"past_3mp", "كَادُوا"},
{"past_3ms", "كَادَ"},
},
},
{
label = "هاءَ (p242)", root = "هوء", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "هَاءَا"},
{"imp_2fp", "هَأْنَ"},
{"imp_2fs", "هَائِي"},
{"imp_2mp", "هَاؤُوا"},
{"imp_2ms", "هَأْ"},
{"ind_1p", "نَهَاءُ"},
{"ind_1s", "أَهَاءُ"},
{"ind_2d", "تَهَاآنِ"},
{"ind_2fp", "تَهَأْنَ"},
{"ind_2fs", "تَهَائِينَ"},
{"ind_2mp", "تَهَاؤُونَ"},
{"ind_2ms", "تَهَاءُ"},
{"ind_3fd", "تَهَاآنِ"},
{"ind_3fp", "يَهَأْنَ"},
{"ind_3fs", "تَهَاءُ"},
{"ind_3md", "يَهَاآنِ"},
{"ind_3mp", "يَهَاؤُونَ"},
{"ind_3ms", "يَهَاءُ"},
{"past_1p", "هِئْنَا"},
{"past_1s", "هِئْتُ"},
{"past_2d", "هِئْتُمَا"},
{"past_2fp", "هِئْتُنَّ"},
{"past_2fs", "هِئْتِ"},
{"past_2mp", "هِئْتُمْ"},
{"past_2ms", "هِئْتَ"},
{"past_3fd", "هَاءَتَا"},
{"past_3fp", "هِئْنَ"},
{"past_3fs", "هَاءَتْ"},
{"past_3md", "هَاءَا"},
{"past_3mp", "هَاؤُوا"},
{"past_3ms", "هَاءَ"},
},
},
{
label = "أَذِيَ (p245)", root = "أذي", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِئْذَيَا"},
{"imp_2fp", "اِئْذَيْنَ"},
{"imp_2fs", "اِئْذَيْ"},
{"imp_2mp", "اِئْذَوْا"},
{"imp_2ms", "اِئْذَ"},
{"ind_1p", "نَأْذَى"},
{"ind_1s", "آذَى"},
{"ind_2d", "تَأْذَيَانِ"},
{"ind_2fp", "تَأْذَيْنَ"},
{"ind_2fs", "تَأْذَيْنَ"},
{"ind_2mp", "تَأْذَوْنَ"},
{"ind_2ms", "تَأْذَى"},
{"ind_3fd", "تَأْذَيَانِ"},
{"ind_3fp", "يَأْذَيْنَ"},
{"ind_3fs", "تَأْذَى"},
{"ind_3md", "يَأْذَيَانِ"},
{"ind_3mp", "يَأْذَوْنَ"},
{"ind_3ms", "يَأْذَى"},
{"past_1p", "أَذِينَا"},
{"past_1s", "أَذِيتُ"},
{"past_2d", "أَذِيتُمَا"},
{"past_2fp", "أَذِيتُنَّ"},
{"past_2fs", "أَذِيتِ"},
{"past_2mp", "أَذِيتُمْ"},
{"past_2ms", "أَذِيتَ"},
{"past_3fd", "أَذِيَتَا"},
{"past_3fp", "أَذِينَ"},
{"past_3fs", "أَذِيَتْ"},
{"past_3md", "أَذِيَا"},
{"past_3mp", "أَذُوا"},
{"past_3ms", "أَذِيَ"},
},
},
{
label = "سَخِيَ (p245)", root = "سخي", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِسْخَيَا"},
{"imp_2fp", "اِسْخَيْنَ"},
{"imp_2fs", "اِسْخَيْ"},
{"imp_2mp", "اِسْخَوْا"},
{"imp_2ms", "اِسْخَ"},
{"ind_1p", "نَسْخَى"},
{"ind_1s", "أَسْخَى"},
{"ind_2d", "تَسْخَيَانِ"},
{"ind_2fp", "تَسْخَيْنَ"},
{"ind_2fs", "تَسْخَيْنَ"},
{"ind_2mp", "تَسْخَوْنَ"},
{"ind_2ms", "تَسْخَى"},
{"ind_3fd", "تَسْخَيَانِ"},
{"ind_3fs", "تَسْخَى"},
{"ind_3md", "يَسْخَيَانِ"},
{"ind_3mp", "يَسْخَوْنَ"},
{"ind_3ms", "يَسْخَى"},
{"past_1p", "سَخِينَا"},
{"past_1s", "سَخِيتُ"},
{"past_2d", "سَخِيتُمَا"},
{"past_2fp", "سَخِيتُنَّ"},
{"past_2fs", "سَخِيتِ"},
{"past_2mp", "سَخِيتُمْ"},
{"past_2ms", "سَخِيتَ"},
{"past_3fd", "سَخِيَتَا"},
{"past_3fp", "سَخِينَ"},
{"past_3fs", "سَخِيَتْ"},
{"past_3md", "سَخِيَا"},
{"past_3mp", "سَخُوا"},
{"past_3ms", "سَخِيَ"},
},
},
{
label = "أَسِيَ (p246)", root = "أسي", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِئْسَيَا"},
{"imp_2fp", "اِئْسَيْنَ"},
{"imp_2fs", "اِئْسَيْ"},
{"imp_2mp", "اِئْسَوْا"},
{"imp_2ms", "اِئْسَ"},
{"ind_1p", "نَأْسَى"},
{"ind_1s", "آسَى"},
{"ind_2d", "تَأْسَيَانِ"},
{"ind_2fp", "تَأْسَيْنَ"},
{"ind_2fs", "تَأْسَيْنَ"},
{"ind_2mp", "تَأْسَوْنَ"},
{"ind_2ms", "تَأْسَى"},
{"ind_3fd", "تَأْسَيَانِ"},
{"ind_3fp", "يَأْسَيْنَ"},
{"ind_3fs", "تَأْسَى"},
{"ind_3md", "يَأْسَيَانِ"},
{"ind_3mp", "يَأْسَوْنَ"},
{"ind_3ms", "يَأْسَى"},
{"past_1p", "أَسِينَا"},
{"past_1s", "أَسِيتُ"},
{"past_2d", "أَسِيتُمَا"},
{"past_2fp", "أَسِيتُنَّ"},
{"past_2fs", "أَسِيتِ"},
{"past_2mp", "أَسِيتُمْ"},
{"past_2ms", "أَسِيتَ"},
{"past_3fd", "أَسِيَتَا"},
{"past_3fp", "أَسِينَ"},
{"past_3fs", "أَسِيَتْ"},
{"past_3md", "أَسِيَا"},
{"past_3mp", "أَسُوا"},
{"past_3ms", "أَسِيَ"},
},
},
{
label = "عَرِيَ (p246)", root = "عري", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِعْرَيَا"},
{"imp_2fp", "اِعْرَيْنَ"},
{"imp_2fs", "اِعْرَيْ"},
{"imp_2mp", "اِعْرَوْا"},
{"imp_2ms", "اِعْرَ"},
{"ind_1p", "نَعْرَى"},
{"ind_1s", "أَعْرَى"},
{"ind_2d", "تَعْرَيَانِ"},
{"ind_2fp", "تَعْرَيْنَ"},
{"ind_2fs", "تَعْرَيْنَ"},
{"ind_2mp", "تَعْرَوْنَ"},
{"ind_2ms", "تَعْرَى"},
{"ind_3fd", "تَعْرَيَانِ"},
{"ind_3fs", "تَعْرَى"},
{"ind_3md", "يَعْرَيَانِ"},
{"ind_3mp", "يَعْرَوْنَ"},
{"ind_3ms", "يَعْرَى"},
{"past_1p", "عَرِينَا"},
{"past_1s", "عَرِيتُ"},
{"past_2d", "عَرِيتُمَا"},
{"past_2fp", "عَرِيتُنَّ"},
{"past_2fs", "عَرِيتِ"},
{"past_2mp", "عَرِيتُمْ"},
{"past_2ms", "عَرِيتَ"},
{"past_3fd", "عَرِيَتَا"},
{"past_3fp", "عَرِينَ"},
{"past_3fs", "عَرِيَتْ"},
{"past_3md", "عَرِيَا"},
{"past_3mp", "عَرُوا"},
{"past_3ms", "عَرِيَ"},
},
},
{
label = "نَفَّذَ (p260)", root = "نفذ", wazn = "فعّل",
forms = {
{"imp_2d", "نَفِّذَا"},
{"imp_2fp", "نَفِّذْنَ"},
{"imp_2fs", "نَفِّذِي"},
{"imp_2mp", "نَفِّذُوا"},
{"imp_2ms", "نَفِّذْ"},
{"ind_1p", "نُنَفِّذُ"},
{"ind_1s", "أُنَفِّذُ"},
{"ind_2d", "تُنَفِّذَانِ"},
{"ind_2fp", "تُنَفِّذْنَ"},
{"ind_2fs", "تُنَفِّذِينَ"},
{"ind_2mp", "تُنَفِّذُونَ"},
{"ind_2ms", "تُنَفِّذُ"},
{"ind_3fd", "تُنَفِّذَانِ"},
{"ind_3fp", "يُنَفِّذْنَ"},
{"ind_3fs", "تُنَفِّذُ"},
{"ind_3md", "يُنَفِّذَانِ"},
{"ind_3mp", "يُنَفِّذُونَ"},
{"ind_3ms", "يُنَفِّذُ"},
{"past_1p", "نَفَّذْنَا"},
{"past_1s", "نَفَّذْتُ"},
{"past_2d", "نَفَّذْتُمَا"},
{"past_2fp", "نَفَّذْتُنَّ"},
{"past_2fs", "نَفَّذْتِ"},
{"past_2mp", "نَفَّذْتُمْ"},
{"past_2ms", "نَفَّذْتَ"},
{"past_3fd", "نَفَّذَتَا"},
{"past_3fp", "نَفَّذْنَ"},
{"past_3fs", "نَفَّذَتْ"},
{"past_3md", "نَفَّذَا"},
{"past_3mp", "نَفَّذُوا"},
{"past_3ms", "نَفَّذَ"},
},
},
{
label = "فَيَّأَ (p269)", root = "فيأ", wazn = "فعّل",
forms = {
{"imp_2d", "فَيِّئَا"},
{"imp_2fp", "فَيِّئْنَ"},
{"imp_2fs", "فَيِّئِي"},
{"imp_2mp", "فَيِّئُوا"},
{"imp_2ms", "فَيِّئْ"},
{"ind_1p", "نُفَيِّئُ"},
{"ind_1s", "أُفَيِّئُ"},
{"ind_2d", "تُفَيِّئَانِ"},
{"ind_2fp", "تُفَيِّئْنَ"},
{"ind_2fs", "تُفَيِّئِينَ"},
{"ind_2mp", "تُفَيِّئُونَ"},
{"ind_2ms", "تُفَيِّئُ"},
{"ind_3fd", "تُفَيِّئَانِ"},
{"ind_3fs", "تُفَيِّئُ"},
{"ind_3md", "يُفَيِّئَانِ"},
{"ind_3mp", "يُفَيِّئُونَ"},
{"ind_3ms", "يُفَيِّئُ"},
{"past_1p", "فَيَّأْنَا"},
{"past_1s", "فَيَّأْتُ"},
{"past_2d", "فَيَّأْتُمَا"},
{"past_2fp", "فَيَّأْتُنَّ"},
{"past_2fs", "فَيَّأْتِ"},
{"past_2mp", "فَيَّأْتُمْ"},
{"past_2ms", "فَيَّأْتَ"},
{"past_3fd", "فَيَّأَتَا"},
{"past_3fp", "فَيَّأْنَ"},
{"past_3fs", "فَيَّأَتْ"},
{"past_3md", "فَيَّآ"},
{"past_3mp", "فَيَّؤُوا"},
{"past_3ms", "فَيَّأَ"},
},
},
{
label = "أَدَّى (p271)", root = "أدي", wazn = "فعّل",
forms = {
{"imp_2d", "أَدِّيَا"},
{"imp_2fp", "أَدِّينَ"},
{"imp_2fs", "أَدِّي"},
{"imp_2mp", "أَدُّوا"},
{"imp_2ms", "أَدِّ"},
{"ind_1p", "نُؤَدِّي"},
{"ind_1s", "أُؤَدِّي"},
{"ind_2d", "تُؤَدِّيَانِ"},
{"ind_2fp", "تُؤَدِّينَ"},
{"ind_2fs", "تُؤَدِّينَ"},
{"ind_2mp", "تُؤَدُّونَ"},
{"ind_2ms", "تُؤَدِّي"},
{"ind_3fd", "تُؤَدِّيَانِ"},
{"ind_3fp", "يُؤَدِّينَ"},
{"ind_3fs", "تُؤَدِّي"},
{"ind_3md", "يُؤَدِّيَانِ"},
{"ind_3mp", "يُؤَدُّونَ"},
{"ind_3ms", "يُؤَدِّي"},
{"past_1p", "أَدَّيْنَا"},
{"past_1s", "أَدَّيْتُ"},
{"past_2d", "أَدَّيْتُمَا"},
{"past_2fp", "أَدَّيْتُنَّ"},
{"past_2fs", "أَدَّيْتِ"},
{"past_2mp", "أَدَّيْتُمْ"},
{"past_2ms", "أَدَّيْتَ"},
{"past_3fd", "أَدَّتَا"},
{"past_3fp", "أَدَّيْنَ"},
{"past_3fs", "أَدَّتْ"},
{"past_3md", "أَدَّيَا"},
{"past_3mp", "أَدَّوْا"},
{"past_3ms", "أَدَّى"},
},
},
{
label = "رَأَّى (p271)", root = "رأو", wazn = "فعّل",
forms = {
{"imp_2d", "رَئِّيَا"},
{"imp_2fp", "رَئِّينَ"},
{"imp_2fs", "رَئِّي"},
{"imp_2mp", "رَؤُّوا"},
{"imp_2ms", "رَأِّ"},
{"ind_1p", "نُرَئِّي"},
{"ind_1s", "أُرَئِّي"},
{"ind_2d", "تُرَئِّيَانِ"},
{"ind_2fp", "تُرَئِّينَ"},
{"ind_2fs", "تُرَئِّينَ"},
{"ind_2mp", "تُرَؤُّونَ"},
{"ind_2ms", "تُرَئِّي"},
{"ind_3fd", "تُرَئِّيَانِ"},
{"ind_3fp", "يُرَئِّينَ"},
{"ind_3fs", "تُرَئِّي"},
{"ind_3md", "يُرَئِّيَانِ"},
{"ind_3mp", "يُرَؤُّونَ"},
{"ind_3ms", "يُرَئِّي"},
{"past_1p", "رَأَّيْنَا"},
{"past_1s", "رَأَّيْتُ"},
{"past_2d", "رَأَّيْتُمَا"},
{"past_2fp", "رَأَّيْتُنَّ"},
{"past_2fs", "رَأَّيْتِ"},
{"past_2mp", "رَأَّيْتُمْ"},
{"past_2ms", "رَأَّيْتَ"},
{"past_3fd", "رَأَّتَا"},
{"past_3fp", "رَأَّيْنَ"},
{"past_3fs", "رَأَّتْ"},
{"past_3md", "رَأَّيَا"},
{"past_3mp", "رَأَّوْا"},
{"past_3ms", "رَأَّى"},
},
},
{
label = "جايَأَ (p283)", root = "جيأ", wazn = "فاعل",
forms = {
{"imp_2d", "جَايِئَا"},
{"imp_2fp", "جَايِئْنَ"},
{"imp_2fs", "جَايِئِي"},
{"imp_2mp", "جَايِئُوا"},
{"imp_2ms", "جَايِئْ"},
{"ind_1p", "نُجَايِئُ"},
{"ind_1s", "أُجَايِئُ"},
{"ind_2d", "تُجَايِئَانِ"},
{"ind_2fp", "تُجَايِئْنَ"},
{"ind_2fs", "تُجَايِئِينَ"},
{"ind_2mp", "تُجَايِئُونَ"},
{"ind_2ms", "تُجَايِئُ"},
{"ind_3fd", "تُجَايِئَانِ"},
{"ind_3fp", "يُجَايِئْنَ"},
{"ind_3fs", "تُجَايِئُ"},
{"ind_3md", "يُجَايِئَانِ"},
{"ind_3mp", "يُجَايِئُونَ"},
{"ind_3ms", "يُجَايِئُ"},
{"past_1p", "جَايَأْنَا"},
{"past_1s", "جَايَأْتُ"},
{"past_2d", "جَايَأْتُمَا"},
{"past_2fp", "جَايَأْتُنَّ"},
{"past_2fs", "جَايَأْتِ"},
{"past_2mp", "جَايَأْتُمْ"},
{"past_2ms", "جَايَأْتَ"},
{"past_3fd", "جَايَأَتَا"},
{"past_3fp", "جَايَأْنَ"},
{"past_3fs", "جَايَأَتْ"},
{"past_3md", "جَايَآ"},
{"past_3mp", "جَايَؤُوا"},
{"past_3ms", "جَايَأَ"},
},
},
{
label = "وارَى (p286)", root = "وري", wazn = "فاعل",
forms = {
{"imp_2d", "وَارِيَا"},
{"imp_2fp", "وَارِينَ"},
{"imp_2fs", "وَارِي"},
{"imp_2mp", "وَارُوا"},
{"imp_2ms", "وَارِ"},
{"ind_1p", "نُوَارِي"},
{"ind_1s", "أُوَارِي"},
{"ind_2d", "تُوَارِيَانِ"},
{"ind_2fp", "تُوَارِينَ"},
{"ind_2fs", "تُوَارِينَ"},
{"ind_2mp", "تُوَارُونَ"},
{"ind_2ms", "تُوَارِي"},
{"ind_3fd", "تُوَارِيَانِ"},
{"ind_3fp", "يُوَارِينَ"},
{"ind_3fs", "تُوَارِي"},
{"ind_3md", "يُوَارِيَانِ"},
{"ind_3mp", "يُوَارُونَ"},
{"ind_3ms", "يُوَارِي"},
{"past_1p", "وَارَيْنَا"},
{"past_1s", "وَارَيْتُ"},
{"past_2d", "وَارَيْتُمَا"},
{"past_2fp", "وَارَيْتُنَّ"},
{"past_2fs", "وَارَيْتِ"},
{"past_2mp", "وَارَيْتُمْ"},
{"past_2ms", "وَارَيْتَ"},
{"past_3fd", "وَارَتَا"},
{"past_3fp", "وَارَيْنَ"},
{"past_3fs", "وَارَتْ"},
{"past_3md", "وَارَيَا"},
{"past_3mp", "وَارَوْا"},
{"past_3ms", "وَارَى"},
},
},
{
label = "قاوَى (p288)", root = "قوي", wazn = "فاعل",
forms = {
{"imp_2d", "قَاوِيَا"},
{"imp_2fp", "قَاوِينَ"},
{"imp_2fs", "قَاوِي"},
{"imp_2mp", "قَاوُوا"},
{"imp_2ms", "قَاوِ"},
{"ind_1p", "نُقَاوِي"},
{"ind_1s", "أُقَاوِي"},
{"ind_2d", "تُقَاوِيَانِ"},
{"ind_2fp", "تُقَاوِينَ"},
{"ind_2fs", "تُقَاوِينَ"},
{"ind_2mp", "تُقَاوُونَ"},
{"ind_2ms", "تُقَاوِي"},
{"ind_3fd", "تُقَاوِيَانِ"},
{"ind_3fp", "يُقَاوِينَ"},
{"ind_3fs", "تُقَاوِي"},
{"ind_3md", "يُقَاوِيَانِ"},
{"ind_3mp", "يُقَاوُونَ"},
{"ind_3ms", "يُقَاوِي"},
{"past_1p", "قَاوَيْنَا"},
{"past_1s", "قَاوَيْتُ"},
{"past_2d", "قَاوَيْتُمَا"},
{"past_2fp", "قَاوَيْتُنَّ"},
{"past_2fs", "قَاوَيْتِ"},
{"past_2mp", "قَاوَيْتُمْ"},
{"past_2ms", "قَاوَيْتَ"},
{"past_3fd", "قَاوَتَا"},
{"past_3fp", "قَاوَيْنَ"},
{"past_3fs", "قَاوَتْ"},
{"past_3md", "قَاوَيَا"},
{"past_3mp", "قَاوَوْا"},
{"past_3ms", "قَاوَى"},
},
},
{
label = "أَبْأَسَ (p293)", root = "بأس", wazn = "أفعل",
forms = {
{"imp_2d", "أَبْئِسَا"},
{"imp_2fp", "أَبْئِسْنَ"},
{"imp_2fs", "أَبْئِسِي"},
{"imp_2mp", "أَبْئِسُوا"},
{"imp_2ms", "أَبْئِسْ"},
{"ind_1p", "نُبْئِسُ"},
{"ind_1s", "أُبْئِسُ"},
{"ind_2d", "تُبْئِسَانِ"},
{"ind_2fp", "تُبْئِسْنَ"},
{"ind_2fs", "تُبْئِسِينَ"},
{"ind_2mp", "تُبْئِسُونَ"},
{"ind_2ms", "تُبْئِسُ"},
{"ind_3fd", "تُبْئِسَانِ"},
{"ind_3fp", "يُبْئِسْنَ"},
{"ind_3fs", "تُبْئِسُ"},
{"ind_3md", "يُبْئِسَانِ"},
{"ind_3mp", "يُبْئِسُونَ"},
{"ind_3ms", "يُبْئِسُ"},
{"past_1p", "أَبْأَسْنَا"},
{"past_1s", "أَبْأَسْتُ"},
{"past_2d", "أَبْأَسْتُمَا"},
{"past_2fp", "أَبْأَسْتُنَّ"},
{"past_2fs", "أَبْأَسْتِ"},
{"past_2mp", "أَبْأَسْتُمْ"},
{"past_2ms", "أَبْأَسْتَ"},
{"past_3fd", "أَبْأَسَتَا"},
{"past_3fp", "أَبْأَسْنَ"},
{"past_3fs", "أَبْأَسَتْ"},
{"past_3md", "أَبْأَسَا"},
{"past_3mp", "أَبْأَسُوا"},
{"past_3ms", "أَبْأَسَ"},
},
},
{
label = "أَثارَ (p296)", root = "ثور", wazn = "أفعل",
forms = {
{"imp_2d", "أَثِيرَا"},
{"imp_2fp", "أَثِرْنَ"},
{"imp_2fs", "أَثِيرِي"},
{"imp_2mp", "أَثِيرُوا"},
{"imp_2ms", "أَثِرْ"},
{"ind_1p", "نُثِيرُ"},
{"ind_1s", "أُثِيرُ"},
{"ind_2d", "تُثِيرَانِ"},
{"ind_2fp", "تُثِرْنَ"},
{"ind_2fs", "تُثِيرِينَ"},
{"ind_2mp", "تُثِيرُونَ"},
{"ind_2ms", "تُثِيرُ"},
{"ind_3fd", "تُثِيرَانِ"},
{"ind_3fp", "يُثِرْنَ"},
{"ind_3fs", "تُثِيرُ"},
{"ind_3md", "يُثِيرَانِ"},
{"ind_3mp", "يُثِيرُونَ"},
{"ind_3ms", "يُثِيرُ"},
{"past_1p", "أَثَرْنَا"},
{"past_1s", "أَثَرْتُ"},
{"past_2d", "أَثَرْتُمَا"},
{"past_2fp", "أَثَرْتُنَّ"},
{"past_2fs", "أَثَرْتِ"},
{"past_2mp", "أَثَرْتُمْ"},
{"past_2ms", "أَثَرْتَ"},
{"past_3fd", "أَثَارَتَا"},
{"past_3fp", "أَثَرْنَ"},
{"past_3fs", "أَثَارَتْ"},
{"past_3md", "أَثَارَا"},
{"past_3mp", "أَثَارُوا"},
{"past_3ms", "أَثَارَ"},
},
},
{
label = "أَرادَ (p296)", root = "رود", wazn = "أفعل",
forms = {
{"imp_2d", "أَرِيدَا"},
{"imp_2fp", "أَرِدْنَ"},
{"imp_2fs", "أَرِيدِي"},
{"imp_2mp", "أَرِيدُوا"},
{"imp_2ms", "أَرِدْ"},
{"ind_1p", "نُرِيدُ"},
{"ind_1s", "أُرِيدُ"},
{"ind_2d", "تُرِيدَانِ"},
{"ind_2fp", "تُرِدْنَ"},
{"ind_2fs", "تُرِيدِينَ"},
{"ind_2mp", "تُرِيدُونَ"},
{"ind_2ms", "تُرِيدُ"},
{"ind_3fd", "تُرِيدَانِ"},
{"ind_3fp", "يُرِدْنَ"},
{"ind_3fs", "تُرِيدُ"},
{"ind_3md", "يُرِيدَانِ"},
{"ind_3mp", "يُرِيدُونَ"},
{"ind_3ms", "يُرِيدُ"},
{"past_1p", "أَرَدْنَا"},
{"past_1s", "أَرَدْتُ"},
{"past_2d", "أَرَدْتُمَا"},
{"past_2fp", "أَرَدْتُنَّ"},
{"past_2fs", "أَرَدْتِ"},
{"past_2mp", "أَرَدْتُمْ"},
{"past_2ms", "أَرَدْتَ"},
{"past_3fd", "أَرَادَتَا"},
{"past_3fp", "أَرَدْنَ"},
{"past_3fs", "أَرَادَتْ"},
{"past_3md", "أَرَادَا"},
{"past_3mp", "أَرَادُوا"},
{"past_3ms", "أَرَادَ"},
},
},
{
label = "أَخْيَلَ (p297)", root = "خيل", wazn = "أفعل",
forms = {
{"imp_2d", "أَخْيِلَا"},
{"imp_2fp", "أَخْيِلْنَ"},
{"imp_2fs", "أَخْيِلِي"},
{"imp_2mp", "أَخْيِلُوا"},
{"imp_2ms", "أَخْيِلْ"},
{"ind_1p", "نُخْيِلُ"},
{"ind_1s", "أُخْيِلُ"},
{"ind_2d", "تُخْيِلَانِ"},
{"ind_2fp", "تُخْيِلْنَ"},
{"ind_2fs", "تُخْيِلِينَ"},
{"ind_2mp", "تُخْيِلُونَ"},
{"ind_2ms", "تُخْيِلُ"},
{"ind_3fd", "تُخْيِلَانِ"},
{"ind_3fp", "يُخْيِلْنَ"},
{"ind_3fs", "تُخْيِلُ"},
{"ind_3md", "يُخْيِلَانِ"},
{"ind_3mp", "يُخْيِلُونَ"},
{"ind_3ms", "يُخْيِلُ"},
{"past_1p", "أَخْيَلْنَا"},
{"past_1s", "أَخْيَلْتُ"},
{"past_2d", "أَخْيَلْتُمَا"},
{"past_2fp", "أَخْيَلْتُنَّ"},
{"past_2fs", "أَخْيَلْتِ"},
{"past_2mp", "أَخْيَلْتُمْ"},
{"past_2ms", "أَخْيَلْتَ"},
{"past_3fd", "أَخْيَلَتَا"},
{"past_3fp", "أَخْيَلْنَ"},
{"past_3fs", "أَخْيَلَتْ"},
{"past_3md", "أَخْيَلَا"},
{"past_3mp", "أَخْيَلُوا"},
{"past_3ms", "أَخْيَلَ"},
},
},
{
label = "أَسَاءَ (p298)", root = "سوء", wazn = "أفعل",
forms = {
{"imp_2d", "أَسِيئَا"},
{"imp_2fp", "أَسِئْنَ"},
{"imp_2fs", "أَسِيئِي"},
{"imp_2mp", "أَسِيؤُوا"},
{"imp_2ms", "أَسِئْ"},
{"ind_1p", "نُسِيءُ"},
{"ind_1s", "أُسِيءُ"},
{"ind_2d", "تُسِيئَانِ"},
{"ind_2fp", "تُسِئْنَ"},
{"ind_2fs", "تُسِيئِينَ"},
{"ind_2mp", "تُسِيؤُونَ"},
{"ind_2ms", "تُسِيءُ"},
{"ind_3fd", "تُسِيئَانِ"},
{"ind_3fp", "يُسِئْنَ"},
{"ind_3fs", "تُسِيءُ"},
{"ind_3md", "يُسِيئَانِ"},
{"ind_3mp", "يُسِيؤُونَ"},
{"ind_3ms", "يُسِيءُ"},
{"past_1p", "أَسَأْنَا"},
{"past_1s", "أَسَأْتُ"},
{"past_2d", "أَسَأْتُمَا"},
{"past_2fp", "أَسَأْتُنَّ"},
{"past_2fs", "أَسَأْتِ"},
{"past_2mp", "أَسَأْتُمْ"},
{"past_2ms", "أَسَأْتَ"},
{"past_3fd", "أَسَاءَتَا"},
{"past_3fp", "أَسَأْنَ"},
{"past_3fs", "أَسَاءَتْ"},
{"past_3md", "أَسَاءَا"},
{"past_3mp", "أَسَاؤُوا"},
{"past_3ms", "أَسَاءَ"},
},
},
{
label = "أَبْدَى (p299)", root = "بدو", wazn = "أفعل",
forms = {
{"imp_2d", "أَبْدِيَا"},
{"imp_2fp", "أَبْدِينَ"},
{"imp_2fs", "أَبْدِي"},
{"imp_2mp", "أَبْدُوا"},
{"imp_2ms", "أَبْدِ"},
{"ind_1p", "نُبْدِي"},
{"ind_1s", "أُبْدِي"},
{"ind_2d", "تُبْدِيَانِ"},
{"ind_2fp", "تُبْدِينَ"},
{"ind_2fs", "تُبْدِينَ"},
{"ind_2mp", "تُبْدُونَ"},
{"ind_2ms", "تُبْدِي"},
{"ind_3fd", "تُبْدِيَانِ"},
{"ind_3fp", "يُبْدِينَ"},
{"ind_3fs", "تُبْدِي"},
{"ind_3md", "يُبْدِيَانِ"},
{"ind_3mp", "يُبْدُونَ"},
{"ind_3ms", "يُبْدِي"},
{"past_1p", "أَبْدَيْنَا"},
{"past_1s", "أَبْدَيْتُ"},
{"past_2d", "أَبْدَيْتُمَا"},
{"past_2fp", "أَبْدَيْتُنَّ"},
{"past_2fs", "أَبْدَيْتِ"},
{"past_2mp", "أَبْدَيْتُمْ"},
{"past_2ms", "أَبْدَيْتَ"},
{"past_3fd", "أَبْدَتَا"},
{"past_3fp", "أَبْدَيْنَ"},
{"past_3fs", "أَبْدَتْ"},
{"past_3md", "أَبْدَيَا"},
{"past_3mp", "أَبْدَوْا"},
{"past_3ms", "أَبْدَى"},
},
},
}
ar3dryszgnclfs782576vpb88s2e1mn
وحدة:ar-verb/testcases/11
828
242576
1159032
1158900
2026-09-10T12:39:47Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159032
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 11 من 15. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/11")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_11()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
30t8iuk86j92bjiyw90itwerdrmy82d
1159090
1159032
2026-09-10T19:34:20Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159090
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 11 من 16. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/11")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_11()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
rp2q0alqbvwvfsxu1tgzyxxm9h1x9bo
نقاش الوحدة:ar-verb/testcases/11
829
242577
1159033
1158901
2026-09-10T12:39:48Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159033
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/11|الجزء 11 من 15]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، [[نقاش الوحدة:ar-verb/testcases/1|1]]، [[نقاش الوحدة:ar-verb/testcases/2|2]]، [[نقاش الوحدة:ar-verb/testcases/3|3]]، [[نقاش الوحدة:ar-verb/testcases/4|4]]، [[نقاش الوحدة:ar-verb/testcases/5|5]]، [[نقاش الوحدة:ar-verb/testcases/6|6]]، [[نقاش الوحدة:ar-verb/testcases/7|7]]، [[نقاش الوحدة:ar-verb/testcases/8|8]]، [[نقاش الوحدة:ar-verb/testcases/9|9]]، [[نقاش الوحدة:ar-verb/testcases/10|10]]، 11، [[نقاش الوحدة:ar-verb/testcases/12|12]]، [[نقاش الوحدة:ar-verb/testcases/13|13]]، [[نقاش الوحدة:ar-verb/testcases/14|14]]، [[نقاش الوحدة:ar-verb/testcases/15|15]] — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/11|run_tests}}
efwfaphe2pzso7pcke4b9qbsohcirjv
1159091
1159033
2026-09-10T19:34:21Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159091
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/11|الجزء 11 من 16]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، [[نقاش الوحدة:ar-verb/testcases/1|1]]، [[نقاش الوحدة:ar-verb/testcases/2|2]]، [[نقاش الوحدة:ar-verb/testcases/3|3]]، [[نقاش الوحدة:ar-verb/testcases/4|4]]، [[نقاش الوحدة:ar-verb/testcases/5|5]]، [[نقاش الوحدة:ar-verb/testcases/6|6]]، [[نقاش الوحدة:ar-verb/testcases/7|7]]، [[نقاش الوحدة:ar-verb/testcases/8|8]]، [[نقاش الوحدة:ar-verb/testcases/9|9]]، [[نقاش الوحدة:ar-verb/testcases/10|10]]، 11، [[نقاش الوحدة:ar-verb/testcases/12|12]]، [[نقاش الوحدة:ar-verb/testcases/13|13]]، [[نقاش الوحدة:ar-verb/testcases/14|14]]، [[نقاش الوحدة:ar-verb/testcases/15|15]]، [[نقاش الوحدة:ar-verb/testcases/16|16]] — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/11|run_tests}}
cxmzqrrx90l0l3pc2ujywtplhofxh52
وحدة:ar-verb/testcases/بيانات/12
828
242578
1159034
1158926
2026-09-10T12:39:51Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159034
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 12 من 15.
return {
{
label = "أَحْصَى (p299)", root = "حصو", wazn = "أفعل",
forms = {
{"imp_2d", "أَحْصِيَا"},
{"imp_2fp", "أَحْصِينَ"},
{"imp_2fs", "أَحْصِي"},
{"imp_2mp", "أَحْصُوا"},
{"imp_2ms", "أَحْصِ"},
{"ind_1p", "نُحْصِي"},
{"ind_1s", "أُحْصِي"},
{"ind_2d", "تُحْصِيَانِ"},
{"ind_2fp", "تُحْصِينَ"},
{"ind_2fs", "تُحْصِينَ"},
{"ind_2mp", "تُحْصُونَ"},
{"ind_2ms", "تُحْصِي"},
{"ind_3fd", "تُحْصِيَانِ"},
{"ind_3fp", "يُحْصِينَ"},
{"ind_3fs", "تُحْصِي"},
{"ind_3md", "يُحْصِيَانِ"},
{"ind_3mp", "يُحْصُونَ"},
{"ind_3ms", "يُحْصِي"},
{"past_1p", "أَحْصَيْنَا"},
{"past_1s", "أَحْصَيْتُ"},
{"past_2d", "أَحْصَيْتُمَا"},
{"past_2fp", "أَحْصَيْتُنَّ"},
{"past_2fs", "أَحْصَيْتِ"},
{"past_2mp", "أَحْصَيْتُمْ"},
{"past_2ms", "أَحْصَيْتَ"},
{"past_3fd", "أَحْصَتَا"},
{"past_3fp", "أَحْصَيْنَ"},
{"past_3fs", "أَحْصَتْ"},
{"past_3md", "أَحْصَيَا"},
{"past_3mp", "أَحْصَوْا"},
{"past_3ms", "أَحْصَى"},
},
},
{
label = "أَفْأَى (p300)", root = "فأو", wazn = "أفعل",
forms = {
{"imp_2d", "أَفْئِيَا"},
{"imp_2fp", "أَفْئِينَ"},
{"imp_2fs", "أَفْئِي"},
{"imp_2mp", "أَفْؤُوا"},
{"imp_2ms", "أَفْإِ"},
{"ind_1p", "نُفْئِي"},
{"ind_1s", "أُفْئِي"},
{"ind_2d", "تُفْئِيَانِ"},
{"ind_2fp", "تُفْئِينَ"},
{"ind_2fs", "تُفْئِينَ"},
{"ind_2mp", "تُفْؤُونَ"},
{"ind_2ms", "تُفْئِي"},
{"ind_3fd", "تُفْئِيَانِ"},
{"ind_3fp", "يُفْئِينَ"},
{"ind_3fs", "تُفْئِي"},
{"ind_3md", "يُفْئِيَانِ"},
{"ind_3mp", "يُفْؤُونَ"},
{"ind_3ms", "يُفْئِي"},
{"past_1p", "أَفْأَيْنَا"},
{"past_1s", "أَفْأَيْتُ"},
{"past_2d", "أَفْأَيْتُمَا"},
{"past_2fp", "أَفْأَيْتُنَّ"},
{"past_2fs", "أَفْأَيْتِ"},
{"past_2mp", "أَفْأَيْتُمْ"},
{"past_2ms", "أَفْأَيْتَ"},
{"past_3fd", "أَفْأَتَا"},
{"past_3fp", "أَفْأَيْنَ"},
{"past_3fs", "أَفْأَتْ"},
{"past_3md", "أَفْأَيَا"},
{"past_3mp", "أَفْأَوْا"},
{"past_3ms", "أَفْأَى"},
},
},
{
label = "أَوْصَى (p301)", root = "وصي", wazn = "أفعل",
forms = {
{"imp_2d", "أَوْصِيَا"},
{"imp_2fp", "أَوْصِينَ"},
{"imp_2fs", "أَوْصِي"},
{"imp_2mp", "أَوْصُوا"},
{"imp_2ms", "أَوْصِ"},
{"ind_1p", "نُوصِي"},
{"ind_1s", "أُوصِي"},
{"ind_2d", "تُوصِيَانِ"},
{"ind_2fp", "تُوصِينَ"},
{"ind_2fs", "تُوصِينَ"},
{"ind_2mp", "تُوصُونَ"},
{"ind_2ms", "تُوصِي"},
{"ind_3fd", "تُوصِيَانِ"},
{"ind_3fp", "يُوصِينَ"},
{"ind_3fs", "تُوصِي"},
{"ind_3md", "يُوصِيَانِ"},
{"ind_3mp", "يُوصُونَ"},
{"ind_3ms", "يُوصِي"},
{"past_1p", "أَوْصَيْنَا"},
{"past_1s", "أَوْصَيْتُ"},
{"past_2d", "أَوْصَيْتُمَا"},
{"past_2fp", "أَوْصَيْتُنَّ"},
{"past_2fs", "أَوْصَيْتِ"},
{"past_2mp", "أَوْصَيْتُمْ"},
{"past_2ms", "أَوْصَيْتَ"},
{"past_3fd", "أَوْصَتَا"},
{"past_3fp", "أَوْصَيْنَ"},
{"past_3fs", "أَوْصَتْ"},
{"past_3md", "أَوْصَيَا"},
{"past_3mp", "أَوْصَوْا"},
{"past_3ms", "أَوْصَى"},
},
},
{
label = "تَلاقَى (p333)", root = "لقو", wazn = "تفاعل",
forms = {
{"imp_2d", "تَلَاقَيَا"},
{"imp_2fp", "تَلَاقَيْنَ"},
{"imp_2fs", "تَلَاقَيْ"},
{"imp_2mp", "تَلَاقَوْا"},
{"imp_2ms", "تَلَاقَ"},
{"ind_1p", "نَتَلَاقَى"},
{"ind_1s", "أَتَلَاقَى"},
{"ind_2d", "تَتَلَاقَيَانِ"},
{"ind_2fp", "تَتَلَاقَيْنَ"},
{"ind_2fs", "تَتَلَاقَيْنَ"},
{"ind_2mp", "تَتَلَاقَوْنَ"},
{"ind_2ms", "تَتَلَاقَى"},
{"ind_3fd", "تَتَلَاقَيَانِ"},
{"ind_3fp", "يَتَلَاقَيْنَ"},
{"ind_3fs", "تَتَلَاقَى"},
{"ind_3md", "يَتَلَاقَيَانِ"},
{"ind_3mp", "يَتَلَاقَوْنَ"},
{"ind_3ms", "يَتَلَاقَى"},
{"past_1p", "تَلَاقَيْنَا"},
{"past_1s", "تَلَاقَيْتُ"},
{"past_2d", "تَلَاقَيْتُمَا"},
{"past_2fp", "تَلَاقَيْتُنَّ"},
{"past_2fs", "تَلَاقَيْتِ"},
{"past_2mp", "تَلَاقَيْتُمْ"},
{"past_2ms", "تَلَاقَيْتَ"},
{"past_3fd", "تَلَاقَتَا"},
{"past_3fp", "تَلَاقَيْنَ"},
{"past_3fs", "تَلَاقَتْ"},
{"past_3md", "تَلَاقَيَا"},
{"past_3mp", "تَلَاقَوْا"},
{"past_3ms", "تَلَاقَى"},
},
},
{
label = "تَبارَى (p333)", root = "برو", wazn = "تفاعل",
forms = {
{"imp_2d", "تَبَارَيَا"},
{"imp_2fp", "تَبَارَيْنَ"},
{"imp_2fs", "تَبَارَيْ"},
{"imp_2mp", "تَبَارَوْا"},
{"imp_2ms", "تَبَارَ"},
{"ind_1p", "نَتَبَارَى"},
{"ind_1s", "أَتَبَارَى"},
{"ind_2d", "تَتَبَارَيَانِ"},
{"ind_2fp", "تَتَبَارَيْنَ"},
{"ind_2fs", "تَتَبَارَيْنَ"},
{"ind_2mp", "تَتَبَارَوْنَ"},
{"ind_2ms", "تَتَبَارَى"},
{"ind_3fd", "تَتَبَارَيَانِ"},
{"ind_3fp", "يَتَبَارَيْنَ"},
{"ind_3fs", "تَتَبَارَى"},
{"ind_3md", "يَتَبَارَيَانِ"},
{"ind_3mp", "يَتَبَارَوْنَ"},
{"ind_3ms", "يَتَبَارَى"},
{"past_1p", "تَبَارَيْنَا"},
{"past_1s", "تَبَارَيْتُ"},
{"past_2d", "تَبَارَيْتُمَا"},
{"past_2fp", "تَبَارَيْتُنَّ"},
{"past_2fs", "تَبَارَيْتِ"},
{"past_2mp", "تَبَارَيْتُمْ"},
{"past_2ms", "تَبَارَيْتَ"},
{"past_3fd", "تَبَارَتَا"},
{"past_3fp", "تَبَارَيْنَ"},
{"past_3fs", "تَبَارَتْ"},
{"past_3md", "تَبَارَيَا"},
{"past_3mp", "تَبَارَوْا"},
{"past_3ms", "تَبَارَى"},
},
},
{
label = "تَدَاوَى (p336)", root = "دوي", wazn = "تفاعل",
forms = {
{"imp_2d", "تَدَاوَيَا"},
{"imp_2fp", "تَدَاوَيْنَ"},
{"imp_2fs", "تَدَاوَيْ"},
{"imp_2mp", "تَدَاوَوْا"},
{"imp_2ms", "تَدَاوَ"},
{"ind_1p", "نَتَدَاوَى"},
{"ind_1s", "أَتَدَاوَى"},
{"ind_2d", "تَتَدَاوَيَانِ"},
{"ind_2fp", "تَتَدَاوَيْنَ"},
{"ind_2fs", "تَتَدَاوَيْنَ"},
{"ind_2mp", "تَتَدَاوَوْنَ"},
{"ind_2ms", "تَتَدَاوَى"},
{"ind_3fd", "تَتَدَاوَيَانِ"},
{"ind_3fp", "يَتَدَاوَيْنَ"},
{"ind_3fs", "تَتَدَاوَى"},
{"ind_3md", "يَتَدَاوَيَانِ"},
{"ind_3mp", "يَتَدَاوَوْنَ"},
{"ind_3ms", "يَتَدَاوَى"},
{"past_1p", "تَدَاوَيْنَا"},
{"past_1s", "تَدَاوَيْتُ"},
{"past_2d", "تَدَاوَيْتُمَا"},
{"past_2fp", "تَدَاوَيْتُنَّ"},
{"past_2fs", "تَدَاوَيْتِ"},
{"past_2mp", "تَدَاوَيْتُمْ"},
{"past_2ms", "تَدَاوَيْتَ"},
{"past_3fd", "تَدَاوَتَا"},
{"past_3fp", "تَدَاوَيْنَ"},
{"past_3fs", "تَدَاوَتْ"},
{"past_3md", "تَدَاوَيَا"},
{"past_3mp", "تَدَاوَوْا"},
{"past_3ms", "تَدَاوَى"},
},
},
{
label = "اِنْزالَ (p344)", root = "زول", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْزَالَا"},
{"imp_2fp", "اِنْزَلْنَ"},
{"imp_2fs", "اِنْزَالِي"},
{"imp_2mp", "اِنْزَالُوا"},
{"imp_2ms", "اِنْزَلْ"},
{"ind_1p", "نَنْزَالُ"},
{"ind_1s", "أَنْزَالُ"},
{"ind_2d", "تَنْزَالَانِ"},
{"ind_2fp", "تَنْزَلْنَ"},
{"ind_2fs", "تَنْزَالِينَ"},
{"ind_2mp", "تَنْزَالُونَ"},
{"ind_2ms", "تَنْزَالُ"},
{"ind_3fd", "تَنْزَالَانِ"},
{"ind_3fp", "يَنْزَلْنَ"},
{"ind_3fs", "تَنْزَالُ"},
{"ind_3md", "يَنْزَالَانِ"},
{"ind_3mp", "يَنْزَالُونَ"},
{"ind_3ms", "يَنْزَالُ"},
{"past_1p", "اِنْزَلْنَا"},
{"past_1s", "اِنْزَلْتُ"},
{"past_2d", "اِنْزَلْتُمَا"},
{"past_2fp", "اِنْزَلْتُنَّ"},
{"past_2fs", "اِنْزَلْتِ"},
{"past_2mp", "اِنْزَلْتُمْ"},
{"past_2ms", "اِنْزَلْتَ"},
{"past_3fd", "اِنْزَالَتَا"},
{"past_3fp", "اِنْزَلْنَ"},
{"past_3fs", "اِنْزَالَتْ"},
{"past_3md", "اِنْزَالَا"},
{"past_3mp", "اِنْزَالُوا"},
{"past_3ms", "اِنْزَالَ"},
},
},
{
label = "اِنْقادَ (p344)", root = "قود", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْقَادَا"},
{"imp_2fp", "اِنْقَدْنَ"},
{"imp_2fs", "اِنْقَادِي"},
{"imp_2mp", "اِنْقَادُوا"},
{"imp_2ms", "اِنْقَدْ"},
{"ind_1p", "نَنْقَادُ"},
{"ind_1s", "أَنْقَادُ"},
{"ind_2d", "تَنْقَادَانِ"},
{"ind_2fp", "تَنْقَدْنَ"},
{"ind_2fs", "تَنْقَادِينَ"},
{"ind_2mp", "تَنْقَادُونَ"},
{"ind_2ms", "تَنْقَادُ"},
{"ind_3fd", "تَنْقَادَانِ"},
{"ind_3fp", "يَنْقَدْنَ"},
{"ind_3fs", "تَنْقَادُ"},
{"ind_3md", "يَنْقَادَانِ"},
{"ind_3mp", "يَنْقَادُونَ"},
{"ind_3ms", "يَنْقَادُ"},
{"past_1p", "اِنْقَدْنَا"},
{"past_1s", "اِنْقَدْتُ"},
{"past_2d", "اِنْقَدْتُمَا"},
{"past_2fp", "اِنْقَدْتُنَّ"},
{"past_2fs", "اِنْقَدْتِ"},
{"past_2mp", "اِنْقَدْتُمْ"},
{"past_2ms", "اِنْقَدْتَ"},
{"past_3fd", "اِنْقَادَتَا"},
{"past_3fp", "اِنْقَدْنَ"},
{"past_3fs", "اِنْقَادَتْ"},
{"past_3md", "اِنْقَادَا"},
{"past_3mp", "اِنْقَادُوا"},
{"past_3ms", "اِنْقَادَ"},
},
},
{
label = "اِنْبَرَى (p346)", root = "برو", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْبَرِيَا"},
{"imp_2fp", "اِنْبَرِينَ"},
{"imp_2fs", "اِنْبَرِي"},
{"imp_2mp", "اِنْبَرُوا"},
{"imp_2ms", "اِنْبَرِ"},
{"ind_1p", "نَنْبَرِي"},
{"ind_1s", "أَنْبَرِي"},
{"ind_2d", "تَنْبَرِيَانِ"},
{"ind_2fp", "تَنْبَرِينَ"},
{"ind_2fs", "تَنْبَرِينَ"},
{"ind_2mp", "تَنْبَرُونَ"},
{"ind_2ms", "تَنْبَرِي"},
{"ind_3fd", "تَنْبَرِيَانِ"},
{"ind_3fp", "يَنْبَرِينَ"},
{"ind_3fs", "تَنْبَرِي"},
{"ind_3md", "يَنْبَرِيَانِ"},
{"ind_3mp", "يَنْبَرُونَ"},
{"ind_3ms", "يَنْبَرِي"},
{"past_1p", "اِنْبَرَيْنَا"},
{"past_1s", "اِنْبَرَيْتُ"},
{"past_2d", "اِنْبَرَيْتُمَا"},
{"past_2fp", "اِنْبَرَيْتُنَّ"},
{"past_2fs", "اِنْبَرَيْتِ"},
{"past_2mp", "اِنْبَرَيْتُمْ"},
{"past_2ms", "اِنْبَرَيْتَ"},
{"past_3fd", "اِنْبَرَتَا"},
{"past_3fp", "اِنْبَرَيْنَ"},
{"past_3fs", "اِنْبَرَتْ"},
{"past_3md", "اِنْبَرَيَا"},
{"past_3mp", "اِنْبَرَوْا"},
{"past_3ms", "اِنْبَرَى"},
},
},
{
label = "اِنْجَلَى (p346)", root = "جلو", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْجَلِيَا"},
{"imp_2fp", "اِنْجَلِينَ"},
{"imp_2fs", "اِنْجَلِي"},
{"imp_2mp", "اِنْجَلُوا"},
{"imp_2ms", "اِنْجَلِ"},
{"ind_1p", "نَنْجَلِي"},
{"ind_1s", "أَنْجَلِي"},
{"ind_2d", "تَنْجَلِيَانِ"},
{"ind_2fp", "تَنْجَلِينَ"},
{"ind_2fs", "تَنْجَلِينَ"},
{"ind_2mp", "تَنْجَلُونَ"},
{"ind_2ms", "تَنْجَلِي"},
{"ind_3fd", "تَنْجَلِيَانِ"},
{"ind_3fp", "يَنْجَلِينَ"},
{"ind_3fs", "تَنْجَلِي"},
{"ind_3md", "يَنْجَلِيَانِ"},
{"ind_3mp", "يَنْجَلُونَ"},
{"ind_3ms", "يَنْجَلِي"},
{"past_1p", "اِنْجَلَيْنَا"},
{"past_1s", "اِنْجَلَيْتُ"},
{"past_2d", "اِنْجَلَيْتُمَا"},
{"past_2fp", "اِنْجَلَيْتُنَّ"},
{"past_2fs", "اِنْجَلَيْتِ"},
{"past_2mp", "اِنْجَلَيْتُمْ"},
{"past_2ms", "اِنْجَلَيْتَ"},
{"past_3fd", "اِنْجَلَتَا"},
{"past_3fp", "اِنْجَلَيْنَ"},
{"past_3fs", "اِنْجَلَتْ"},
{"past_3md", "اِنْجَلَيَا"},
{"past_3mp", "اِنْجَلَوْا"},
{"past_3ms", "اِنْجَلَى"},
},
},
{
label = "اِصْطَدَمَ (p353)", root = "صدم", wazn = "افتعل",
forms = {
{"imp_2d", "اِصْطَدِمَا"},
{"imp_2fp", "اِصْطَدِمْنَ"},
{"imp_2fs", "اِصْطَدِمِي"},
{"imp_2mp", "اِصْطَدِمُوا"},
{"imp_2ms", "اِصْطَدِمْ"},
{"ind_1p", "نَصْطَدِمُ"},
{"ind_1s", "أَصْطَدِمُ"},
{"ind_2d", "تَصْطَدِمَانِ"},
{"ind_2fp", "تَصْطَدِمْنَ"},
{"ind_2fs", "تَصْطَدِمِينَ"},
{"ind_2mp", "تَصْطَدِمُونَ"},
{"ind_2ms", "تَصْطَدِمُ"},
{"ind_3fd", "تَصْطَدِمَانِ"},
{"ind_3fp", "يَصْطَدِمْنَ"},
{"ind_3fs", "تَصْطَدِمُ"},
{"ind_3md", "يَصْطَدِمَانِ"},
{"ind_3mp", "يَصْطَدِمُونَ"},
{"ind_3ms", "يَصْطَدِمُ"},
{"past_1p", "اِصْطَدَمْنَا"},
{"past_1s", "اِصْطَدَمْتُ"},
{"past_2d", "اِصْطَدَمْتُمَا"},
{"past_2fp", "اِصْطَدَمْتُنَّ"},
{"past_2fs", "اِصْطَدَمْتِ"},
{"past_2mp", "اِصْطَدَمْتُمْ"},
{"past_2ms", "اِصْطَدَمْتَ"},
{"past_3fd", "اِصْطَدَمَتَا"},
{"past_3fp", "اِصْطَدَمْنَ"},
{"past_3fs", "اِصْطَدَمَتْ"},
{"past_3md", "اِصْطَدَمَا"},
{"past_3mp", "اِصْطَدَمُوا"},
{"past_3ms", "اِصْطَدَمَ"},
},
},
{
label = "اِئْتَجَّ (p357)", root = "ئجج", wazn = "افتعل",
forms = {
{"imp_2d", "اِئْتَجَّا"},
{"imp_2fp", "اِئْتَجِجْنَ"},
{"imp_2fs", "اِئْتَجِّي"},
{"imp_2mp", "اِئْتَجُّوا"},
{"imp_2ms", "اِئْتَجِجْ"},
{"ind_1p", "نَأْتَجُّ"},
{"ind_1s", "أَأْتَجُّ"},
{"ind_2d", "تَأْتَجَّانِ"},
{"ind_2fp", "تَأْتَجِجْنَ"},
{"ind_2fs", "تَأْتَجِّينَ"},
{"ind_2mp", "تَأْتَجُّونَ"},
{"ind_2ms", "تَأْتَجُّ"},
{"ind_3fd", "تَأْتَجَّانِ"},
{"ind_3fp", "يَأْتَجِجْنَ"},
{"ind_3fs", "تَأْتَجُّ"},
{"ind_3md", "يَأْتَجَّانِ"},
{"ind_3mp", "يَأْتَجُّونَ"},
{"ind_3ms", "يَأْتَجُّ"},
{"past_1p", "اِئْتَجَجْنَا"},
{"past_1s", "اِئْتَجَجْتُ"},
{"past_2d", "اِئْتَجَجْتُمَا"},
{"past_2fp", "اِئْتَجَجْتُنَّ"},
{"past_2fs", "اِئْتَجَجْتِ"},
{"past_2mp", "اِئْتَجَجْتُمْ"},
{"past_2ms", "اِئْتَجَجْتَ"},
{"past_3fd", "اِئْتَجَّتَا"},
{"past_3fp", "اِئْتَجَجْنَ"},
{"past_3fs", "اِئْتَجَّتْ"},
{"past_3md", "اِئْتَجَّا"},
{"past_3mp", "اِئْتَجُّوا"},
{"past_3ms", "اِئْتَجَّ"},
},
},
{
label = "اِئْتَصَى (p357)", root = "ئصو", wazn = "افتعل",
forms = {
{"imp_2d", "اِئْتَصِيَا"},
{"imp_2fp", "اِئْتَصِينَ"},
{"imp_2fs", "اِئْتَصِي"},
{"imp_2mp", "اِئْتَصُوا"},
{"imp_2ms", "اِئْتَصِ"},
{"ind_1p", "نَأْتَصِي"},
{"ind_1s", "أَأْتَصِي"},
{"ind_2d", "تَأْتَصِيَانِ"},
{"ind_2fp", "تَأْتَصِينَ"},
{"ind_2fs", "تَأْتَصِينَ"},
{"ind_2mp", "تَأْتَصُونَ"},
{"ind_2ms", "تَأْتَصِي"},
{"ind_3fd", "تَأْتَصِيَانِ"},
{"ind_3fp", "يَأْتَصِينَ"},
{"ind_3fs", "تَأْتَصِي"},
{"ind_3md", "يَأْتَصِيَانِ"},
{"ind_3mp", "يَأْتَصُونَ"},
{"ind_3ms", "يَأْتَصِي"},
{"past_1p", "اِئْتَصَيْنَا"},
{"past_1s", "اِئْتَصَيْتُ"},
{"past_2d", "اِئْتَصَيْتُمَا"},
{"past_2fp", "اِئْتَصَيْتُنَّ"},
{"past_2fs", "اِئْتَصَيْتِ"},
{"past_2mp", "اِئْتَصَيْتُمْ"},
{"past_2ms", "اِئْتَصَيْتَ"},
{"past_3fd", "اِئْتَصَتَا"},
{"past_3fp", "اِئْتَصَيْنَ"},
{"past_3fs", "اِئْتَصَتْ"},
{"past_3md", "اِئْتَصَيَا"},
{"past_3mp", "اِئْتَصَوْا"},
{"past_3ms", "اِئْتَصَى"},
},
},
{
label = "اِفْتَأَلَ (p360)", root = "فأل", wazn = "افتعل",
forms = {
{"imp_2d", "اِفْتَئِلَا"},
{"imp_2fp", "اِفْتَئِلْنَ"},
{"imp_2fs", "اِفْتَئِلِي"},
{"imp_2mp", "اِفْتَئِلُوا"},
{"imp_2ms", "اِفْتَئِلْ"},
{"ind_1p", "نَفْتَئِلُ"},
{"ind_1s", "أَفْتَئِلُ"},
{"ind_2d", "تَفْتَئِلَانِ"},
{"ind_2fp", "تَفْتَئِلْنَ"},
{"ind_2fs", "تَفْتَئِلِينَ"},
{"ind_2mp", "تَفْتَئِلُونَ"},
{"ind_2ms", "تَفْتَئِلُ"},
{"ind_3fd", "تَفْتَئِلَانِ"},
{"ind_3fp", "يَفْتَئِلْنَ"},
{"ind_3fs", "تَفْتَئِلُ"},
{"ind_3md", "يَفْتَئِلَانِ"},
{"ind_3mp", "يَفْتَئِلُونَ"},
{"ind_3ms", "يَفْتَئِلُ"},
{"past_1p", "اِفْتَأَلْنَا"},
{"past_1s", "اِفْتَأَلْتُ"},
{"past_2d", "اِفْتَأَلْتُمَا"},
{"past_2fp", "اِفْتَأَلْتُنَّ"},
{"past_2fs", "اِفْتَأَلْتِ"},
{"past_2mp", "اِفْتَأَلْتُمْ"},
{"past_2ms", "اِفْتَأَلْتَ"},
{"past_3fd", "اِفْتَأَلَتَا"},
{"past_3fp", "اِفْتَأَلْنَ"},
{"past_3fs", "اِفْتَأَلَتْ"},
{"past_3md", "اِفْتَأَلَا"},
{"past_3mp", "اِفْتَأَلُوا"},
{"past_3ms", "اِفْتَأَلَ"},
},
},
{
label = "اِجْتازَ (p364)", root = "جوز", wazn = "افتعل",
forms = {
{"imp_2d", "اِجْتَازَا"},
{"imp_2fp", "اِجْتَزْنَ"},
{"imp_2fs", "اِجْتَازِي"},
{"imp_2mp", "اِجْتَازُوا"},
{"imp_2ms", "اِجْتَزْ"},
{"ind_1p", "نَجْتَازُ"},
{"ind_1s", "أَجْتَازُ"},
{"ind_2d", "تَجْتَازَانِ"},
{"ind_2fp", "تَجْتَزْنَ"},
{"ind_2fs", "تَجْتَازِينَ"},
{"ind_2mp", "تَجْتَازُونَ"},
{"ind_2ms", "تَجْتَازُ"},
{"ind_3fd", "تَجْتَازَانِ"},
{"ind_3fp", "يَجْتَزْنَ"},
{"ind_3fs", "تَجْتَازُ"},
{"ind_3md", "يَجْتَازَانِ"},
{"ind_3mp", "يَجْتَازُونَ"},
{"ind_3ms", "يَجْتَازُ"},
{"past_1p", "اِجْتَزْنَا"},
{"past_1s", "اِجْتَزْتُ"},
{"past_2d", "اِجْتَزْتُمَا"},
{"past_2fp", "اِجْتَزْتُنَّ"},
{"past_2fs", "اِجْتَزْتِ"},
{"past_2mp", "اِجْتَزْتُمْ"},
{"past_2ms", "اِجْتَزْتَ"},
{"past_3fd", "اِجْتَازَتَا"},
{"past_3fp", "اِجْتَزْنَ"},
{"past_3fs", "اِجْتَازَتْ"},
{"past_3md", "اِجْتَازَا"},
{"past_3mp", "اِجْتَازُوا"},
{"past_3ms", "اِجْتَازَ"},
},
},
{
label = "اِرْتَمَى (p366)", root = "رمي", wazn = "افتعل",
forms = {
{"imp_2d", "اِرْتَمِيَا"},
{"imp_2fp", "اِرْتَمِينَ"},
{"imp_2fs", "اِرْتَمِي"},
{"imp_2mp", "اِرْتَمُوا"},
{"imp_2ms", "اِرْتَمِ"},
{"ind_1p", "نَرْتَمِي"},
{"ind_1s", "أَرْتَمِي"},
{"ind_2d", "تَرْتَمِيَانِ"},
{"ind_2fp", "تَرْتَمِينَ"},
{"ind_2fs", "تَرْتَمِينَ"},
{"ind_2mp", "تَرْتَمُونَ"},
{"ind_2ms", "تَرْتَمِي"},
{"ind_3fd", "تَرْتَمِيَانِ"},
{"ind_3fp", "يَرْتَمِينَ"},
{"ind_3fs", "تَرْتَمِي"},
{"ind_3md", "يَرْتَمِيَانِ"},
{"ind_3mp", "يَرْتَمُونَ"},
{"ind_3ms", "يَرْتَمِي"},
{"past_1p", "اِرْتَمَيْنَا"},
{"past_1s", "اِرْتَمَيْتُ"},
{"past_2d", "اِرْتَمَيْتُمَا"},
{"past_2fp", "اِرْتَمَيْتُنَّ"},
{"past_2fs", "اِرْتَمَيْتِ"},
{"past_2mp", "اِرْتَمَيْتُمْ"},
{"past_2ms", "اِرْتَمَيْتَ"},
{"past_3fd", "اِرْتَمَتَا"},
{"past_3fp", "اِرْتَمَيْنَ"},
{"past_3fs", "اِرْتَمَتْ"},
{"past_3md", "اِرْتَمَيَا"},
{"past_3mp", "اِرْتَمَوْا"},
{"past_3ms", "اِرْتَمَى"},
},
},
{
label = "اِقْتَضَى (p366)", root = "قضي", wazn = "افتعل",
forms = {
{"imp_2d", "اِقْتَضِيَا"},
{"imp_2fp", "اِقْتَضِينَ"},
{"imp_2fs", "اِقْتَضِي"},
{"imp_2mp", "اِقْتَضُوا"},
{"imp_2ms", "اِقْتَضِ"},
{"ind_1p", "نَقْتَضِي"},
{"ind_1s", "أَقْتَضِي"},
{"ind_2d", "تَقْتَضِيَانِ"},
{"ind_2fp", "تَقْتَضِينَ"},
{"ind_2fs", "تَقْتَضِينَ"},
{"ind_2mp", "تَقْتَضُونَ"},
{"ind_2ms", "تَقْتَضِي"},
{"ind_3fd", "تَقْتَضِيَانِ"},
{"ind_3fs", "تَقْتَضِي"},
{"ind_3md", "يَقْتَضِيَانِ"},
{"ind_3mp", "يَقْتَضُونَ"},
{"ind_3ms", "يَقْتَضِي"},
{"past_1p", "اِقْتَضَيْنَا"},
{"past_1s", "اِقْتَضَيْتُ"},
{"past_2d", "اِقْتَضَيْتُمَا"},
{"past_2fp", "اِقْتَضَيْتُنَّ"},
{"past_2fs", "اِقْتَضَيْتِ"},
{"past_2mp", "اِقْتَضَيْتُمْ"},
{"past_2ms", "اِقْتَضَيْتَ"},
{"past_3fd", "اِقْتَضَتَا"},
{"past_3fp", "اِقْتَضَيْنَ"},
{"past_3fs", "اِقْتَضَتْ"},
{"past_3md", "اِقْتَضَيَا"},
{"past_3mp", "اِقْتَضَوْا"},
{"past_3ms", "اِقْتَضَى"},
},
},
{
label = "اِرْتَأَى (p368)", root = "رأو", wazn = "افتعل",
forms = {
{"imp_2d", "اِرْتَئِيَا"},
{"imp_2fp", "اِرْتَئِينَ"},
{"imp_2fs", "اِرْتَئِي"},
{"imp_2mp", "اِرْتَؤُوا"},
{"imp_2ms", "اِرْتَإِ"},
{"ind_1p", "نَرْتَئِي"},
{"ind_1s", "أَرْتَئِي"},
{"ind_2d", "تَرْتَئِيَانِ"},
{"ind_2fp", "تَرْتَئِينَ"},
{"ind_2fs", "تَرْتَئِينَ"},
{"ind_2mp", "تَرْتَؤُونَ"},
{"ind_2ms", "تَرْتَئِي"},
{"ind_3fd", "تَرْتَئِيَانِ"},
{"ind_3fp", "يَرْتَئِينَ"},
{"ind_3fs", "تَرْتَئِي"},
{"ind_3md", "يَرْتَئِيَانِ"},
{"ind_3mp", "يَرْتَؤُونَ"},
{"ind_3ms", "يَرْتَئِي"},
{"past_1p", "اِرْتَأَيْنَا"},
{"past_1s", "اِرْتَأَيْتُ"},
{"past_2d", "اِرْتَأَيْتُمَا"},
{"past_2fp", "اِرْتَأَيْتُنَّ"},
{"past_2fs", "اِرْتَأَيْتِ"},
{"past_2mp", "اِرْتَأَيْتُمْ"},
{"past_2ms", "اِرْتَأَيْتَ"},
{"past_3fd", "اِرْتَأَتَا"},
{"past_3fp", "اِرْتَأَيْنَ"},
{"past_3fs", "اِرْتَأَتْ"},
{"past_3md", "اِرْتَأَيَا"},
{"past_3mp", "اِرْتَأَوْا"},
{"past_3ms", "اِرْتَأَى"},
},
},
{
label = "اِسْتَراحَ (p384)", root = "روح", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَرِيحَا"},
{"imp_2fp", "اِسْتَرِحْنَ"},
{"imp_2fs", "اِسْتَرِيحِي"},
{"imp_2mp", "اِسْتَرِيحُوا"},
{"imp_2ms", "اِسْتَرِحْ"},
{"ind_1p", "نَسْتَرِيحُ"},
{"ind_1s", "أَسْتَرِيحُ"},
{"ind_2d", "تَسْتَرِيحَانِ"},
{"ind_2fp", "تَسْتَرِحْنَ"},
{"ind_2fs", "تَسْتَرِيحِينَ"},
{"ind_2mp", "تَسْتَرِيحُونَ"},
{"ind_2ms", "تَسْتَرِيحُ"},
{"ind_3fd", "تَسْتَرِيحَانِ"},
{"ind_3fp", "يَسْتَرِحْنَ"},
{"ind_3fs", "تَسْتَرِيحُ"},
{"ind_3md", "يَسْتَرِيحَانِ"},
{"ind_3mp", "يَسْتَرِيحُونَ"},
{"ind_3ms", "يَسْتَرِيحُ"},
{"past_1p", "اِسْتَرَحْنَا"},
{"past_1s", "اِسْتَرَحْتُ"},
{"past_2d", "اِسْتَرَحْتُمَا"},
{"past_2fp", "اِسْتَرَحْتُنَّ"},
{"past_2fs", "اِسْتَرَحْتِ"},
{"past_2mp", "اِسْتَرَحْتُمْ"},
{"past_2ms", "اِسْتَرَحْتَ"},
{"past_3fd", "اِسْتَرَاحَتَا"},
{"past_3fp", "اِسْتَرَحْنَ"},
{"past_3fs", "اِسْتَرَاحَتْ"},
{"past_3md", "اِسْتَرَاحَا"},
{"past_3mp", "اِسْتَرَاحُوا"},
{"past_3ms", "اِسْتَرَاحَ"},
},
},
{
label = "اِسْتَفادَ (p384)", root = "فود", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَفِيدَا"},
{"imp_2fp", "اِسْتَفِدْنَ"},
{"imp_2fs", "اِسْتَفِيدِي"},
{"imp_2mp", "اِسْتَفِيدُوا"},
{"imp_2ms", "اِسْتَفِدْ"},
{"ind_1p", "نَسْتَفِيدُ"},
{"ind_1s", "أَسْتَفِيدُ"},
{"ind_2d", "تَسْتَفِيدَانِ"},
{"ind_2fp", "تَسْتَفِدْنَ"},
{"ind_2fs", "تَسْتَفِيدِينَ"},
{"ind_2mp", "تَسْتَفِيدُونَ"},
{"ind_2ms", "تَسْتَفِيدُ"},
{"ind_3fd", "تَسْتَفِيدَانِ"},
{"ind_3fp", "يَسْتَفِدْنَ"},
{"ind_3fs", "تَسْتَفِيدُ"},
{"ind_3md", "يَسْتَفِيدَانِ"},
{"ind_3mp", "يَسْتَفِيدُونَ"},
{"ind_3ms", "يَسْتَفِيدُ"},
{"past_1p", "اِسْتَفَدْنَا"},
{"past_1s", "اِسْتَفَدْتُ"},
{"past_2d", "اِسْتَفَدْتُمَا"},
{"past_2fp", "اِسْتَفَدْتُنَّ"},
{"past_2fs", "اِسْتَفَدْتِ"},
{"past_2mp", "اِسْتَفَدْتُمْ"},
{"past_2ms", "اِسْتَفَدْتَ"},
{"past_3fd", "اِسْتَفَادَتَا"},
{"past_3fp", "اِسْتَفَدْنَ"},
{"past_3fs", "اِسْتَفَادَتْ"},
{"past_3md", "اِسْتَفَادَا"},
{"past_3mp", "اِسْتَفَادُوا"},
{"past_3ms", "اِسْتَفَادَ"},
},
},
{
label = "اِسْتَضَاءَ (p385)", root = "ضوء", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَضِيئَا"},
{"imp_2fp", "اِسْتَضِئْنَ"},
{"imp_2fs", "اِسْتَضِيئِي"},
{"imp_2mp", "اِسْتَضِيؤُوا"},
{"imp_2ms", "اِسْتَضِئْ"},
{"ind_1p", "نَسْتَضِيءُ"},
{"ind_1s", "أَسْتَضِيءُ"},
{"ind_2d", "تَسْتَضِيئَانِ"},
{"ind_2fp", "تَسْتَضِئْنَ"},
{"ind_2fs", "تَسْتَضِيئِينَ"},
{"ind_2mp", "تَسْتَضِيؤُونَ"},
{"ind_2ms", "تَسْتَضِيءُ"},
{"ind_3fd", "تَسْتَضِيئَانِ"},
{"ind_3fp", "يَسْتَضِئْنَ"},
{"ind_3fs", "تَسْتَضِيءُ"},
{"ind_3md", "يَسْتَضِيئَانِ"},
{"ind_3mp", "يَسْتَضِيؤُونَ"},
{"ind_3ms", "يَسْتَضِيءُ"},
{"past_1p", "اِسْتَضَأْنَا"},
{"past_1s", "اِسْتَضَأْتُ"},
{"past_2d", "اِسْتَضَأْتُمَا"},
{"past_2fp", "اِسْتَضَأْتُنَّ"},
{"past_2fs", "اِسْتَضَأْتِ"},
{"past_2mp", "اِسْتَضَأْتُمْ"},
{"past_2ms", "اِسْتَضَأْتَ"},
{"past_3fd", "اِسْتَضَاءَتَا"},
{"past_3fp", "اِسْتَضَأْنَ"},
{"past_3fs", "اِسْتَضَاءَتْ"},
{"past_3md", "اِسْتَضَاءَا"},
{"past_3mp", "اِسْتَضَاؤُوا"},
{"past_3ms", "اِسْتَضَاءَ"},
},
},
{
label = "اِسْتَدْعَى (p386)", root = "دعو", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَدْعِيَا"},
{"imp_2fp", "اِسْتَدْعِينَ"},
{"imp_2fs", "اِسْتَدْعِي"},
{"imp_2mp", "اِسْتَدْعُوا"},
{"imp_2ms", "اِسْتَدْعِ"},
{"ind_1p", "نَسْتَدْعِي"},
{"ind_1s", "أَسْتَدْعِي"},
{"ind_2d", "تَسْتَدْعِيَانِ"},
{"ind_2fp", "تَسْتَدْعِينَ"},
{"ind_2fs", "تَسْتَدْعِينَ"},
{"ind_2mp", "تَسْتَدْعُونَ"},
{"ind_2ms", "تَسْتَدْعِي"},
{"ind_3fd", "تَسْتَدْعِيَانِ"},
{"ind_3fp", "يَسْتَدْعِينَ"},
{"ind_3fs", "تَسْتَدْعِي"},
{"ind_3md", "يَسْتَدْعِيَانِ"},
{"ind_3mp", "يَسْتَدْعُونَ"},
{"ind_3ms", "يَسْتَدْعِي"},
{"past_1p", "اِسْتَدْعَيْنَا"},
{"past_1s", "اِسْتَدْعَيْتُ"},
{"past_2d", "اِسْتَدْعَيْتُمَا"},
{"past_2fp", "اِسْتَدْعَيْتُنَّ"},
{"past_2fs", "اِسْتَدْعَيْتِ"},
{"past_2mp", "اِسْتَدْعَيْتُمْ"},
{"past_2ms", "اِسْتَدْعَيْتَ"},
{"past_3fd", "اِسْتَدْعَتَا"},
{"past_3fp", "اِسْتَدْعَيْنَ"},
{"past_3fs", "اِسْتَدْعَتْ"},
{"past_3md", "اِسْتَدْعَيَا"},
{"past_3mp", "اِسْتَدْعَوْا"},
{"past_3ms", "اِسْتَدْعَى"},
},
},
{
label = "اِسْتَعْصَى (p386)", root = "عصو", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَعْصِيَا"},
{"imp_2fp", "اِسْتَعْصِينَ"},
{"imp_2fs", "اِسْتَعْصِي"},
{"imp_2mp", "اِسْتَعْصُوا"},
{"imp_2ms", "اِسْتَعْصِ"},
{"ind_1p", "نَسْتَعْصِي"},
{"ind_1s", "أَسْتَعْصِي"},
{"ind_2d", "تَسْتَعْصِيَانِ"},
{"ind_2fp", "تَسْتَعْصِينَ"},
{"ind_2fs", "تَسْتَعْصِينَ"},
{"ind_2mp", "تَسْتَعْصُونَ"},
{"ind_2ms", "تَسْتَعْصِي"},
{"ind_3fd", "تَسْتَعْصِيَانِ"},
{"ind_3fp", "يَسْتَعْصِينَ"},
{"ind_3fs", "تَسْتَعْصِي"},
{"ind_3md", "يَسْتَعْصِيَانِ"},
{"ind_3mp", "يَسْتَعْصُونَ"},
{"ind_3ms", "يَسْتَعْصِي"},
{"past_1p", "اِسْتَعْصَيْنَا"},
{"past_1s", "اِسْتَعْصَيْتُ"},
{"past_2d", "اِسْتَعْصَيْتُمَا"},
{"past_2fp", "اِسْتَعْصَيْتُنَّ"},
{"past_2fs", "اِسْتَعْصَيْتِ"},
{"past_2mp", "اِسْتَعْصَيْتُمْ"},
{"past_2ms", "اِسْتَعْصَيْتَ"},
{"past_3fd", "اِسْتَعْصَتَا"},
{"past_3fp", "اِسْتَعْصَيْنَ"},
{"past_3fs", "اِسْتَعْصَتْ"},
{"past_3md", "اِسْتَعْصَيَا"},
{"past_3mp", "اِسْتَعْصَوْا"},
{"past_3ms", "اِسْتَعْصَى"},
},
},
{
label = "اِحْدَوْدَبَ (p394)", root = "حدب", wazn = "افعوعل",
forms = {
{"imp_2d", "اِحْدَوْدِبَا"},
{"imp_2fp", "اِحْدَوْدِبْنَ"},
{"imp_2fs", "اِحْدَوْدِبِي"},
{"imp_2mp", "اِحْدَوْدِبُوا"},
{"imp_2ms", "اِحْدَوْدِبْ"},
{"ind_1p", "نَحْدَوْدِبُ"},
{"ind_1s", "أَحْدَوْدِبُ"},
{"ind_2d", "تَحْدَوْدِبَانِ"},
{"ind_2fp", "تَحْدَوْدِبْنَ"},
{"ind_2fs", "تَحْدَوْدِبِينَ"},
{"ind_2mp", "تَحْدَوْدِبُونَ"},
{"ind_2ms", "تَحْدَوْدِبُ"},
{"ind_3fd", "تَحْدَوْدِبَانِ"},
{"ind_3fp", "يَحْدَوْدِبْنَ"},
{"ind_3fs", "تَحْدَوْدِبُ"},
{"ind_3md", "يَحْدَوْدِبَانِ"},
{"ind_3mp", "يَحْدَوْدِبُونَ"},
{"ind_3ms", "يَحْدَوْدِبُ"},
{"past_1p", "اِحْدَوْدَبْنَا"},
{"past_1s", "اِحْدَوْدَبْتُ"},
{"past_2d", "اِحْدَوْدَبْتُمَا"},
{"past_2fp", "اِحْدَوْدَبْتُنَّ"},
{"past_2fs", "اِحْدَوْدَبْتِ"},
{"past_2mp", "اِحْدَوْدَبْتُمْ"},
{"past_2ms", "اِحْدَوْدَبْتَ"},
{"past_3fd", "اِحْدَوْدَبَتَا"},
{"past_3fp", "اِحْدَوْدَبْنَ"},
{"past_3fs", "اِحْدَوْدَبَتْ"},
{"past_3md", "اِحْدَوْدَبَا"},
{"past_3mp", "اِحْدَوْدَبُوا"},
{"past_3ms", "اِحْدَوْدَبَ"},
},
},
{
label = "لَأْلَأَ (p404)", root = "لألأ", wazn = "فعلل",
forms = {
{"imp_2d", "لَأْلِئَا"},
{"imp_2fp", "لَأْلِئْنَ"},
{"imp_2fs", "لَأْلِئِي"},
{"imp_2mp", "لَأْلِئُوا"},
{"imp_2ms", "لَأْلِئْ"},
{"ind_1p", "نُلَأْلِئُ"},
{"ind_1s", "أُلَأْلِئُ"},
{"ind_2d", "تُلَأْلِئَانِ"},
{"ind_2fp", "تُلَأْلِئْنَ"},
{"ind_2fs", "تُلَأْلِئِينَ"},
{"ind_2mp", "تُلَأْلِئُونَ"},
{"ind_2ms", "تُلَأْلِئُ"},
{"ind_3fd", "تُلَأْلِئَانِ"},
{"ind_3fp", "يُلَأْلِئْنَ"},
{"ind_3fs", "تُلَأْلِئُ"},
{"ind_3md", "يُلَأْلِئَانِ"},
{"ind_3mp", "يُلَأْلِئُونَ"},
{"ind_3ms", "يُلَأْلِئُ"},
{"past_1p", "لَأْلَأْنَا"},
{"past_1s", "لَأْلَأْتُ"},
{"past_2d", "لَأْلَأْتُمَا"},
{"past_2fp", "لَأْلَأْتُنَّ"},
{"past_2fs", "لَأْلَأْتِ"},
{"past_2mp", "لَأْلَأْتُمْ"},
{"past_2ms", "لَأْلَأْتَ"},
{"past_3fd", "لَأْلَأَتَا"},
{"past_3fp", "لَأْلَأْنَ"},
{"past_3fs", "لَأْلَأَتْ"},
{"past_3md", "لَأْلَآ"},
{"past_3mp", "لَأْلَؤُوا"},
{"past_3ms", "لَأْلَأَ"},
},
},
{
label = "رَأْبَلَ (p405)", root = "رأبل", wazn = "فعلل",
forms = {
{"imp_2d", "رَأْبِلَا"},
{"imp_2fp", "رَأْبِلْنَ"},
{"imp_2fs", "رَأْبِلِي"},
{"imp_2mp", "رَأْبِلُوا"},
{"imp_2ms", "رَأْبِلْ"},
{"ind_1p", "نُرَأْبِلُ"},
{"ind_1s", "أُرَأْبِلُ"},
{"ind_2d", "تُرَأْبِلَانِ"},
{"ind_2fp", "تُرَأْبِلْنَ"},
{"ind_2fs", "تُرَأْبِلِينَ"},
{"ind_2mp", "تُرَأْبِلُونَ"},
{"ind_2ms", "تُرَأْبِلُ"},
{"ind_3fd", "تُرَأْبِلَانِ"},
{"ind_3fp", "يُرَأْبِلْنَ"},
{"ind_3fs", "تُرَأْبِلُ"},
{"ind_3md", "يُرَأْبِلَانِ"},
{"ind_3mp", "يُرَأْبِلُونَ"},
{"ind_3ms", "يُرَأْبِلُ"},
{"past_1p", "رَأْبَلْنَا"},
{"past_1s", "رَأْبَلْتُ"},
{"past_2d", "رَأْبَلْتُمَا"},
{"past_2fp", "رَأْبَلْتُنَّ"},
{"past_2fs", "رَأْبَلْتِ"},
{"past_2mp", "رَأْبَلْتُمْ"},
{"past_2ms", "رَأْبَلْتَ"},
{"past_3fd", "رَأْبَلَتَا"},
{"past_3fp", "رَأْبَلْنَ"},
{"past_3fs", "رَأْبَلَتْ"},
{"past_3md", "رَأْبَلَا"},
{"past_3mp", "رَأْبَلُوا"},
{"past_3ms", "رَأْبَلَ"},
},
},
{
label = "دَوْزَنَ (p408)", root = "دوزن", wazn = "فعلل",
forms = {
{"imp_2d", "دَوْزِنَا"},
{"imp_2fp", "دَوْزِنَّ"},
{"imp_2fs", "دَوْزِنِي"},
{"imp_2mp", "دَوْزِنُوا"},
{"imp_2ms", "دَوْزِنْ"},
{"ind_1p", "نُدَوْزِنُ"},
{"ind_1s", "أُدَوْزِنُ"},
{"ind_2d", "تُدَوْزِنَانِ"},
{"ind_2fp", "تُدَوْزِنَّ"},
{"ind_2fs", "تُدَوْزِنِينَ"},
{"ind_2mp", "تُدَوْزِنُونَ"},
{"ind_2ms", "تُدَوْزِنُ"},
{"ind_3fd", "تُدَوْزِنَانِ"},
{"ind_3fp", "يُدَوْزِنَّ"},
{"ind_3fs", "تُدَوْزِنُ"},
{"ind_3md", "يُدَوْزِنَانِ"},
{"ind_3mp", "يُدَوْزِنُونَ"},
{"ind_3ms", "يُدَوْزِنُ"},
{"past_1p", "دَوْزَنَّا"},
{"past_1s", "دَوْزَنْتُ"},
{"past_2d", "دَوْزَنْتُمَا"},
{"past_2fp", "دَوْزَنْتُنَّ"},
{"past_2fs", "دَوْزَنْتِ"},
{"past_2mp", "دَوْزَنْتُمْ"},
{"past_2ms", "دَوْزَنْتَ"},
{"past_3fd", "دَوْزَنَتَا"},
{"past_3fp", "دَوْزَنَّ"},
{"past_3fs", "دَوْزَنَتْ"},
{"past_3md", "دَوْزَنَا"},
{"past_3mp", "دَوْزَنُوا"},
{"past_3ms", "دَوْزَنَ"},
},
},
{
label = "هَرْوَزَ (p409)", root = "هروز", wazn = "فعلل",
forms = {
{"imp_2d", "هَرْوِزَا"},
{"imp_2fp", "هَرْوِزْنَ"},
{"imp_2fs", "هَرْوِزِي"},
{"imp_2mp", "هَرْوِزُوا"},
{"imp_2ms", "هَرْوِزْ"},
{"ind_1p", "نُهَرْوِزُ"},
{"ind_1s", "أُهَرْوِزُ"},
{"ind_2d", "تُهَرْوِزَانِ"},
{"ind_2fp", "تُهَرْوِزْنَ"},
{"ind_2fs", "تُهَرْوِزِينَ"},
{"ind_2mp", "تُهَرْوِزُونَ"},
{"ind_2ms", "تُهَرْوِزُ"},
{"ind_3fd", "تُهَرْوِزَانِ"},
{"ind_3fp", "يُهَرْوِزْنَ"},
{"ind_3fs", "تُهَرْوِزُ"},
{"ind_3md", "يُهَرْوِزَانِ"},
{"ind_3mp", "يُهَرْوِزُونَ"},
{"ind_3ms", "يُهَرْوِزُ"},
{"past_1p", "هَرْوَزْنَا"},
{"past_1s", "هَرْوَزْتُ"},
{"past_2d", "هَرْوَزْتُمَا"},
{"past_2fp", "هَرْوَزْتُنَّ"},
{"past_2fs", "هَرْوَزْتِ"},
{"past_2mp", "هَرْوَزْتُمْ"},
{"past_2ms", "هَرْوَزْتَ"},
{"past_3fd", "هَرْوَزَتَا"},
{"past_3fp", "هَرْوَزْنَ"},
{"past_3fs", "هَرْوَزَتْ"},
{"past_3md", "هَرْوَزَا"},
{"past_3mp", "هَرْوَزُوا"},
{"past_3ms", "هَرْوَزَ"},
},
},
{
label = "دَهْدَى (p409)", root = "دهدو", wazn = "فعلل",
forms = {
{"imp_2d", "دَهْدِيَا"},
{"imp_2fp", "دَهْدِينَ"},
{"imp_2fs", "دَهْدِي"},
{"imp_2mp", "دَهْدُوا"},
{"imp_2ms", "دَهْدِ"},
{"ind_1p", "نُدَهْدِي"},
{"ind_1s", "أُدَهْدِي"},
{"ind_2d", "تُدَهْدِيَانِ"},
{"ind_2fp", "تُدَهْدِينَ"},
{"ind_2fs", "تُدَهْدِينَ"},
{"ind_2mp", "تُدَهْدُونَ"},
{"ind_2ms", "تُدَهْدِي"},
{"ind_3fd", "تُدَهْدِيَانِ"},
{"ind_3fp", "يُدَهْدِينَ"},
{"ind_3fs", "تُدَهْدِي"},
{"ind_3md", "يُدَهْدِيَانِ"},
{"ind_3mp", "يُدَهْدُونَ"},
{"ind_3ms", "يُدَهْدِي"},
{"past_1p", "دَهْدَيْنَا"},
{"past_1s", "دَهْدَيْتُ"},
{"past_2d", "دَهْدَيْتُمَا"},
{"past_2fp", "دَهْدَيْتُنَّ"},
{"past_2fs", "دَهْدَيْتِ"},
{"past_2mp", "دَهْدَيْتُمْ"},
{"past_2ms", "دَهْدَيْتَ"},
{"past_3fd", "دَهْدَتَا"},
{"past_3fp", "دَهْدَيْنَ"},
{"past_3fs", "دَهْدَتْ"},
{"past_3md", "دَهْدَيَا"},
{"past_3mp", "دَهْدَوْا"},
{"past_3ms", "دَهْدَى"},
},
},
{
label = "تَرَعْرَعَ (p418)", root = "رعرع", wazn = "تفعلل",
forms = {
{"imp_2d", "تَرَعْرَعَا"},
{"imp_2fp", "تَرَعْرَعْنَ"},
{"imp_2fs", "تَرَعْرَعِي"},
{"imp_2mp", "تَرَعْرَعُوا"},
{"imp_2ms", "تَرَعْرَعْ"},
{"ind_1p", "نَتَرَعْرَعُ"},
{"ind_1s", "أَتَرَعْرَعُ"},
{"ind_2d", "تَتَرَعْرَعَانِ"},
{"ind_2fp", "تَتَرَعْرَعْنَ"},
{"ind_2fs", "تَتَرَعْرَعِينَ"},
{"ind_2mp", "تَتَرَعْرَعُونَ"},
{"ind_2ms", "تَتَرَعْرَعُ"},
{"ind_3fd", "تَتَرَعْرَعَانِ"},
{"ind_3fp", "يَتَرَعْرَعْنَ"},
{"ind_3fs", "تَتَرَعْرَعُ"},
{"ind_3md", "يَتَرَعْرَعَانِ"},
{"ind_3mp", "يَتَرَعْرَعُونَ"},
{"ind_3ms", "يَتَرَعْرَعُ"},
{"past_1p", "تَرَعْرَعْنَا"},
{"past_1s", "تَرَعْرَعْتُ"},
{"past_2d", "تَرَعْرَعْتُمَا"},
{"past_2fp", "تَرَعْرَعْتُنَّ"},
{"past_2fs", "تَرَعْرَعْتِ"},
{"past_2mp", "تَرَعْرَعْتُمْ"},
{"past_2ms", "تَرَعْرَعْتَ"},
{"past_3fd", "تَرَعْرَعَتَا"},
{"past_3fp", "تَرَعْرَعْنَ"},
{"past_3fs", "تَرَعْرَعَتْ"},
{"past_3md", "تَرَعْرَعَا"},
{"past_3mp", "تَرَعْرَعُوا"},
{"past_3ms", "تَرَعْرَعَ"},
},
},
}
nad3ujx7pm2iis8ms8nfpyqex0zs6fa
1159092
1159034
2026-09-10T19:34:23Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159092
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 12 من 16.
return {
{
label = "أَحْصَى (p299)", root = "حصو", wazn = "أفعل",
forms = {
{"imp_2d", "أَحْصِيَا"},
{"imp_2fp", "أَحْصِينَ"},
{"imp_2fs", "أَحْصِي"},
{"imp_2mp", "أَحْصُوا"},
{"imp_2ms", "أَحْصِ"},
{"ind_1p", "نُحْصِي"},
{"ind_1s", "أُحْصِي"},
{"ind_2d", "تُحْصِيَانِ"},
{"ind_2fp", "تُحْصِينَ"},
{"ind_2fs", "تُحْصِينَ"},
{"ind_2mp", "تُحْصُونَ"},
{"ind_2ms", "تُحْصِي"},
{"ind_3fd", "تُحْصِيَانِ"},
{"ind_3fp", "يُحْصِينَ"},
{"ind_3fs", "تُحْصِي"},
{"ind_3md", "يُحْصِيَانِ"},
{"ind_3mp", "يُحْصُونَ"},
{"ind_3ms", "يُحْصِي"},
{"past_1p", "أَحْصَيْنَا"},
{"past_1s", "أَحْصَيْتُ"},
{"past_2d", "أَحْصَيْتُمَا"},
{"past_2fp", "أَحْصَيْتُنَّ"},
{"past_2fs", "أَحْصَيْتِ"},
{"past_2mp", "أَحْصَيْتُمْ"},
{"past_2ms", "أَحْصَيْتَ"},
{"past_3fd", "أَحْصَتَا"},
{"past_3fp", "أَحْصَيْنَ"},
{"past_3fs", "أَحْصَتْ"},
{"past_3md", "أَحْصَيَا"},
{"past_3mp", "أَحْصَوْا"},
{"past_3ms", "أَحْصَى"},
},
},
{
label = "أَفْأَى (p300)", root = "فأو", wazn = "أفعل",
forms = {
{"imp_2d", "أَفْئِيَا"},
{"imp_2fp", "أَفْئِينَ"},
{"imp_2fs", "أَفْئِي"},
{"imp_2mp", "أَفْؤُوا"},
{"imp_2ms", "أَفْإِ"},
{"ind_1p", "نُفْئِي"},
{"ind_1s", "أُفْئِي"},
{"ind_2d", "تُفْئِيَانِ"},
{"ind_2fp", "تُفْئِينَ"},
{"ind_2fs", "تُفْئِينَ"},
{"ind_2mp", "تُفْؤُونَ"},
{"ind_2ms", "تُفْئِي"},
{"ind_3fd", "تُفْئِيَانِ"},
{"ind_3fp", "يُفْئِينَ"},
{"ind_3fs", "تُفْئِي"},
{"ind_3md", "يُفْئِيَانِ"},
{"ind_3mp", "يُفْؤُونَ"},
{"ind_3ms", "يُفْئِي"},
{"past_1p", "أَفْأَيْنَا"},
{"past_1s", "أَفْأَيْتُ"},
{"past_2d", "أَفْأَيْتُمَا"},
{"past_2fp", "أَفْأَيْتُنَّ"},
{"past_2fs", "أَفْأَيْتِ"},
{"past_2mp", "أَفْأَيْتُمْ"},
{"past_2ms", "أَفْأَيْتَ"},
{"past_3fd", "أَفْأَتَا"},
{"past_3fp", "أَفْأَيْنَ"},
{"past_3fs", "أَفْأَتْ"},
{"past_3md", "أَفْأَيَا"},
{"past_3mp", "أَفْأَوْا"},
{"past_3ms", "أَفْأَى"},
},
},
{
label = "أَوْصَى (p301)", root = "وصي", wazn = "أفعل",
forms = {
{"imp_2d", "أَوْصِيَا"},
{"imp_2fp", "أَوْصِينَ"},
{"imp_2fs", "أَوْصِي"},
{"imp_2mp", "أَوْصُوا"},
{"imp_2ms", "أَوْصِ"},
{"ind_1p", "نُوصِي"},
{"ind_1s", "أُوصِي"},
{"ind_2d", "تُوصِيَانِ"},
{"ind_2fp", "تُوصِينَ"},
{"ind_2fs", "تُوصِينَ"},
{"ind_2mp", "تُوصُونَ"},
{"ind_2ms", "تُوصِي"},
{"ind_3fd", "تُوصِيَانِ"},
{"ind_3fp", "يُوصِينَ"},
{"ind_3fs", "تُوصِي"},
{"ind_3md", "يُوصِيَانِ"},
{"ind_3mp", "يُوصُونَ"},
{"ind_3ms", "يُوصِي"},
{"past_1p", "أَوْصَيْنَا"},
{"past_1s", "أَوْصَيْتُ"},
{"past_2d", "أَوْصَيْتُمَا"},
{"past_2fp", "أَوْصَيْتُنَّ"},
{"past_2fs", "أَوْصَيْتِ"},
{"past_2mp", "أَوْصَيْتُمْ"},
{"past_2ms", "أَوْصَيْتَ"},
{"past_3fd", "أَوْصَتَا"},
{"past_3fp", "أَوْصَيْنَ"},
{"past_3fs", "أَوْصَتْ"},
{"past_3md", "أَوْصَيَا"},
{"past_3mp", "أَوْصَوْا"},
{"past_3ms", "أَوْصَى"},
},
},
{
label = "تَلاقَى (p333)", root = "لقو", wazn = "تفاعل",
forms = {
{"imp_2d", "تَلَاقَيَا"},
{"imp_2fp", "تَلَاقَيْنَ"},
{"imp_2fs", "تَلَاقَيْ"},
{"imp_2mp", "تَلَاقَوْا"},
{"imp_2ms", "تَلَاقَ"},
{"ind_1p", "نَتَلَاقَى"},
{"ind_1s", "أَتَلَاقَى"},
{"ind_2d", "تَتَلَاقَيَانِ"},
{"ind_2fp", "تَتَلَاقَيْنَ"},
{"ind_2fs", "تَتَلَاقَيْنَ"},
{"ind_2mp", "تَتَلَاقَوْنَ"},
{"ind_2ms", "تَتَلَاقَى"},
{"ind_3fd", "تَتَلَاقَيَانِ"},
{"ind_3fp", "يَتَلَاقَيْنَ"},
{"ind_3fs", "تَتَلَاقَى"},
{"ind_3md", "يَتَلَاقَيَانِ"},
{"ind_3mp", "يَتَلَاقَوْنَ"},
{"ind_3ms", "يَتَلَاقَى"},
{"past_1p", "تَلَاقَيْنَا"},
{"past_1s", "تَلَاقَيْتُ"},
{"past_2d", "تَلَاقَيْتُمَا"},
{"past_2fp", "تَلَاقَيْتُنَّ"},
{"past_2fs", "تَلَاقَيْتِ"},
{"past_2mp", "تَلَاقَيْتُمْ"},
{"past_2ms", "تَلَاقَيْتَ"},
{"past_3fd", "تَلَاقَتَا"},
{"past_3fp", "تَلَاقَيْنَ"},
{"past_3fs", "تَلَاقَتْ"},
{"past_3md", "تَلَاقَيَا"},
{"past_3mp", "تَلَاقَوْا"},
{"past_3ms", "تَلَاقَى"},
},
},
{
label = "تَبارَى (p333)", root = "برو", wazn = "تفاعل",
forms = {
{"imp_2d", "تَبَارَيَا"},
{"imp_2fp", "تَبَارَيْنَ"},
{"imp_2fs", "تَبَارَيْ"},
{"imp_2mp", "تَبَارَوْا"},
{"imp_2ms", "تَبَارَ"},
{"ind_1p", "نَتَبَارَى"},
{"ind_1s", "أَتَبَارَى"},
{"ind_2d", "تَتَبَارَيَانِ"},
{"ind_2fp", "تَتَبَارَيْنَ"},
{"ind_2fs", "تَتَبَارَيْنَ"},
{"ind_2mp", "تَتَبَارَوْنَ"},
{"ind_2ms", "تَتَبَارَى"},
{"ind_3fd", "تَتَبَارَيَانِ"},
{"ind_3fp", "يَتَبَارَيْنَ"},
{"ind_3fs", "تَتَبَارَى"},
{"ind_3md", "يَتَبَارَيَانِ"},
{"ind_3mp", "يَتَبَارَوْنَ"},
{"ind_3ms", "يَتَبَارَى"},
{"past_1p", "تَبَارَيْنَا"},
{"past_1s", "تَبَارَيْتُ"},
{"past_2d", "تَبَارَيْتُمَا"},
{"past_2fp", "تَبَارَيْتُنَّ"},
{"past_2fs", "تَبَارَيْتِ"},
{"past_2mp", "تَبَارَيْتُمْ"},
{"past_2ms", "تَبَارَيْتَ"},
{"past_3fd", "تَبَارَتَا"},
{"past_3fp", "تَبَارَيْنَ"},
{"past_3fs", "تَبَارَتْ"},
{"past_3md", "تَبَارَيَا"},
{"past_3mp", "تَبَارَوْا"},
{"past_3ms", "تَبَارَى"},
},
},
{
label = "تَدَاوَى (p336)", root = "دوي", wazn = "تفاعل",
forms = {
{"imp_2d", "تَدَاوَيَا"},
{"imp_2fp", "تَدَاوَيْنَ"},
{"imp_2fs", "تَدَاوَيْ"},
{"imp_2mp", "تَدَاوَوْا"},
{"imp_2ms", "تَدَاوَ"},
{"ind_1p", "نَتَدَاوَى"},
{"ind_1s", "أَتَدَاوَى"},
{"ind_2d", "تَتَدَاوَيَانِ"},
{"ind_2fp", "تَتَدَاوَيْنَ"},
{"ind_2fs", "تَتَدَاوَيْنَ"},
{"ind_2mp", "تَتَدَاوَوْنَ"},
{"ind_2ms", "تَتَدَاوَى"},
{"ind_3fd", "تَتَدَاوَيَانِ"},
{"ind_3fp", "يَتَدَاوَيْنَ"},
{"ind_3fs", "تَتَدَاوَى"},
{"ind_3md", "يَتَدَاوَيَانِ"},
{"ind_3mp", "يَتَدَاوَوْنَ"},
{"ind_3ms", "يَتَدَاوَى"},
{"past_1p", "تَدَاوَيْنَا"},
{"past_1s", "تَدَاوَيْتُ"},
{"past_2d", "تَدَاوَيْتُمَا"},
{"past_2fp", "تَدَاوَيْتُنَّ"},
{"past_2fs", "تَدَاوَيْتِ"},
{"past_2mp", "تَدَاوَيْتُمْ"},
{"past_2ms", "تَدَاوَيْتَ"},
{"past_3fd", "تَدَاوَتَا"},
{"past_3fp", "تَدَاوَيْنَ"},
{"past_3fs", "تَدَاوَتْ"},
{"past_3md", "تَدَاوَيَا"},
{"past_3mp", "تَدَاوَوْا"},
{"past_3ms", "تَدَاوَى"},
},
},
{
label = "اِنْزالَ (p344)", root = "زول", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْزَالَا"},
{"imp_2fp", "اِنْزَلْنَ"},
{"imp_2fs", "اِنْزَالِي"},
{"imp_2mp", "اِنْزَالُوا"},
{"imp_2ms", "اِنْزَلْ"},
{"ind_1p", "نَنْزَالُ"},
{"ind_1s", "أَنْزَالُ"},
{"ind_2d", "تَنْزَالَانِ"},
{"ind_2fp", "تَنْزَلْنَ"},
{"ind_2fs", "تَنْزَالِينَ"},
{"ind_2mp", "تَنْزَالُونَ"},
{"ind_2ms", "تَنْزَالُ"},
{"ind_3fd", "تَنْزَالَانِ"},
{"ind_3fp", "يَنْزَلْنَ"},
{"ind_3fs", "تَنْزَالُ"},
{"ind_3md", "يَنْزَالَانِ"},
{"ind_3mp", "يَنْزَالُونَ"},
{"ind_3ms", "يَنْزَالُ"},
{"past_1p", "اِنْزَلْنَا"},
{"past_1s", "اِنْزَلْتُ"},
{"past_2d", "اِنْزَلْتُمَا"},
{"past_2fp", "اِنْزَلْتُنَّ"},
{"past_2fs", "اِنْزَلْتِ"},
{"past_2mp", "اِنْزَلْتُمْ"},
{"past_2ms", "اِنْزَلْتَ"},
{"past_3fd", "اِنْزَالَتَا"},
{"past_3fp", "اِنْزَلْنَ"},
{"past_3fs", "اِنْزَالَتْ"},
{"past_3md", "اِنْزَالَا"},
{"past_3mp", "اِنْزَالُوا"},
{"past_3ms", "اِنْزَالَ"},
},
},
{
label = "اِنْقادَ (p344)", root = "قود", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْقَادَا"},
{"imp_2fp", "اِنْقَدْنَ"},
{"imp_2fs", "اِنْقَادِي"},
{"imp_2mp", "اِنْقَادُوا"},
{"imp_2ms", "اِنْقَدْ"},
{"ind_1p", "نَنْقَادُ"},
{"ind_1s", "أَنْقَادُ"},
{"ind_2d", "تَنْقَادَانِ"},
{"ind_2fp", "تَنْقَدْنَ"},
{"ind_2fs", "تَنْقَادِينَ"},
{"ind_2mp", "تَنْقَادُونَ"},
{"ind_2ms", "تَنْقَادُ"},
{"ind_3fd", "تَنْقَادَانِ"},
{"ind_3fp", "يَنْقَدْنَ"},
{"ind_3fs", "تَنْقَادُ"},
{"ind_3md", "يَنْقَادَانِ"},
{"ind_3mp", "يَنْقَادُونَ"},
{"ind_3ms", "يَنْقَادُ"},
{"past_1p", "اِنْقَدْنَا"},
{"past_1s", "اِنْقَدْتُ"},
{"past_2d", "اِنْقَدْتُمَا"},
{"past_2fp", "اِنْقَدْتُنَّ"},
{"past_2fs", "اِنْقَدْتِ"},
{"past_2mp", "اِنْقَدْتُمْ"},
{"past_2ms", "اِنْقَدْتَ"},
{"past_3fd", "اِنْقَادَتَا"},
{"past_3fp", "اِنْقَدْنَ"},
{"past_3fs", "اِنْقَادَتْ"},
{"past_3md", "اِنْقَادَا"},
{"past_3mp", "اِنْقَادُوا"},
{"past_3ms", "اِنْقَادَ"},
},
},
{
label = "اِنْبَرَى (p346)", root = "برو", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْبَرِيَا"},
{"imp_2fp", "اِنْبَرِينَ"},
{"imp_2fs", "اِنْبَرِي"},
{"imp_2mp", "اِنْبَرُوا"},
{"imp_2ms", "اِنْبَرِ"},
{"ind_1p", "نَنْبَرِي"},
{"ind_1s", "أَنْبَرِي"},
{"ind_2d", "تَنْبَرِيَانِ"},
{"ind_2fp", "تَنْبَرِينَ"},
{"ind_2fs", "تَنْبَرِينَ"},
{"ind_2mp", "تَنْبَرُونَ"},
{"ind_2ms", "تَنْبَرِي"},
{"ind_3fd", "تَنْبَرِيَانِ"},
{"ind_3fp", "يَنْبَرِينَ"},
{"ind_3fs", "تَنْبَرِي"},
{"ind_3md", "يَنْبَرِيَانِ"},
{"ind_3mp", "يَنْبَرُونَ"},
{"ind_3ms", "يَنْبَرِي"},
{"past_1p", "اِنْبَرَيْنَا"},
{"past_1s", "اِنْبَرَيْتُ"},
{"past_2d", "اِنْبَرَيْتُمَا"},
{"past_2fp", "اِنْبَرَيْتُنَّ"},
{"past_2fs", "اِنْبَرَيْتِ"},
{"past_2mp", "اِنْبَرَيْتُمْ"},
{"past_2ms", "اِنْبَرَيْتَ"},
{"past_3fd", "اِنْبَرَتَا"},
{"past_3fp", "اِنْبَرَيْنَ"},
{"past_3fs", "اِنْبَرَتْ"},
{"past_3md", "اِنْبَرَيَا"},
{"past_3mp", "اِنْبَرَوْا"},
{"past_3ms", "اِنْبَرَى"},
},
},
{
label = "اِنْجَلَى (p346)", root = "جلو", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْجَلِيَا"},
{"imp_2fp", "اِنْجَلِينَ"},
{"imp_2fs", "اِنْجَلِي"},
{"imp_2mp", "اِنْجَلُوا"},
{"imp_2ms", "اِنْجَلِ"},
{"ind_1p", "نَنْجَلِي"},
{"ind_1s", "أَنْجَلِي"},
{"ind_2d", "تَنْجَلِيَانِ"},
{"ind_2fp", "تَنْجَلِينَ"},
{"ind_2fs", "تَنْجَلِينَ"},
{"ind_2mp", "تَنْجَلُونَ"},
{"ind_2ms", "تَنْجَلِي"},
{"ind_3fd", "تَنْجَلِيَانِ"},
{"ind_3fp", "يَنْجَلِينَ"},
{"ind_3fs", "تَنْجَلِي"},
{"ind_3md", "يَنْجَلِيَانِ"},
{"ind_3mp", "يَنْجَلُونَ"},
{"ind_3ms", "يَنْجَلِي"},
{"past_1p", "اِنْجَلَيْنَا"},
{"past_1s", "اِنْجَلَيْتُ"},
{"past_2d", "اِنْجَلَيْتُمَا"},
{"past_2fp", "اِنْجَلَيْتُنَّ"},
{"past_2fs", "اِنْجَلَيْتِ"},
{"past_2mp", "اِنْجَلَيْتُمْ"},
{"past_2ms", "اِنْجَلَيْتَ"},
{"past_3fd", "اِنْجَلَتَا"},
{"past_3fp", "اِنْجَلَيْنَ"},
{"past_3fs", "اِنْجَلَتْ"},
{"past_3md", "اِنْجَلَيَا"},
{"past_3mp", "اِنْجَلَوْا"},
{"past_3ms", "اِنْجَلَى"},
},
},
{
label = "اِصْطَدَمَ (p353)", root = "صدم", wazn = "افتعل",
forms = {
{"imp_2d", "اِصْطَدِمَا"},
{"imp_2fp", "اِصْطَدِمْنَ"},
{"imp_2fs", "اِصْطَدِمِي"},
{"imp_2mp", "اِصْطَدِمُوا"},
{"imp_2ms", "اِصْطَدِمْ"},
{"ind_1p", "نَصْطَدِمُ"},
{"ind_1s", "أَصْطَدِمُ"},
{"ind_2d", "تَصْطَدِمَانِ"},
{"ind_2fp", "تَصْطَدِمْنَ"},
{"ind_2fs", "تَصْطَدِمِينَ"},
{"ind_2mp", "تَصْطَدِمُونَ"},
{"ind_2ms", "تَصْطَدِمُ"},
{"ind_3fd", "تَصْطَدِمَانِ"},
{"ind_3fp", "يَصْطَدِمْنَ"},
{"ind_3fs", "تَصْطَدِمُ"},
{"ind_3md", "يَصْطَدِمَانِ"},
{"ind_3mp", "يَصْطَدِمُونَ"},
{"ind_3ms", "يَصْطَدِمُ"},
{"past_1p", "اِصْطَدَمْنَا"},
{"past_1s", "اِصْطَدَمْتُ"},
{"past_2d", "اِصْطَدَمْتُمَا"},
{"past_2fp", "اِصْطَدَمْتُنَّ"},
{"past_2fs", "اِصْطَدَمْتِ"},
{"past_2mp", "اِصْطَدَمْتُمْ"},
{"past_2ms", "اِصْطَدَمْتَ"},
{"past_3fd", "اِصْطَدَمَتَا"},
{"past_3fp", "اِصْطَدَمْنَ"},
{"past_3fs", "اِصْطَدَمَتْ"},
{"past_3md", "اِصْطَدَمَا"},
{"past_3mp", "اِصْطَدَمُوا"},
{"past_3ms", "اِصْطَدَمَ"},
},
},
{
label = "اِئْتَجَّ (p357)", root = "ئجج", wazn = "افتعل",
forms = {
{"imp_2d", "اِئْتَجَّا"},
{"imp_2fp", "اِئْتَجِجْنَ"},
{"imp_2fs", "اِئْتَجِّي"},
{"imp_2mp", "اِئْتَجُّوا"},
{"imp_2ms", "اِئْتَجِجْ"},
{"ind_1p", "نَأْتَجُّ"},
{"ind_1s", "أَأْتَجُّ"},
{"ind_2d", "تَأْتَجَّانِ"},
{"ind_2fp", "تَأْتَجِجْنَ"},
{"ind_2fs", "تَأْتَجِّينَ"},
{"ind_2mp", "تَأْتَجُّونَ"},
{"ind_2ms", "تَأْتَجُّ"},
{"ind_3fd", "تَأْتَجَّانِ"},
{"ind_3fp", "يَأْتَجِجْنَ"},
{"ind_3fs", "تَأْتَجُّ"},
{"ind_3md", "يَأْتَجَّانِ"},
{"ind_3mp", "يَأْتَجُّونَ"},
{"ind_3ms", "يَأْتَجُّ"},
{"past_1p", "اِئْتَجَجْنَا"},
{"past_1s", "اِئْتَجَجْتُ"},
{"past_2d", "اِئْتَجَجْتُمَا"},
{"past_2fp", "اِئْتَجَجْتُنَّ"},
{"past_2fs", "اِئْتَجَجْتِ"},
{"past_2mp", "اِئْتَجَجْتُمْ"},
{"past_2ms", "اِئْتَجَجْتَ"},
{"past_3fd", "اِئْتَجَّتَا"},
{"past_3fp", "اِئْتَجَجْنَ"},
{"past_3fs", "اِئْتَجَّتْ"},
{"past_3md", "اِئْتَجَّا"},
{"past_3mp", "اِئْتَجُّوا"},
{"past_3ms", "اِئْتَجَّ"},
},
},
{
label = "اِئْتَصَى (p357)", root = "ئصو", wazn = "افتعل",
forms = {
{"imp_2d", "اِئْتَصِيَا"},
{"imp_2fp", "اِئْتَصِينَ"},
{"imp_2fs", "اِئْتَصِي"},
{"imp_2mp", "اِئْتَصُوا"},
{"imp_2ms", "اِئْتَصِ"},
{"ind_1p", "نَأْتَصِي"},
{"ind_1s", "أَأْتَصِي"},
{"ind_2d", "تَأْتَصِيَانِ"},
{"ind_2fp", "تَأْتَصِينَ"},
{"ind_2fs", "تَأْتَصِينَ"},
{"ind_2mp", "تَأْتَصُونَ"},
{"ind_2ms", "تَأْتَصِي"},
{"ind_3fd", "تَأْتَصِيَانِ"},
{"ind_3fp", "يَأْتَصِينَ"},
{"ind_3fs", "تَأْتَصِي"},
{"ind_3md", "يَأْتَصِيَانِ"},
{"ind_3mp", "يَأْتَصُونَ"},
{"ind_3ms", "يَأْتَصِي"},
{"past_1p", "اِئْتَصَيْنَا"},
{"past_1s", "اِئْتَصَيْتُ"},
{"past_2d", "اِئْتَصَيْتُمَا"},
{"past_2fp", "اِئْتَصَيْتُنَّ"},
{"past_2fs", "اِئْتَصَيْتِ"},
{"past_2mp", "اِئْتَصَيْتُمْ"},
{"past_2ms", "اِئْتَصَيْتَ"},
{"past_3fd", "اِئْتَصَتَا"},
{"past_3fp", "اِئْتَصَيْنَ"},
{"past_3fs", "اِئْتَصَتْ"},
{"past_3md", "اِئْتَصَيَا"},
{"past_3mp", "اِئْتَصَوْا"},
{"past_3ms", "اِئْتَصَى"},
},
},
{
label = "اِفْتَأَلَ (p360)", root = "فأل", wazn = "افتعل",
forms = {
{"imp_2d", "اِفْتَئِلَا"},
{"imp_2fp", "اِفْتَئِلْنَ"},
{"imp_2fs", "اِفْتَئِلِي"},
{"imp_2mp", "اِفْتَئِلُوا"},
{"imp_2ms", "اِفْتَئِلْ"},
{"ind_1p", "نَفْتَئِلُ"},
{"ind_1s", "أَفْتَئِلُ"},
{"ind_2d", "تَفْتَئِلَانِ"},
{"ind_2fp", "تَفْتَئِلْنَ"},
{"ind_2fs", "تَفْتَئِلِينَ"},
{"ind_2mp", "تَفْتَئِلُونَ"},
{"ind_2ms", "تَفْتَئِلُ"},
{"ind_3fd", "تَفْتَئِلَانِ"},
{"ind_3fp", "يَفْتَئِلْنَ"},
{"ind_3fs", "تَفْتَئِلُ"},
{"ind_3md", "يَفْتَئِلَانِ"},
{"ind_3mp", "يَفْتَئِلُونَ"},
{"ind_3ms", "يَفْتَئِلُ"},
{"past_1p", "اِفْتَأَلْنَا"},
{"past_1s", "اِفْتَأَلْتُ"},
{"past_2d", "اِفْتَأَلْتُمَا"},
{"past_2fp", "اِفْتَأَلْتُنَّ"},
{"past_2fs", "اِفْتَأَلْتِ"},
{"past_2mp", "اِفْتَأَلْتُمْ"},
{"past_2ms", "اِفْتَأَلْتَ"},
{"past_3fd", "اِفْتَأَلَتَا"},
{"past_3fp", "اِفْتَأَلْنَ"},
{"past_3fs", "اِفْتَأَلَتْ"},
{"past_3md", "اِفْتَأَلَا"},
{"past_3mp", "اِفْتَأَلُوا"},
{"past_3ms", "اِفْتَأَلَ"},
},
},
{
label = "اِجْتازَ (p364)", root = "جوز", wazn = "افتعل",
forms = {
{"imp_2d", "اِجْتَازَا"},
{"imp_2fp", "اِجْتَزْنَ"},
{"imp_2fs", "اِجْتَازِي"},
{"imp_2mp", "اِجْتَازُوا"},
{"imp_2ms", "اِجْتَزْ"},
{"ind_1p", "نَجْتَازُ"},
{"ind_1s", "أَجْتَازُ"},
{"ind_2d", "تَجْتَازَانِ"},
{"ind_2fp", "تَجْتَزْنَ"},
{"ind_2fs", "تَجْتَازِينَ"},
{"ind_2mp", "تَجْتَازُونَ"},
{"ind_2ms", "تَجْتَازُ"},
{"ind_3fd", "تَجْتَازَانِ"},
{"ind_3fp", "يَجْتَزْنَ"},
{"ind_3fs", "تَجْتَازُ"},
{"ind_3md", "يَجْتَازَانِ"},
{"ind_3mp", "يَجْتَازُونَ"},
{"ind_3ms", "يَجْتَازُ"},
{"past_1p", "اِجْتَزْنَا"},
{"past_1s", "اِجْتَزْتُ"},
{"past_2d", "اِجْتَزْتُمَا"},
{"past_2fp", "اِجْتَزْتُنَّ"},
{"past_2fs", "اِجْتَزْتِ"},
{"past_2mp", "اِجْتَزْتُمْ"},
{"past_2ms", "اِجْتَزْتَ"},
{"past_3fd", "اِجْتَازَتَا"},
{"past_3fp", "اِجْتَزْنَ"},
{"past_3fs", "اِجْتَازَتْ"},
{"past_3md", "اِجْتَازَا"},
{"past_3mp", "اِجْتَازُوا"},
{"past_3ms", "اِجْتَازَ"},
},
},
{
label = "اِرْتَمَى (p366)", root = "رمي", wazn = "افتعل",
forms = {
{"imp_2d", "اِرْتَمِيَا"},
{"imp_2fp", "اِرْتَمِينَ"},
{"imp_2fs", "اِرْتَمِي"},
{"imp_2mp", "اِرْتَمُوا"},
{"imp_2ms", "اِرْتَمِ"},
{"ind_1p", "نَرْتَمِي"},
{"ind_1s", "أَرْتَمِي"},
{"ind_2d", "تَرْتَمِيَانِ"},
{"ind_2fp", "تَرْتَمِينَ"},
{"ind_2fs", "تَرْتَمِينَ"},
{"ind_2mp", "تَرْتَمُونَ"},
{"ind_2ms", "تَرْتَمِي"},
{"ind_3fd", "تَرْتَمِيَانِ"},
{"ind_3fp", "يَرْتَمِينَ"},
{"ind_3fs", "تَرْتَمِي"},
{"ind_3md", "يَرْتَمِيَانِ"},
{"ind_3mp", "يَرْتَمُونَ"},
{"ind_3ms", "يَرْتَمِي"},
{"past_1p", "اِرْتَمَيْنَا"},
{"past_1s", "اِرْتَمَيْتُ"},
{"past_2d", "اِرْتَمَيْتُمَا"},
{"past_2fp", "اِرْتَمَيْتُنَّ"},
{"past_2fs", "اِرْتَمَيْتِ"},
{"past_2mp", "اِرْتَمَيْتُمْ"},
{"past_2ms", "اِرْتَمَيْتَ"},
{"past_3fd", "اِرْتَمَتَا"},
{"past_3fp", "اِرْتَمَيْنَ"},
{"past_3fs", "اِرْتَمَتْ"},
{"past_3md", "اِرْتَمَيَا"},
{"past_3mp", "اِرْتَمَوْا"},
{"past_3ms", "اِرْتَمَى"},
},
},
{
label = "اِقْتَضَى (p366)", root = "قضي", wazn = "افتعل",
forms = {
{"imp_2d", "اِقْتَضِيَا"},
{"imp_2fp", "اِقْتَضِينَ"},
{"imp_2fs", "اِقْتَضِي"},
{"imp_2mp", "اِقْتَضُوا"},
{"imp_2ms", "اِقْتَضِ"},
{"ind_1p", "نَقْتَضِي"},
{"ind_1s", "أَقْتَضِي"},
{"ind_2d", "تَقْتَضِيَانِ"},
{"ind_2fp", "تَقْتَضِينَ"},
{"ind_2fs", "تَقْتَضِينَ"},
{"ind_2mp", "تَقْتَضُونَ"},
{"ind_2ms", "تَقْتَضِي"},
{"ind_3fd", "تَقْتَضِيَانِ"},
{"ind_3fs", "تَقْتَضِي"},
{"ind_3md", "يَقْتَضِيَانِ"},
{"ind_3mp", "يَقْتَضُونَ"},
{"ind_3ms", "يَقْتَضِي"},
{"past_1p", "اِقْتَضَيْنَا"},
{"past_1s", "اِقْتَضَيْتُ"},
{"past_2d", "اِقْتَضَيْتُمَا"},
{"past_2fp", "اِقْتَضَيْتُنَّ"},
{"past_2fs", "اِقْتَضَيْتِ"},
{"past_2mp", "اِقْتَضَيْتُمْ"},
{"past_2ms", "اِقْتَضَيْتَ"},
{"past_3fd", "اِقْتَضَتَا"},
{"past_3fp", "اِقْتَضَيْنَ"},
{"past_3fs", "اِقْتَضَتْ"},
{"past_3md", "اِقْتَضَيَا"},
{"past_3mp", "اِقْتَضَوْا"},
{"past_3ms", "اِقْتَضَى"},
},
},
{
label = "اِرْتَأَى (p368)", root = "رأو", wazn = "افتعل",
forms = {
{"imp_2d", "اِرْتَئِيَا"},
{"imp_2fp", "اِرْتَئِينَ"},
{"imp_2fs", "اِرْتَئِي"},
{"imp_2mp", "اِرْتَؤُوا"},
{"imp_2ms", "اِرْتَإِ"},
{"ind_1p", "نَرْتَئِي"},
{"ind_1s", "أَرْتَئِي"},
{"ind_2d", "تَرْتَئِيَانِ"},
{"ind_2fp", "تَرْتَئِينَ"},
{"ind_2fs", "تَرْتَئِينَ"},
{"ind_2mp", "تَرْتَؤُونَ"},
{"ind_2ms", "تَرْتَئِي"},
{"ind_3fd", "تَرْتَئِيَانِ"},
{"ind_3fp", "يَرْتَئِينَ"},
{"ind_3fs", "تَرْتَئِي"},
{"ind_3md", "يَرْتَئِيَانِ"},
{"ind_3mp", "يَرْتَؤُونَ"},
{"ind_3ms", "يَرْتَئِي"},
{"past_1p", "اِرْتَأَيْنَا"},
{"past_1s", "اِرْتَأَيْتُ"},
{"past_2d", "اِرْتَأَيْتُمَا"},
{"past_2fp", "اِرْتَأَيْتُنَّ"},
{"past_2fs", "اِرْتَأَيْتِ"},
{"past_2mp", "اِرْتَأَيْتُمْ"},
{"past_2ms", "اِرْتَأَيْتَ"},
{"past_3fd", "اِرْتَأَتَا"},
{"past_3fp", "اِرْتَأَيْنَ"},
{"past_3fs", "اِرْتَأَتْ"},
{"past_3md", "اِرْتَأَيَا"},
{"past_3mp", "اِرْتَأَوْا"},
{"past_3ms", "اِرْتَأَى"},
},
},
{
label = "اِسْتَراحَ (p384)", root = "روح", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَرِيحَا"},
{"imp_2fp", "اِسْتَرِحْنَ"},
{"imp_2fs", "اِسْتَرِيحِي"},
{"imp_2mp", "اِسْتَرِيحُوا"},
{"imp_2ms", "اِسْتَرِحْ"},
{"ind_1p", "نَسْتَرِيحُ"},
{"ind_1s", "أَسْتَرِيحُ"},
{"ind_2d", "تَسْتَرِيحَانِ"},
{"ind_2fp", "تَسْتَرِحْنَ"},
{"ind_2fs", "تَسْتَرِيحِينَ"},
{"ind_2mp", "تَسْتَرِيحُونَ"},
{"ind_2ms", "تَسْتَرِيحُ"},
{"ind_3fd", "تَسْتَرِيحَانِ"},
{"ind_3fp", "يَسْتَرِحْنَ"},
{"ind_3fs", "تَسْتَرِيحُ"},
{"ind_3md", "يَسْتَرِيحَانِ"},
{"ind_3mp", "يَسْتَرِيحُونَ"},
{"ind_3ms", "يَسْتَرِيحُ"},
{"past_1p", "اِسْتَرَحْنَا"},
{"past_1s", "اِسْتَرَحْتُ"},
{"past_2d", "اِسْتَرَحْتُمَا"},
{"past_2fp", "اِسْتَرَحْتُنَّ"},
{"past_2fs", "اِسْتَرَحْتِ"},
{"past_2mp", "اِسْتَرَحْتُمْ"},
{"past_2ms", "اِسْتَرَحْتَ"},
{"past_3fd", "اِسْتَرَاحَتَا"},
{"past_3fp", "اِسْتَرَحْنَ"},
{"past_3fs", "اِسْتَرَاحَتْ"},
{"past_3md", "اِسْتَرَاحَا"},
{"past_3mp", "اِسْتَرَاحُوا"},
{"past_3ms", "اِسْتَرَاحَ"},
},
},
{
label = "اِسْتَفادَ (p384)", root = "فود", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَفِيدَا"},
{"imp_2fp", "اِسْتَفِدْنَ"},
{"imp_2fs", "اِسْتَفِيدِي"},
{"imp_2mp", "اِسْتَفِيدُوا"},
{"imp_2ms", "اِسْتَفِدْ"},
{"ind_1p", "نَسْتَفِيدُ"},
{"ind_1s", "أَسْتَفِيدُ"},
{"ind_2d", "تَسْتَفِيدَانِ"},
{"ind_2fp", "تَسْتَفِدْنَ"},
{"ind_2fs", "تَسْتَفِيدِينَ"},
{"ind_2mp", "تَسْتَفِيدُونَ"},
{"ind_2ms", "تَسْتَفِيدُ"},
{"ind_3fd", "تَسْتَفِيدَانِ"},
{"ind_3fp", "يَسْتَفِدْنَ"},
{"ind_3fs", "تَسْتَفِيدُ"},
{"ind_3md", "يَسْتَفِيدَانِ"},
{"ind_3mp", "يَسْتَفِيدُونَ"},
{"ind_3ms", "يَسْتَفِيدُ"},
{"past_1p", "اِسْتَفَدْنَا"},
{"past_1s", "اِسْتَفَدْتُ"},
{"past_2d", "اِسْتَفَدْتُمَا"},
{"past_2fp", "اِسْتَفَدْتُنَّ"},
{"past_2fs", "اِسْتَفَدْتِ"},
{"past_2mp", "اِسْتَفَدْتُمْ"},
{"past_2ms", "اِسْتَفَدْتَ"},
{"past_3fd", "اِسْتَفَادَتَا"},
{"past_3fp", "اِسْتَفَدْنَ"},
{"past_3fs", "اِسْتَفَادَتْ"},
{"past_3md", "اِسْتَفَادَا"},
{"past_3mp", "اِسْتَفَادُوا"},
{"past_3ms", "اِسْتَفَادَ"},
},
},
{
label = "اِسْتَضَاءَ (p385)", root = "ضوء", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَضِيئَا"},
{"imp_2fp", "اِسْتَضِئْنَ"},
{"imp_2fs", "اِسْتَضِيئِي"},
{"imp_2mp", "اِسْتَضِيؤُوا"},
{"imp_2ms", "اِسْتَضِئْ"},
{"ind_1p", "نَسْتَضِيءُ"},
{"ind_1s", "أَسْتَضِيءُ"},
{"ind_2d", "تَسْتَضِيئَانِ"},
{"ind_2fp", "تَسْتَضِئْنَ"},
{"ind_2fs", "تَسْتَضِيئِينَ"},
{"ind_2mp", "تَسْتَضِيؤُونَ"},
{"ind_2ms", "تَسْتَضِيءُ"},
{"ind_3fd", "تَسْتَضِيئَانِ"},
{"ind_3fp", "يَسْتَضِئْنَ"},
{"ind_3fs", "تَسْتَضِيءُ"},
{"ind_3md", "يَسْتَضِيئَانِ"},
{"ind_3mp", "يَسْتَضِيؤُونَ"},
{"ind_3ms", "يَسْتَضِيءُ"},
{"past_1p", "اِسْتَضَأْنَا"},
{"past_1s", "اِسْتَضَأْتُ"},
{"past_2d", "اِسْتَضَأْتُمَا"},
{"past_2fp", "اِسْتَضَأْتُنَّ"},
{"past_2fs", "اِسْتَضَأْتِ"},
{"past_2mp", "اِسْتَضَأْتُمْ"},
{"past_2ms", "اِسْتَضَأْتَ"},
{"past_3fd", "اِسْتَضَاءَتَا"},
{"past_3fp", "اِسْتَضَأْنَ"},
{"past_3fs", "اِسْتَضَاءَتْ"},
{"past_3md", "اِسْتَضَاءَا"},
{"past_3mp", "اِسْتَضَاؤُوا"},
{"past_3ms", "اِسْتَضَاءَ"},
},
},
{
label = "اِسْتَدْعَى (p386)", root = "دعو", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَدْعِيَا"},
{"imp_2fp", "اِسْتَدْعِينَ"},
{"imp_2fs", "اِسْتَدْعِي"},
{"imp_2mp", "اِسْتَدْعُوا"},
{"imp_2ms", "اِسْتَدْعِ"},
{"ind_1p", "نَسْتَدْعِي"},
{"ind_1s", "أَسْتَدْعِي"},
{"ind_2d", "تَسْتَدْعِيَانِ"},
{"ind_2fp", "تَسْتَدْعِينَ"},
{"ind_2fs", "تَسْتَدْعِينَ"},
{"ind_2mp", "تَسْتَدْعُونَ"},
{"ind_2ms", "تَسْتَدْعِي"},
{"ind_3fd", "تَسْتَدْعِيَانِ"},
{"ind_3fp", "يَسْتَدْعِينَ"},
{"ind_3fs", "تَسْتَدْعِي"},
{"ind_3md", "يَسْتَدْعِيَانِ"},
{"ind_3mp", "يَسْتَدْعُونَ"},
{"ind_3ms", "يَسْتَدْعِي"},
{"past_1p", "اِسْتَدْعَيْنَا"},
{"past_1s", "اِسْتَدْعَيْتُ"},
{"past_2d", "اِسْتَدْعَيْتُمَا"},
{"past_2fp", "اِسْتَدْعَيْتُنَّ"},
{"past_2fs", "اِسْتَدْعَيْتِ"},
{"past_2mp", "اِسْتَدْعَيْتُمْ"},
{"past_2ms", "اِسْتَدْعَيْتَ"},
{"past_3fd", "اِسْتَدْعَتَا"},
{"past_3fp", "اِسْتَدْعَيْنَ"},
{"past_3fs", "اِسْتَدْعَتْ"},
{"past_3md", "اِسْتَدْعَيَا"},
{"past_3mp", "اِسْتَدْعَوْا"},
{"past_3ms", "اِسْتَدْعَى"},
},
},
{
label = "اِسْتَعْصَى (p386)", root = "عصو", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَعْصِيَا"},
{"imp_2fp", "اِسْتَعْصِينَ"},
{"imp_2fs", "اِسْتَعْصِي"},
{"imp_2mp", "اِسْتَعْصُوا"},
{"imp_2ms", "اِسْتَعْصِ"},
{"ind_1p", "نَسْتَعْصِي"},
{"ind_1s", "أَسْتَعْصِي"},
{"ind_2d", "تَسْتَعْصِيَانِ"},
{"ind_2fp", "تَسْتَعْصِينَ"},
{"ind_2fs", "تَسْتَعْصِينَ"},
{"ind_2mp", "تَسْتَعْصُونَ"},
{"ind_2ms", "تَسْتَعْصِي"},
{"ind_3fd", "تَسْتَعْصِيَانِ"},
{"ind_3fp", "يَسْتَعْصِينَ"},
{"ind_3fs", "تَسْتَعْصِي"},
{"ind_3md", "يَسْتَعْصِيَانِ"},
{"ind_3mp", "يَسْتَعْصُونَ"},
{"ind_3ms", "يَسْتَعْصِي"},
{"past_1p", "اِسْتَعْصَيْنَا"},
{"past_1s", "اِسْتَعْصَيْتُ"},
{"past_2d", "اِسْتَعْصَيْتُمَا"},
{"past_2fp", "اِسْتَعْصَيْتُنَّ"},
{"past_2fs", "اِسْتَعْصَيْتِ"},
{"past_2mp", "اِسْتَعْصَيْتُمْ"},
{"past_2ms", "اِسْتَعْصَيْتَ"},
{"past_3fd", "اِسْتَعْصَتَا"},
{"past_3fp", "اِسْتَعْصَيْنَ"},
{"past_3fs", "اِسْتَعْصَتْ"},
{"past_3md", "اِسْتَعْصَيَا"},
{"past_3mp", "اِسْتَعْصَوْا"},
{"past_3ms", "اِسْتَعْصَى"},
},
},
{
label = "اِحْدَوْدَبَ (p394)", root = "حدب", wazn = "افعوعل",
forms = {
{"imp_2d", "اِحْدَوْدِبَا"},
{"imp_2fp", "اِحْدَوْدِبْنَ"},
{"imp_2fs", "اِحْدَوْدِبِي"},
{"imp_2mp", "اِحْدَوْدِبُوا"},
{"imp_2ms", "اِحْدَوْدِبْ"},
{"ind_1p", "نَحْدَوْدِبُ"},
{"ind_1s", "أَحْدَوْدِبُ"},
{"ind_2d", "تَحْدَوْدِبَانِ"},
{"ind_2fp", "تَحْدَوْدِبْنَ"},
{"ind_2fs", "تَحْدَوْدِبِينَ"},
{"ind_2mp", "تَحْدَوْدِبُونَ"},
{"ind_2ms", "تَحْدَوْدِبُ"},
{"ind_3fd", "تَحْدَوْدِبَانِ"},
{"ind_3fp", "يَحْدَوْدِبْنَ"},
{"ind_3fs", "تَحْدَوْدِبُ"},
{"ind_3md", "يَحْدَوْدِبَانِ"},
{"ind_3mp", "يَحْدَوْدِبُونَ"},
{"ind_3ms", "يَحْدَوْدِبُ"},
{"past_1p", "اِحْدَوْدَبْنَا"},
{"past_1s", "اِحْدَوْدَبْتُ"},
{"past_2d", "اِحْدَوْدَبْتُمَا"},
{"past_2fp", "اِحْدَوْدَبْتُنَّ"},
{"past_2fs", "اِحْدَوْدَبْتِ"},
{"past_2mp", "اِحْدَوْدَبْتُمْ"},
{"past_2ms", "اِحْدَوْدَبْتَ"},
{"past_3fd", "اِحْدَوْدَبَتَا"},
{"past_3fp", "اِحْدَوْدَبْنَ"},
{"past_3fs", "اِحْدَوْدَبَتْ"},
{"past_3md", "اِحْدَوْدَبَا"},
{"past_3mp", "اِحْدَوْدَبُوا"},
{"past_3ms", "اِحْدَوْدَبَ"},
},
},
{
label = "لَأْلَأَ (p404)", root = "لألأ", wazn = "فعلل",
forms = {
{"imp_2d", "لَأْلِئَا"},
{"imp_2fp", "لَأْلِئْنَ"},
{"imp_2fs", "لَأْلِئِي"},
{"imp_2mp", "لَأْلِئُوا"},
{"imp_2ms", "لَأْلِئْ"},
{"ind_1p", "نُلَأْلِئُ"},
{"ind_1s", "أُلَأْلِئُ"},
{"ind_2d", "تُلَأْلِئَانِ"},
{"ind_2fp", "تُلَأْلِئْنَ"},
{"ind_2fs", "تُلَأْلِئِينَ"},
{"ind_2mp", "تُلَأْلِئُونَ"},
{"ind_2ms", "تُلَأْلِئُ"},
{"ind_3fd", "تُلَأْلِئَانِ"},
{"ind_3fp", "يُلَأْلِئْنَ"},
{"ind_3fs", "تُلَأْلِئُ"},
{"ind_3md", "يُلَأْلِئَانِ"},
{"ind_3mp", "يُلَأْلِئُونَ"},
{"ind_3ms", "يُلَأْلِئُ"},
{"past_1p", "لَأْلَأْنَا"},
{"past_1s", "لَأْلَأْتُ"},
{"past_2d", "لَأْلَأْتُمَا"},
{"past_2fp", "لَأْلَأْتُنَّ"},
{"past_2fs", "لَأْلَأْتِ"},
{"past_2mp", "لَأْلَأْتُمْ"},
{"past_2ms", "لَأْلَأْتَ"},
{"past_3fd", "لَأْلَأَتَا"},
{"past_3fp", "لَأْلَأْنَ"},
{"past_3fs", "لَأْلَأَتْ"},
{"past_3md", "لَأْلَآ"},
{"past_3mp", "لَأْلَؤُوا"},
{"past_3ms", "لَأْلَأَ"},
},
},
{
label = "رَأْبَلَ (p405)", root = "رأبل", wazn = "فعلل",
forms = {
{"imp_2d", "رَأْبِلَا"},
{"imp_2fp", "رَأْبِلْنَ"},
{"imp_2fs", "رَأْبِلِي"},
{"imp_2mp", "رَأْبِلُوا"},
{"imp_2ms", "رَأْبِلْ"},
{"ind_1p", "نُرَأْبِلُ"},
{"ind_1s", "أُرَأْبِلُ"},
{"ind_2d", "تُرَأْبِلَانِ"},
{"ind_2fp", "تُرَأْبِلْنَ"},
{"ind_2fs", "تُرَأْبِلِينَ"},
{"ind_2mp", "تُرَأْبِلُونَ"},
{"ind_2ms", "تُرَأْبِلُ"},
{"ind_3fd", "تُرَأْبِلَانِ"},
{"ind_3fp", "يُرَأْبِلْنَ"},
{"ind_3fs", "تُرَأْبِلُ"},
{"ind_3md", "يُرَأْبِلَانِ"},
{"ind_3mp", "يُرَأْبِلُونَ"},
{"ind_3ms", "يُرَأْبِلُ"},
{"past_1p", "رَأْبَلْنَا"},
{"past_1s", "رَأْبَلْتُ"},
{"past_2d", "رَأْبَلْتُمَا"},
{"past_2fp", "رَأْبَلْتُنَّ"},
{"past_2fs", "رَأْبَلْتِ"},
{"past_2mp", "رَأْبَلْتُمْ"},
{"past_2ms", "رَأْبَلْتَ"},
{"past_3fd", "رَأْبَلَتَا"},
{"past_3fp", "رَأْبَلْنَ"},
{"past_3fs", "رَأْبَلَتْ"},
{"past_3md", "رَأْبَلَا"},
{"past_3mp", "رَأْبَلُوا"},
{"past_3ms", "رَأْبَلَ"},
},
},
{
label = "دَوْزَنَ (p408)", root = "دوزن", wazn = "فعلل",
forms = {
{"imp_2d", "دَوْزِنَا"},
{"imp_2fp", "دَوْزِنَّ"},
{"imp_2fs", "دَوْزِنِي"},
{"imp_2mp", "دَوْزِنُوا"},
{"imp_2ms", "دَوْزِنْ"},
{"ind_1p", "نُدَوْزِنُ"},
{"ind_1s", "أُدَوْزِنُ"},
{"ind_2d", "تُدَوْزِنَانِ"},
{"ind_2fp", "تُدَوْزِنَّ"},
{"ind_2fs", "تُدَوْزِنِينَ"},
{"ind_2mp", "تُدَوْزِنُونَ"},
{"ind_2ms", "تُدَوْزِنُ"},
{"ind_3fd", "تُدَوْزِنَانِ"},
{"ind_3fp", "يُدَوْزِنَّ"},
{"ind_3fs", "تُدَوْزِنُ"},
{"ind_3md", "يُدَوْزِنَانِ"},
{"ind_3mp", "يُدَوْزِنُونَ"},
{"ind_3ms", "يُدَوْزِنُ"},
{"past_1p", "دَوْزَنَّا"},
{"past_1s", "دَوْزَنْتُ"},
{"past_2d", "دَوْزَنْتُمَا"},
{"past_2fp", "دَوْزَنْتُنَّ"},
{"past_2fs", "دَوْزَنْتِ"},
{"past_2mp", "دَوْزَنْتُمْ"},
{"past_2ms", "دَوْزَنْتَ"},
{"past_3fd", "دَوْزَنَتَا"},
{"past_3fp", "دَوْزَنَّ"},
{"past_3fs", "دَوْزَنَتْ"},
{"past_3md", "دَوْزَنَا"},
{"past_3mp", "دَوْزَنُوا"},
{"past_3ms", "دَوْزَنَ"},
},
},
{
label = "هَرْوَزَ (p409)", root = "هروز", wazn = "فعلل",
forms = {
{"imp_2d", "هَرْوِزَا"},
{"imp_2fp", "هَرْوِزْنَ"},
{"imp_2fs", "هَرْوِزِي"},
{"imp_2mp", "هَرْوِزُوا"},
{"imp_2ms", "هَرْوِزْ"},
{"ind_1p", "نُهَرْوِزُ"},
{"ind_1s", "أُهَرْوِزُ"},
{"ind_2d", "تُهَرْوِزَانِ"},
{"ind_2fp", "تُهَرْوِزْنَ"},
{"ind_2fs", "تُهَرْوِزِينَ"},
{"ind_2mp", "تُهَرْوِزُونَ"},
{"ind_2ms", "تُهَرْوِزُ"},
{"ind_3fd", "تُهَرْوِزَانِ"},
{"ind_3fp", "يُهَرْوِزْنَ"},
{"ind_3fs", "تُهَرْوِزُ"},
{"ind_3md", "يُهَرْوِزَانِ"},
{"ind_3mp", "يُهَرْوِزُونَ"},
{"ind_3ms", "يُهَرْوِزُ"},
{"past_1p", "هَرْوَزْنَا"},
{"past_1s", "هَرْوَزْتُ"},
{"past_2d", "هَرْوَزْتُمَا"},
{"past_2fp", "هَرْوَزْتُنَّ"},
{"past_2fs", "هَرْوَزْتِ"},
{"past_2mp", "هَرْوَزْتُمْ"},
{"past_2ms", "هَرْوَزْتَ"},
{"past_3fd", "هَرْوَزَتَا"},
{"past_3fp", "هَرْوَزْنَ"},
{"past_3fs", "هَرْوَزَتْ"},
{"past_3md", "هَرْوَزَا"},
{"past_3mp", "هَرْوَزُوا"},
{"past_3ms", "هَرْوَزَ"},
},
},
{
label = "دَهْدَى (p409)", root = "دهدو", wazn = "فعلل",
forms = {
{"imp_2d", "دَهْدِيَا"},
{"imp_2fp", "دَهْدِينَ"},
{"imp_2fs", "دَهْدِي"},
{"imp_2mp", "دَهْدُوا"},
{"imp_2ms", "دَهْدِ"},
{"ind_1p", "نُدَهْدِي"},
{"ind_1s", "أُدَهْدِي"},
{"ind_2d", "تُدَهْدِيَانِ"},
{"ind_2fp", "تُدَهْدِينَ"},
{"ind_2fs", "تُدَهْدِينَ"},
{"ind_2mp", "تُدَهْدُونَ"},
{"ind_2ms", "تُدَهْدِي"},
{"ind_3fd", "تُدَهْدِيَانِ"},
{"ind_3fp", "يُدَهْدِينَ"},
{"ind_3fs", "تُدَهْدِي"},
{"ind_3md", "يُدَهْدِيَانِ"},
{"ind_3mp", "يُدَهْدُونَ"},
{"ind_3ms", "يُدَهْدِي"},
{"past_1p", "دَهْدَيْنَا"},
{"past_1s", "دَهْدَيْتُ"},
{"past_2d", "دَهْدَيْتُمَا"},
{"past_2fp", "دَهْدَيْتُنَّ"},
{"past_2fs", "دَهْدَيْتِ"},
{"past_2mp", "دَهْدَيْتُمْ"},
{"past_2ms", "دَهْدَيْتَ"},
{"past_3fd", "دَهْدَتَا"},
{"past_3fp", "دَهْدَيْنَ"},
{"past_3fs", "دَهْدَتْ"},
{"past_3md", "دَهْدَيَا"},
{"past_3mp", "دَهْدَوْا"},
{"past_3ms", "دَهْدَى"},
},
},
{
label = "تَرَعْرَعَ (p418)", root = "رعرع", wazn = "تفعلل",
forms = {
{"imp_2d", "تَرَعْرَعَا"},
{"imp_2fp", "تَرَعْرَعْنَ"},
{"imp_2fs", "تَرَعْرَعِي"},
{"imp_2mp", "تَرَعْرَعُوا"},
{"imp_2ms", "تَرَعْرَعْ"},
{"ind_1p", "نَتَرَعْرَعُ"},
{"ind_1s", "أَتَرَعْرَعُ"},
{"ind_2d", "تَتَرَعْرَعَانِ"},
{"ind_2fp", "تَتَرَعْرَعْنَ"},
{"ind_2fs", "تَتَرَعْرَعِينَ"},
{"ind_2mp", "تَتَرَعْرَعُونَ"},
{"ind_2ms", "تَتَرَعْرَعُ"},
{"ind_3fd", "تَتَرَعْرَعَانِ"},
{"ind_3fp", "يَتَرَعْرَعْنَ"},
{"ind_3fs", "تَتَرَعْرَعُ"},
{"ind_3md", "يَتَرَعْرَعَانِ"},
{"ind_3mp", "يَتَرَعْرَعُونَ"},
{"ind_3ms", "يَتَرَعْرَعُ"},
{"past_1p", "تَرَعْرَعْنَا"},
{"past_1s", "تَرَعْرَعْتُ"},
{"past_2d", "تَرَعْرَعْتُمَا"},
{"past_2fp", "تَرَعْرَعْتُنَّ"},
{"past_2fs", "تَرَعْرَعْتِ"},
{"past_2mp", "تَرَعْرَعْتُمْ"},
{"past_2ms", "تَرَعْرَعْتَ"},
{"past_3fd", "تَرَعْرَعَتَا"},
{"past_3fp", "تَرَعْرَعْنَ"},
{"past_3fs", "تَرَعْرَعَتْ"},
{"past_3md", "تَرَعْرَعَا"},
{"past_3mp", "تَرَعْرَعُوا"},
{"past_3ms", "تَرَعْرَعَ"},
},
},
}
hf14ejc41tg6crbz0fmtn95fb0nsn54
وحدة:ar-verb/testcases/12
828
242579
1159035
1158903
2026-09-10T12:39:52Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159035
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 12 من 15. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/12")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_12()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
tr1nnsq6g1x04uihgvwozp9azqeliuf
1159093
1159035
2026-09-10T19:34:23Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159093
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 12 من 16. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/12")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_12()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
sly3a293waozj5ll8msu9dblud7hn2j
نقاش الوحدة:ar-verb/testcases/12
829
242580
1159036
1158904
2026-09-10T12:39:53Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159036
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/12|الجزء 12 من 15]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، [[نقاش الوحدة:ar-verb/testcases/1|1]]، [[نقاش الوحدة:ar-verb/testcases/2|2]]، [[نقاش الوحدة:ar-verb/testcases/3|3]]، [[نقاش الوحدة:ar-verb/testcases/4|4]]، [[نقاش الوحدة:ar-verb/testcases/5|5]]، [[نقاش الوحدة:ar-verb/testcases/6|6]]، [[نقاش الوحدة:ar-verb/testcases/7|7]]، [[نقاش الوحدة:ar-verb/testcases/8|8]]، [[نقاش الوحدة:ar-verb/testcases/9|9]]، [[نقاش الوحدة:ar-verb/testcases/10|10]]، [[نقاش الوحدة:ar-verb/testcases/11|11]]، 12، [[نقاش الوحدة:ar-verb/testcases/13|13]]، [[نقاش الوحدة:ar-verb/testcases/14|14]]، [[نقاش الوحدة:ar-verb/testcases/15|15]] — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/12|run_tests}}
kgkmtpes585xp5opp830apw4m10b57l
1159094
1159036
2026-09-10T19:34:24Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159094
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/12|الجزء 12 من 16]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، [[نقاش الوحدة:ar-verb/testcases/1|1]]، [[نقاش الوحدة:ar-verb/testcases/2|2]]، [[نقاش الوحدة:ar-verb/testcases/3|3]]، [[نقاش الوحدة:ar-verb/testcases/4|4]]، [[نقاش الوحدة:ar-verb/testcases/5|5]]، [[نقاش الوحدة:ar-verb/testcases/6|6]]، [[نقاش الوحدة:ar-verb/testcases/7|7]]، [[نقاش الوحدة:ar-verb/testcases/8|8]]، [[نقاش الوحدة:ar-verb/testcases/9|9]]، [[نقاش الوحدة:ar-verb/testcases/10|10]]، [[نقاش الوحدة:ar-verb/testcases/11|11]]، 12، [[نقاش الوحدة:ar-verb/testcases/13|13]]، [[نقاش الوحدة:ar-verb/testcases/14|14]]، [[نقاش الوحدة:ar-verb/testcases/15|15]]، [[نقاش الوحدة:ar-verb/testcases/16|16]] — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/12|run_tests}}
gaa2l1dqhhj77lvak2fantotg40e3yp
وحدة:ar-verb/testcases/بيانات/13
828
242581
1159037
1158944
2026-09-10T12:39:54Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159037
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 13 من 15.
return {
{
label = "تَجَفْجَفَ (p418)", root = "جفجف", wazn = "تفعلل",
forms = {
{"imp_2d", "تَجَفْجَفَا"},
{"imp_2fp", "تَجَفْجَفْنَ"},
{"imp_2fs", "تَجَفْجَفِي"},
{"imp_2mp", "تَجَفْجَفُوا"},
{"imp_2ms", "تَجَفْجَفْ"},
{"ind_1p", "نَتَجَفْجَفُ"},
{"ind_1s", "أَتَجَفْجَفُ"},
{"ind_2d", "تَتَجَفْجَفَانِ"},
{"ind_2fp", "تَتَجَفْجَفْنَ"},
{"ind_2fs", "تَتَجَفْجَفِينَ"},
{"ind_2mp", "تَتَجَفْجَفُونَ"},
{"ind_2ms", "تَتَجَفْجَفُ"},
{"ind_3fd", "تَتَجَفْجَفَانِ"},
{"ind_3fp", "يَتَجَفْجَفْنَ"},
{"ind_3fs", "تَتَجَفْجَفُ"},
{"ind_3md", "يَتَجَفْجَفَانِ"},
{"ind_3mp", "يَتَجَفْجَفُونَ"},
{"ind_3ms", "يَتَجَفْجَفُ"},
{"past_1p", "تَجَفْجَفْنَا"},
{"past_1s", "تَجَفْجَفْتُ"},
{"past_2d", "تَجَفْجَفْتُمَا"},
{"past_2fp", "تَجَفْجَفْتُنَّ"},
{"past_2fs", "تَجَفْجَفْتِ"},
{"past_2mp", "تَجَفْجَفْتُمْ"},
{"past_2ms", "تَجَفْجَفْتَ"},
{"past_3fd", "تَجَفْجَفَتَا"},
{"past_3fp", "تَجَفْجَفْنَ"},
{"past_3fs", "تَجَفْجَفَتْ"},
{"past_3md", "تَجَفْجَفَا"},
{"past_3mp", "تَجَفْجَفُوا"},
{"past_3ms", "تَجَفْجَفَ"},
},
},
{
label = "تَرَأْبَلَ (p419)", root = "رأبل", wazn = "تفعلل",
forms = {
{"imp_2d", "تَرَأْبَلَا"},
{"imp_2fp", "تَرَأْبَلْنَ"},
{"imp_2fs", "تَرَأْبَلِي"},
{"imp_2mp", "تَرَأْبَلُوا"},
{"imp_2ms", "تَرَأْبَلْ"},
{"ind_1p", "نَتَرَأْبَلُ"},
{"ind_1s", "أَتَرَأْبَلُ"},
{"ind_2d", "تَتَرَأْبَلَانِ"},
{"ind_2fp", "تَتَرَأْبَلْنَ"},
{"ind_2fs", "تَتَرَأْبَلِينَ"},
{"ind_2mp", "تَتَرَأْبَلُونَ"},
{"ind_2ms", "تَتَرَأْبَلُ"},
{"ind_3fd", "تَتَرَأْبَلَانِ"},
{"ind_3fp", "يَتَرَأْبَلْنَ"},
{"ind_3fs", "تَتَرَأْبَلُ"},
{"ind_3md", "يَتَرَأْبَلَانِ"},
{"ind_3mp", "يَتَرَأْبَلُونَ"},
{"ind_3ms", "يَتَرَأْبَلُ"},
{"past_1p", "تَرَأْبَلْنَا"},
{"past_1s", "تَرَأْبَلْتُ"},
{"past_2d", "تَرَأْبَلْتُمَا"},
{"past_2fp", "تَرَأْبَلْتُنَّ"},
{"past_2fs", "تَرَأْبَلْتِ"},
{"past_2mp", "تَرَأْبَلْتُمْ"},
{"past_2ms", "تَرَأْبَلْتَ"},
{"past_3fd", "تَرَأْبَلَتَا"},
{"past_3fp", "تَرَأْبَلْنَ"},
{"past_3fs", "تَرَأْبَلَتْ"},
{"past_3md", "تَرَأْبَلَا"},
{"past_3mp", "تَرَأْبَلُوا"},
{"past_3ms", "تَرَأْبَلَ"},
},
},
{
label = "تَثَأْلَلَ (p419)", root = "ثألل", wazn = "تفعلل",
forms = {
{"imp_2d", "تَثَأْلَلَا"},
{"imp_2fp", "تَثَأْلَلْنَ"},
{"imp_2fs", "تَثَأْلَلِي"},
{"imp_2mp", "تَثَأْلَلُوا"},
{"imp_2ms", "تَثَأْلَلْ"},
{"ind_1p", "نَتَثَأْلَلُ"},
{"ind_1s", "أَتَثَأْلَلُ"},
{"ind_2d", "تَتَثَأْلَلَانِ"},
{"ind_2fp", "تَتَثَأْلَلْنَ"},
{"ind_2fs", "تَتَثَأْلَلِينَ"},
{"ind_2mp", "تَتَثَأْلَلُونَ"},
{"ind_2ms", "تَتَثَأْلَلُ"},
{"ind_3fd", "تَتَثَأْلَلَانِ"},
{"ind_3fp", "يَتَثَأْلَلْنَ"},
{"ind_3fs", "تَتَثَأْلَلُ"},
{"ind_3md", "يَتَثَأْلَلَانِ"},
{"ind_3mp", "يَتَثَأْلَلُونَ"},
{"ind_3ms", "يَتَثَأْلَلُ"},
{"past_1p", "تَثَأْلَلْنَا"},
{"past_1s", "تَثَأْلَلْتُ"},
{"past_2d", "تَثَأْلَلْتُمَا"},
{"past_2fp", "تَثَأْلَلْتُنَّ"},
{"past_2fs", "تَثَأْلَلْتِ"},
{"past_2mp", "تَثَأْلَلْتُمْ"},
{"past_2ms", "تَثَأْلَلْتَ"},
{"past_3fd", "تَثَأْلَلَتَا"},
{"past_3fp", "تَثَأْلَلْنَ"},
{"past_3fs", "تَثَأْلَلَتْ"},
{"past_3md", "تَثَأْلَلَا"},
{"past_3mp", "تَثَأْلَلُوا"},
{"past_3ms", "تَثَأْلَلَ"},
},
},
{
label = "تَدَرْبَأَ (p420)", root = "دربأ", wazn = "تفعلل",
forms = {
{"imp_2d", "تَدَرْبَآ"},
{"imp_2fp", "تَدَرْبَأْنَ"},
{"imp_2fs", "تَدَرْبَئِي"},
{"imp_2mp", "تَدَرْبَؤُوا"},
{"imp_2ms", "تَدَرْبَأْ"},
{"ind_1p", "نَتَدَرْبَأُ"},
{"ind_1s", "أَتَدَرْبَأُ"},
{"ind_2d", "تَتَدَرْبَآنِ"},
{"ind_2fp", "تَتَدَرْبَأْنَ"},
{"ind_2fs", "تَتَدَرْبَئِينَ"},
{"ind_2mp", "تَتَدَرْبَؤُونَ"},
{"ind_2ms", "تَتَدَرْبَأُ"},
{"ind_3fd", "تَتَدَرْبَآنِ"},
{"ind_3fp", "يَتَدَرْبَأْنَ"},
{"ind_3fs", "تَتَدَرْبَأُ"},
{"ind_3md", "يَتَدَرْبَآنِ"},
{"ind_3mp", "يَتَدَرْبَؤُونَ"},
{"ind_3ms", "يَتَدَرْبَأُ"},
{"past_1p", "تَدَرْبَأْنَا"},
{"past_1s", "تَدَرْبَأْتُ"},
{"past_2d", "تَدَرْبَأْتُمَا"},
{"past_2fp", "تَدَرْبَأْتُنَّ"},
{"past_2fs", "تَدَرْبَأْتِ"},
{"past_2mp", "تَدَرْبَأْتُمْ"},
{"past_2ms", "تَدَرْبَأْتَ"},
{"past_3fd", "تَدَرْبَأَتَا"},
{"past_3fp", "تَدَرْبَأْنَ"},
{"past_3fs", "تَدَرْبَأَتْ"},
{"past_3md", "تَدَرْبَآ"},
{"past_3mp", "تَدَرْبَؤُوا"},
{"past_3ms", "تَدَرْبَأَ"},
},
},
{
label = "تَكَرْثَأَ (p420)", root = "كرثأ", wazn = "تفعلل",
forms = {
{"imp_2d", "تَكَرْثَآ"},
{"imp_2fp", "تَكَرْثَأْنَ"},
{"imp_2fs", "تَكَرْثَئِي"},
{"imp_2mp", "تَكَرْثَؤُوا"},
{"ind_1p", "نَتَكَرْثَأُ"},
{"ind_1s", "أَتَكَرْثَأُ"},
{"ind_2d", "تَتَكَرْثَآنِ"},
{"ind_2fp", "تَتَكَرْثَأْنَ"},
{"ind_2fs", "تَتَكَرْثَئِينَ"},
{"ind_2mp", "تَتَكَرْثَؤُونَ"},
{"ind_2ms", "تَتَكَرْثَأُ"},
{"ind_3fd", "تَتَكَرْثَآنِ"},
{"ind_3fp", "يَتَكَرْثَأْنَ"},
{"ind_3fs", "تَتَكَرْثَأُ"},
{"ind_3md", "يَتَكَرْثَآنِ"},
{"ind_3mp", "يَتَكَرْثَؤُونَ"},
{"ind_3ms", "يَتَكَرْثَأُ"},
{"past_1p", "تَكَرْثَأْنَا"},
{"past_1s", "تَكَرْثَأْتُ"},
{"past_2d", "تَكَرْثَأْتُمَا"},
{"past_2fp", "تَكَرْثَأْتُنَّ"},
{"past_2fs", "تَكَرْثَأْتِ"},
{"past_2mp", "تَكَرْثَأْتُمْ"},
{"past_2ms", "تَكَرْثَأْتَ"},
{"past_3fd", "تَكَرْثَأَتَا"},
{"past_3fp", "تَكَرْثَأْنَ"},
{"past_3fs", "تَكَرْثَأَتْ"},
{"past_3md", "تَكَرْثَآ"},
{"past_3mp", "تَكَرْثَؤُوا"},
{"past_3ms", "تَكَرْثَأَ"},
},
},
{
label = "تَوَكْوَكَ (p421)", root = "وكوك", wazn = "تفعلل",
forms = {
{"imp_2d", "تَوَكْوَكَا"},
{"imp_2fp", "تَوَكْوَكْنَ"},
{"imp_2fs", "تَوَكْوَكِي"},
{"imp_2mp", "تَوَكْوَكُوا"},
{"imp_2ms", "تَوَكْوَكْ"},
{"ind_1p", "نَتَوَكْوَكُ"},
{"ind_1s", "أَتَوَكْوَكُ"},
{"ind_2d", "تَتَوَكْوَكَانِ"},
{"ind_2fp", "تَتَوَكْوَكْنَ"},
{"ind_2fs", "تَتَوَكْوَكِينَ"},
{"ind_2mp", "تَتَوَكْوَكُونَ"},
{"ind_2ms", "تَتَوَكْوَكُ"},
{"ind_3fd", "تَتَوَكْوَكَانِ"},
{"ind_3fp", "يَتَوَكْوَكْنَ"},
{"ind_3fs", "تَتَوَكْوَكُ"},
{"ind_3md", "يَتَوَكْوَكَانِ"},
{"ind_3mp", "يَتَوَكْوَكُونَ"},
{"ind_3ms", "يَتَوَكْوَكُ"},
{"past_1p", "تَوَكْوَكْنَا"},
{"past_1s", "تَوَكْوَكْتُ"},
{"past_2d", "تَوَكْوَكْتُمَا"},
{"past_2fp", "تَوَكْوَكْتُنَّ"},
{"past_2fs", "تَوَكْوَكْتِ"},
{"past_2mp", "تَوَكْوَكْتُمْ"},
{"past_2ms", "تَوَكْوَكْتَ"},
{"past_3fd", "تَوَكْوَكَتَا"},
{"past_3fp", "تَوَكْوَكْنَ"},
{"past_3fs", "تَوَكْوَكَتْ"},
{"past_3md", "تَوَكْوَكَا"},
{"past_3mp", "تَوَكْوَكُوا"},
{"past_3ms", "تَوَكْوَكَ"},
},
},
{
label = "تَوَطْوَطَ (p421)", root = "وطوط", wazn = "تفعلل",
forms = {
{"imp_2d", "تَوَطْوَطَا"},
{"imp_2fp", "تَوَطْوَطْنَ"},
{"imp_2fs", "تَوَطْوَطِي"},
{"imp_2mp", "تَوَطْوَطُوا"},
{"imp_2ms", "تَوَطْوَطْ"},
{"ind_1p", "نَتَوَطْوَطُ"},
{"ind_1s", "أَتَوَطْوَطُ"},
{"ind_2d", "تَتَوَطْوَطَانِ"},
{"ind_2fp", "تَتَوَطْوَطْنَ"},
{"ind_2fs", "تَتَوَطْوَطِينَ"},
{"ind_2mp", "تَتَوَطْوَطُونَ"},
{"ind_2ms", "تَتَوَطْوَطُ"},
{"ind_3fd", "تَتَوَطْوَطَانِ"},
{"ind_3fp", "يَتَوَطْوَطْنَ"},
{"ind_3fs", "تَتَوَطْوَطُ"},
{"ind_3md", "يَتَوَطْوَطَانِ"},
{"ind_3mp", "يَتَوَطْوَطُونَ"},
{"ind_3ms", "يَتَوَطْوَطُ"},
{"past_1p", "تَوَطْوَطْنَا"},
{"past_1s", "تَوَطْوَطْتُ"},
{"past_2d", "تَوَطْوَطْتُمَا"},
{"past_2fp", "تَوَطْوَطْتُنَّ"},
{"past_2fs", "تَوَطْوَطْتِ"},
{"past_2mp", "تَوَطْوَطْتُمْ"},
{"past_2ms", "تَوَطْوَطْتَ"},
{"past_3fd", "تَوَطْوَطَتَا"},
{"past_3fp", "تَوَطْوَطْنَ"},
{"past_3fs", "تَوَطْوَطَتْ"},
{"past_3md", "تَوَطْوَطَا"},
{"past_3mp", "تَوَطْوَطُوا"},
{"past_3ms", "تَوَطْوَطَ"},
},
},
{
label = "تَجَوْرَبَ (p422)", root = "جورب", wazn = "تفعلل",
forms = {
{"imp_2d", "تَجَوْرَبَا"},
{"imp_2fp", "تَجَوْرَبْنَ"},
{"imp_2fs", "تَجَوْرَبِي"},
{"imp_2mp", "تَجَوْرَبُوا"},
{"imp_2ms", "تَجَوْرَبْ"},
{"ind_1p", "نَتَجَوْرَبُ"},
{"ind_1s", "أَتَجَوْرَبُ"},
{"ind_2d", "تَتَجَوْرَبَانِ"},
{"ind_2fp", "تَتَجَوْرَبْنَ"},
{"ind_2fs", "تَتَجَوْرَبِينَ"},
{"ind_2mp", "تَتَجَوْرَبُونَ"},
{"ind_2ms", "تَتَجَوْرَبُ"},
{"ind_3fd", "تَتَجَوْرَبَانِ"},
{"ind_3fp", "يَتَجَوْرَبْنَ"},
{"ind_3fs", "تَتَجَوْرَبُ"},
{"ind_3md", "يَتَجَوْرَبَانِ"},
{"ind_3mp", "يَتَجَوْرَبُونَ"},
{"ind_3ms", "يَتَجَوْرَبُ"},
{"past_1p", "تَجَوْرَبْنَا"},
{"past_1s", "تَجَوْرَبْتُ"},
{"past_2d", "تَجَوْرَبْتُمَا"},
{"past_2fp", "تَجَوْرَبْتُنَّ"},
{"past_2fs", "تَجَوْرَبْتِ"},
{"past_2mp", "تَجَوْرَبْتُمْ"},
{"past_2ms", "تَجَوْرَبْتَ"},
{"past_3fd", "تَجَوْرَبَتَا"},
{"past_3fp", "تَجَوْرَبْنَ"},
{"past_3fs", "تَجَوْرَبَتْ"},
{"past_3md", "تَجَوْرَبَا"},
{"past_3mp", "تَجَوْرَبُوا"},
{"past_3ms", "تَجَوْرَبَ"},
},
},
{
label = "تَسَرْوَلَ (p423)", root = "سرول", wazn = "تفعلل",
forms = {
{"imp_2d", "تَسَرْوَلَا"},
{"imp_2fp", "تَسَرْوَلْنَ"},
{"imp_2fs", "تَسَرْوَلِي"},
{"imp_2mp", "تَسَرْوَلُوا"},
{"imp_2ms", "تَسَرْوَلْ"},
{"ind_1p", "نَتَسَرْوَلُ"},
{"ind_1s", "أَتَسَرْوَلُ"},
{"ind_2d", "تَتَسَرْوَلَانِ"},
{"ind_2fp", "تَتَسَرْوَلْنَ"},
{"ind_2fs", "تَتَسَرْوَلِينَ"},
{"ind_2mp", "تَتَسَرْوَلُونَ"},
{"ind_2ms", "تَتَسَرْوَلُ"},
{"ind_3fd", "تَتَسَرْوَلَانِ"},
{"ind_3fp", "يَتَسَرْوَلْنَ"},
{"ind_3fs", "تَتَسَرْوَلُ"},
{"ind_3md", "يَتَسَرْوَلَانِ"},
{"ind_3mp", "يَتَسَرْوَلُونَ"},
{"ind_3ms", "يَتَسَرْوَلُ"},
{"past_1p", "تَسَرْوَلْنَا"},
{"past_1s", "تَسَرْوَلْتُ"},
{"past_2d", "تَسَرْوَلْتُمَا"},
{"past_2fp", "تَسَرْوَلْتُنَّ"},
{"past_2fs", "تَسَرْوَلْتِ"},
{"past_2mp", "تَسَرْوَلْتُمْ"},
{"past_2ms", "تَسَرْوَلْتَ"},
{"past_3fd", "تَسَرْوَلَتَا"},
{"past_3fp", "تَسَرْوَلْنَ"},
{"past_3fs", "تَسَرْوَلَتْ"},
{"past_3md", "تَسَرْوَلَا"},
{"past_3mp", "تَسَرْوَلُوا"},
{"past_3ms", "تَسَرْوَلَ"},
},
},
{
label = "تَحَمْيَرَ (p423)", root = "حمير", wazn = "تفعلل",
forms = {
{"imp_2d", "تَحَمْيَرَا"},
{"imp_2fp", "تَحَمْيَرْنَ"},
{"imp_2fs", "تَحَمْيَرِي"},
{"imp_2mp", "تَحَمْيَرُوا"},
{"imp_2ms", "تَحَمْيَرْ"},
{"ind_1p", "نَتَحَمْيَرُ"},
{"ind_1s", "أَتَحَمْيَرُ"},
{"ind_2d", "تَتَحَمْيَرَانِ"},
{"ind_2fp", "تَتَحَمْيَرْنَ"},
{"ind_2fs", "تَتَحَمْيَرِينَ"},
{"ind_2mp", "تَتَحَمْيَرُونَ"},
{"ind_2ms", "تَتَحَمْيَرُ"},
{"ind_3fd", "تَتَحَمْيَرَانِ"},
{"ind_3fp", "يَتَحَمْيَرْنَ"},
{"ind_3fs", "تَتَحَمْيَرُ"},
{"ind_3md", "يَتَحَمْيَرَانِ"},
{"ind_3mp", "يَتَحَمْيَرُونَ"},
{"ind_3ms", "يَتَحَمْيَرُ"},
{"past_1p", "تَحَمْيَرْنَا"},
{"past_1s", "تَحَمْيَرْتُ"},
{"past_2d", "تَحَمْيَرْتُمَا"},
{"past_2fp", "تَحَمْيَرْتُنَّ"},
{"past_2fs", "تَحَمْيَرْتِ"},
{"past_2mp", "تَحَمْيَرْتُمْ"},
{"past_2ms", "تَحَمْيَرْتَ"},
{"past_3fd", "تَحَمْيَرَتَا"},
{"past_3fp", "تَحَمْيَرْنَ"},
{"past_3fs", "تَحَمْيَرَتْ"},
{"past_3md", "تَحَمْيَرَا"},
{"past_3mp", "تَحَمْيَرُوا"},
{"past_3ms", "تَحَمْيَرَ"},
},
},
{
label = "اِحْرَنْجَمَ (p426)", root = "حرجم", wazn = "افعنلل",
forms = {
{"imp_2d", "اِحْرَنْجِمَا"},
{"imp_2fp", "اِحْرَنْجِمْنَ"},
{"imp_2fs", "اِحْرَنْجِمِي"},
{"imp_2mp", "اِحْرَنْجِمُوا"},
{"imp_2ms", "اِحْرَنْجِمْ"},
{"ind_1p", "نَحْرَنْجِمُ"},
{"ind_1s", "أَحْرَنْجِمُ"},
{"ind_2d", "تَحْرَنْجِمَانِ"},
{"ind_2fp", "تَحْرَنْجِمْنَ"},
{"ind_2fs", "تَحْرَنْجِمِينَ"},
{"ind_2mp", "تَحْرَنْجِمُونَ"},
{"ind_2ms", "تَحْرَنْجِمُ"},
{"ind_3fd", "تَحْرَنْجِمَانِ"},
{"ind_3fp", "يَحْرَنْجِمْنَ"},
{"ind_3fs", "تَحْرَنْجِمُ"},
{"ind_3md", "يَحْرَنْجِمَانِ"},
{"ind_3mp", "يَحْرَنْجِمُونَ"},
{"ind_3ms", "يَحْرَنْجِمُ"},
{"past_1p", "اِحْرَنْجَمْنَا"},
{"past_1s", "اِحْرَنْجَمْتُ"},
{"past_2d", "اِحْرَنْجَمْتُمَا"},
{"past_2fp", "اِحْرَنْجَمْتُنَّ"},
{"past_2fs", "اِحْرَنْجَمْتِ"},
{"past_2mp", "اِحْرَنْجَمْتُمْ"},
{"past_2ms", "اِحْرَنْجَمْتَ"},
{"past_3fd", "اِحْرَنْجَمَتَا"},
{"past_3fp", "اِحْرَنْجَمْنَ"},
{"past_3fs", "اِحْرَنْجَمَتْ"},
{"past_3md", "اِحْرَنْجَمَا"},
{"past_3mp", "اِحْرَنْجَمُوا"},
{"past_3ms", "اِحْرَنْجَمَ"},
},
},
{
label = "اِفْرَنْقَعَ (p426)", root = "فرقع", wazn = "افعنلل",
forms = {
{"imp_2d", "اِفْرَنْقِعَا"},
{"imp_2fp", "اِفْرَنْقِعْنَ"},
{"imp_2fs", "اِفْرَنْقِعِي"},
{"imp_2mp", "اِفْرَنْقِعُوا"},
{"imp_2ms", "اِفْرَنْقِعْ"},
{"ind_1p", "نَفْرَنْقِعُ"},
{"ind_1s", "أَفْرَنْقِعُ"},
{"ind_2d", "تَفْرَنْقِعَانِ"},
{"ind_2fp", "تَفْرَنْقِعْنَ"},
{"ind_2fs", "تَفْرَنْقِعِينَ"},
{"ind_2mp", "تَفْرَنْقِعُونَ"},
{"ind_2ms", "تَفْرَنْقِعُ"},
{"ind_3fd", "تَفْرَنْقِعَانِ"},
{"ind_3fp", "يَفْرَنْقِعْنَ"},
{"ind_3fs", "تَفْرَنْقِعُ"},
{"ind_3md", "يَفْرَنْقِعَانِ"},
{"ind_3mp", "يَفْرَنْقِعُونَ"},
{"ind_3ms", "يَفْرَنْقِعُ"},
{"past_1p", "اِفْرَنْقَعْنَا"},
{"past_1s", "اِفْرَنْقَعْتُ"},
{"past_2d", "اِفْرَنْقَعْتُمَا"},
{"past_2fp", "اِفْرَنْقَعْتُنَّ"},
{"past_2fs", "اِفْرَنْقَعْتِ"},
{"past_2mp", "اِفْرَنْقَعْتُمْ"},
{"past_2ms", "اِفْرَنْقَعْتَ"},
{"past_3fd", "اِفْرَنْقَعَتَا"},
{"past_3fp", "اِفْرَنْقَعْنَ"},
{"past_3fs", "اِفْرَنْقَعَتْ"},
{"past_3md", "اِفْرَنْقَعَا"},
{"past_3mp", "اِفْرَنْقَعُوا"},
{"past_3ms", "اِفْرَنْقَعَ"},
},
},
{
label = "اِسْلَنْطَأَ (p427)", root = "سلطأ", wazn = "افعنلل",
forms = {
{"imp_2d", "اِسْلَنْطِئَا"},
{"imp_2fp", "اِسْلَنْطِئْنَ"},
{"imp_2fs", "اِسْلَنْطِئِي"},
{"imp_2mp", "اِسْلَنْطِئُوا"},
{"imp_2ms", "اِسْلَنْطِئْ"},
{"ind_1p", "نَسْلَنْطِئُ"},
{"ind_1s", "أَسْلَنْطِئُ"},
{"ind_2d", "تَسْلَنْطِئَانِ"},
{"ind_2fp", "تَسْلَنْطِئْنَ"},
{"ind_2fs", "تَسْلَنْطِئِينَ"},
{"ind_2mp", "تَسْلَنْطِئُونَ"},
{"ind_2ms", "تَسْلَنْطِئُ"},
{"ind_3fd", "تَسْلَنْطِئَانِ"},
{"ind_3fp", "يَسْلَنْطِئْنَ"},
{"ind_3fs", "تَسْلَنْطِئُ"},
{"ind_3md", "يَسْلَنْطِئَانِ"},
{"ind_3mp", "يَسْلَنْطِئُونَ"},
{"ind_3ms", "يَسْلَنْطِئُ"},
{"past_1p", "اِسْلَنْطَأْنَا"},
{"past_1s", "اِسْلَنْطَأْتُ"},
{"past_2d", "اِسْلَنْطَأْتُمَا"},
{"past_2fp", "اِسْلَنْطَأْتُنَّ"},
{"past_2fs", "اِسْلَنْطَأْتِ"},
{"past_2mp", "اِسْلَنْطَأْتُمْ"},
{"past_2ms", "اِسْلَنْطَأْتَ"},
{"past_3fd", "اِسْلَنْطَأَتَا"},
{"past_3fp", "اِسْلَنْطَأْنَ"},
{"past_3fs", "اِسْلَنْطَأَتْ"},
{"past_3md", "اِسْلَنْطَآ"},
{"past_3mp", "اِسْلَنْطَؤُوا"},
{"past_3ms", "اِسْلَنْطَأَ"},
},
},
{
label = "اِطْلَنْفَأَ (p427)", root = "طلفأ", wazn = "افعنلل",
forms = {
{"imp_2d", "اِطْلَنْفِئَا"},
{"imp_2fp", "اِطْلَنْفِئْنَ"},
{"imp_2fs", "اِطْلَنْفِئِي"},
{"imp_2mp", "اِطْلَنْفِئُوا"},
{"imp_2ms", "اِطْلَنْفِئْ"},
{"ind_1p", "نَطْلَنْفِئُ"},
{"ind_1s", "أَطْلَنْفِئُ"},
{"ind_2d", "تَطْلَنْفِئَانِ"},
{"ind_2fp", "تَطْلَنْفِئْنَ"},
{"ind_2fs", "تَطْلَنْفِئِينَ"},
{"ind_2mp", "تَطْلَنْفِئُونَ"},
{"ind_2ms", "تَطْلَنْفِئُ"},
{"ind_3fd", "تَطْلَنْفِئَانِ"},
{"ind_3fp", "يَطْلَنْفِئْنَ"},
{"ind_3fs", "تَطْلَنْفِئُ"},
{"ind_3md", "يَطْلَنْفِئَانِ"},
{"ind_3mp", "يَطْلَنْفِئُونَ"},
{"ind_3ms", "يَطْلَنْفِئُ"},
{"past_1p", "اِطْلَنْفَأْنَا"},
{"past_1s", "اِطْلَنْفَأْتُ"},
{"past_2d", "اِطْلَنْفَأْتُمَا"},
{"past_2fp", "اِطْلَنْفَأْتُنَّ"},
{"past_2fs", "اِطْلَنْفَأْتِ"},
{"past_2mp", "اِطْلَنْفَأْتُمْ"},
{"past_2ms", "اِطْلَنْفَأْتَ"},
{"past_3fd", "اِطْلَنْفَأَتَا"},
{"past_3fp", "اِطْلَنْفَأْنَ"},
{"past_3fs", "اِطْلَنْفَأَتْ"},
{"past_3md", "اِطْلَنْفَآ"},
{"past_3mp", "اِطْلَنْفَؤُوا"},
{"past_3ms", "اِطْلَنْفَأَ"},
},
},
{
label = "اِقْشَعَرَّ (p431)", root = "قشعر", wazn = "افعللّ",
forms = {
{"imp_2d", "اِقْشَعِرَّا"},
{"imp_2fp", "اِقْشَعْرِرْنَ"},
{"imp_2fs", "اِقْشَعِرِّي"},
{"imp_2mp", "اِقْشَعِرُّوا"},
{"imp_2ms", "اِقْشَعْرِرْ"},
{"ind_1p", "نَقْشَعِرُّ"},
{"ind_1s", "أَقْشَعِرُّ"},
{"ind_2d", "تَقْشَعِرَّانِ"},
{"ind_2fp", "تَقْشَعْرِرْنَ"},
{"ind_2fs", "تَقْشَعِرِّينَ"},
{"ind_2mp", "تَقْشَعِرُّونَ"},
{"ind_2ms", "تَقْشَعِرُّ"},
{"ind_3fd", "تَقْشَعِرَّانِ"},
{"ind_3fp", "يَقْشَعْرِرْنَ"},
{"ind_3fs", "تَقْشَعِرُّ"},
{"ind_3md", "يَقْشَعِرَّانِ"},
{"ind_3mp", "يَقْشَعِرُّونَ"},
{"ind_3ms", "يَقْشَعِرُّ"},
{"past_1p", "اِقْشَعْرَرْنَا"},
{"past_1s", "اِقْشَعْرَرْتُ"},
{"past_2d", "اِقْشَعْرَرْتُمَا"},
{"past_2fp", "اِقْشَعْرَرْتُنَّ"},
{"past_2fs", "اِقْشَعْرَرْتِ"},
{"past_2mp", "اِقْشَعْرَرْتُمْ"},
{"past_2ms", "اِقْشَعْرَرْتَ"},
{"past_3fd", "اِقْشَعَرَّتَا"},
{"past_3fp", "اِقْشَعْرَرْنَ"},
{"past_3fs", "اِقْشَعَرَّتْ"},
{"past_3md", "اِقْشَعَرَّا"},
{"past_3mp", "اِقْشَعَرُّوا"},
{"past_3ms", "اِقْشَعَرَّ"},
},
},
{
label = "اِكْفَهَرَّ (p432)", root = "كفهر", wazn = "افعللّ",
forms = {
{"imp_2d", "اِكْفَهِرَّا"},
{"imp_2fp", "اِكْفَهْرِرْنَ"},
{"imp_2fs", "اِكْفَهِرِّي"},
{"imp_2mp", "اِكْفَهِرُّوا"},
{"imp_2ms", "اِكْفَهْرِرْ"},
{"ind_1p", "نَكْفَهِرُّ"},
{"ind_1s", "أَكْفَهِرُّ"},
{"ind_2d", "تَكْفَهِرَّانِ"},
{"ind_2fp", "تَكْفَهْرِرْنَ"},
{"ind_2fs", "تَكْفَهِرِّينَ"},
{"ind_2mp", "تَكْفَهِرُّونَ"},
{"ind_2ms", "تَكْفَهِرُّ"},
{"ind_3fd", "تَكْفَهِرَّانِ"},
{"ind_3fp", "يَكْفَهْرِرْنَ"},
{"ind_3fs", "تَكْفَهِرُّ"},
{"ind_3md", "يَكْفَهِرَّانِ"},
{"ind_3mp", "يَكْفَهِرُّونَ"},
{"ind_3ms", "يَكْفَهِرُّ"},
{"past_1p", "اِكْفَهْرَرْنَا"},
{"past_1s", "اِكْفَهْرَرْتُ"},
{"past_2d", "اِكْفَهْرَرْتُمَا"},
{"past_2fp", "اِكْفَهْرَرْتُنَّ"},
{"past_2fs", "اِكْفَهْرَرْتِ"},
{"past_2mp", "اِكْفَهْرَرْتُمْ"},
{"past_2ms", "اِكْفَهْرَرْتَ"},
{"past_3fd", "اِكْفَهَرَّتَا"},
{"past_3fp", "اِكْفَهْرَرْنَ"},
{"past_3fs", "اِكْفَهَرَّتْ"},
{"past_3md", "اِكْفَهَرَّا"},
{"past_3mp", "اِكْفَهَرُّوا"},
{"past_3ms", "اِكْفَهَرَّ"},
},
},
{
label = "اِضْمَحَلَّ (p432)", root = "ضمحل", wazn = "افعللّ",
forms = {
{"imp_2d", "اِضْمَحِلَّا"},
{"imp_2fp", "اِضْمَحْلِلْنَ"},
{"imp_2fs", "اِضْمَحِلِّي"},
{"imp_2mp", "اِضْمَحِلُّوا"},
{"imp_2ms", "اِضْمَحْلِلْ"},
{"ind_1p", "نَضْمَحِلُّ"},
{"ind_1s", "أَضْمَحِلُّ"},
{"ind_2d", "تَضْمَحِلَّانِ"},
{"ind_2fp", "تَضْمَحْلِلْنَ"},
{"ind_2fs", "تَضْمَحِلِّينَ"},
{"ind_2mp", "تَضْمَحِلُّونَ"},
{"ind_2ms", "تَضْمَحِلُّ"},
{"ind_3fd", "تَضْمَحِلَّانِ"},
{"ind_3fp", "يَضْمَحْلِلْنَ"},
{"ind_3fs", "تَضْمَحِلُّ"},
{"ind_3md", "يَضْمَحِلَّانِ"},
{"ind_3mp", "يَضْمَحِلُّونَ"},
{"ind_3ms", "يَضْمَحِلُّ"},
{"past_1p", "اِضْمَحْلَلْنَا"},
{"past_1s", "اِضْمَحْلَلْتُ"},
{"past_2d", "اِضْمَحْلَلْتُمَا"},
{"past_2fp", "اِضْمَحْلَلْتُنَّ"},
{"past_2fs", "اِضْمَحْلَلْتِ"},
{"past_2mp", "اِضْمَحْلَلْتُمْ"},
{"past_2ms", "اِضْمَحْلَلْتَ"},
{"past_3fd", "اِضْمَحَلَّتَا"},
{"past_3fp", "اِضْمَحْلَلْنَ"},
{"past_3fs", "اِضْمَحَلَّتْ"},
{"past_3md", "اِضْمَحَلَّا"},
{"past_3mp", "اِضْمَحَلُّوا"},
{"past_3ms", "اِضْمَحَلَّ"},
},
},
{
label = "اِزْرَأَمَّ (p433)", root = "زرأم", wazn = "افعللّ",
forms = {
{"imp_2d", "اِزْرَئِمَّا"},
{"imp_2fp", "اِزْرَأْمِمْنَ"},
{"imp_2fs", "اِزْرَئِمِّي"},
{"imp_2mp", "اِزْرَئِمُّوا"},
{"imp_2ms", "اِزْرَأْمِمْ"},
{"ind_1p", "نَزْرَئِمُّ"},
{"ind_1s", "أَزْرَئِمُّ"},
{"ind_2d", "تَزْرَئِمَّانِ"},
{"ind_2fp", "تَزْرَأْمِمْنَ"},
{"ind_2fs", "تَزْرَئِمِّينَ"},
{"ind_2mp", "تَزْرَئِمُّونَ"},
{"ind_2ms", "تَزْرَئِمُّ"},
{"ind_3fd", "تَزْرَئِمَّانِ"},
{"ind_3fp", "يَزْرَأْمِمْنَ"},
{"ind_3fs", "تَزْرَئِمُّ"},
{"ind_3md", "يَزْرَئِمَّانِ"},
{"ind_3mp", "يَزْرَئِمُّونَ"},
{"ind_3ms", "يَزْرَئِمُّ"},
{"past_1p", "اِزْرَأْمَمْنَا"},
{"past_1s", "اِزْرَأْمَمْتُ"},
{"past_2d", "اِزْرَأْمَمْتُمَا"},
{"past_2fp", "اِزْرَأْمَمْتُنَّ"},
{"past_2fs", "اِزْرَأْمَمْتِ"},
{"past_2mp", "اِزْرَأْمَمْتُمْ"},
{"past_2ms", "اِزْرَأْمَمْتَ"},
{"past_3fd", "اِزْرَأَمَّتَا"},
{"past_3fp", "اِزْرَأْمَمْنَ"},
{"past_3fs", "اِزْرَأَمَّتْ"},
{"past_3md", "اِزْرَأَمَّا"},
{"past_3mp", "اِزْرَأَمُّوا"},
{"past_3ms", "اِزْرَأَمَّ"},
},
},
{
label = "اِطْمَأَنَّ (p433)", root = "طمأن", wazn = "افعللّ",
forms = {
{"imp_2d", "اِطْمَئِنَّا"},
{"imp_2fp", "اِطْمَأْنِنَّ"},
{"imp_2fs", "اِطْمَئِنِّي"},
{"imp_2mp", "اِطْمَئِنُّوا"},
{"imp_2ms", "اِطْمَأْنِنْ"},
{"ind_1p", "نَطْمَئِنُّ"},
{"ind_1s", "أَطْمَئِنُّ"},
{"ind_2d", "تَطْمَئِنَّانِ"},
{"ind_2fp", "تَطْمَأْنِنَّ"},
{"ind_2fs", "تَطْمَئِنِّينَ"},
{"ind_2mp", "تَطْمَئِنُّونَ"},
{"ind_2ms", "تَطْمَئِنُّ"},
{"ind_3fd", "تَطْمَئِنَّانِ"},
{"ind_3fp", "يَطْمَأْنِنَّ"},
{"ind_3fs", "تَطْمَئِنُّ"},
{"ind_3md", "يَطْمَئِنَّانِ"},
{"ind_3mp", "يَطْمَئِنُّونَ"},
{"ind_3ms", "يَطْمَئِنُّ"},
{"past_1p", "اِطْمَأْنَنَّا"},
{"past_1s", "اِطْمَأْنَنْتُ"},
{"past_2d", "اِطْمَأْنَنْتُمَا"},
{"past_2fp", "اِطْمَأْنَنْتُنَّ"},
{"past_2fs", "اِطْمَأْنَنْتِ"},
{"past_2mp", "اِطْمَأْنَنْتُمْ"},
{"past_2ms", "اِطْمَأْنَنْتَ"},
{"past_3fd", "اِطْمَأَنَّتَا"},
{"past_3fp", "اِطْمَأْنَنَّ"},
{"past_3fs", "اِطْمَأَنَّتْ"},
{"past_3md", "اِطْمَأَنَّا"},
{"past_3mp", "اِطْمَأَنُّوا"},
{"past_3ms", "اِطْمَأَنَّ"},
},
},
{
label = "يَمَنَ ـُ (p.137، معتل الفاء مثال)", root = "يمن", wazn = "فعَل يفعُل",
pass = true,
forms = {
{"imp_2d", "اُومُنَا"},
{"imp_2fp", "اُومُنَّ"},
{"imp_2fs", "اُومُنِي"},
{"imp_2mp", "اُومُنُوا"},
{"imp_2ms", "اُومُنْ"},
{"ind_1p", "نَيْمُنُ"},
{"ind_1s", "أَيْمُنُ"},
{"ind_2d", "تَيْمُنَانِ"},
{"ind_2fp", "تَيْمُنَّ"},
{"ind_2fs", "تَيْمُنِينَ"},
{"ind_2mp", "تَيْمُنُونَ"},
{"ind_2ms", "تَيْمُنُ"},
{"ind_3fd", "تَيْمُنَانِ"},
{"ind_3fp", "يَيْمُنَّ"},
{"ind_3fs", "تَيْمُنُ"},
{"ind_3md", "يَيْمُنَانِ"},
{"ind_3mp", "يَيْمُنُونَ"},
{"ind_3ms", "يَيْمُنُ"},
{"ind_pass_1p", "نُومَنُ"},
{"ind_pass_1s", "أُومَنُ"},
{"ind_pass_2d", "تُومَنَانِ"},
{"ind_pass_2fp", "تُومَنَّ"},
{"ind_pass_2fs", "تُومَنِينَ"},
{"ind_pass_2mp", "تُومَنُونَ"},
{"ind_pass_2ms", "تُومَنُ"},
{"ind_pass_3fd", "تُومَنَانِ"},
{"ind_pass_3fp", "يُومَنَّ"},
{"ind_pass_3fs", "تُومَنُ"},
{"ind_pass_3md", "يُومَنَانِ"},
{"ind_pass_3mp", "يُومَنُونَ"},
{"ind_pass_3ms", "يُومَنُ"},
{"past_1p", "يَمَنَّا"},
{"past_1s", "يَمَنْتُ"},
{"past_2d", "يَمَنْتُمَا"},
{"past_2fp", "يَمَنْتُنَّ"},
{"past_2fs", "يَمَنْتِ"},
{"past_2mp", "يَمَنْتُمْ"},
{"past_2ms", "يَمَنْتَ"},
{"past_3fd", "يَمَنَتَا"},
{"past_3fp", "يَمَنَّ"},
{"past_3fs", "يَمَنَتْ"},
{"past_3md", "يَمَنَا"},
{"past_3mp", "يَمَنُوا"},
{"past_3ms", "يَمَنَ"},
{"past_pass_1p", "يُمِنَّا"},
{"past_pass_1s", "يُمِنْتُ"},
{"past_pass_2d", "يُمِنْتُمَا"},
{"past_pass_2fp", "يُمِنْتُنَّ"},
{"past_pass_2fs", "يُمِنْتِ"},
{"past_pass_2mp", "يُمِنْتُمْ"},
{"past_pass_2ms", "يُمِنْتَ"},
{"past_pass_3fd", "يُمِنَتَا"},
{"past_pass_3fp", "يُمِنَّ"},
{"past_pass_3fs", "يُمِنَتْ"},
{"past_pass_3md", "يُمِنَا"},
{"past_pass_3mp", "يُمِنُوا"},
{"past_pass_3ms", "يُمِنَ"},
},
},
{
label = "اِهْبَيَّخَ (p.415، افعنلل معتل اللام)", root = "هبيخ", wazn = "افعنلل",
reduced = true,
forms = {
{"imp_2d", "اِهْبَيِّخَا"},
{"imp_2fp", "اِهْبَيِّخْنَ"},
{"imp_2fs", "اِهْبَيِّخِي"},
{"imp_2mp", "اِهْبَيِّخُوا"},
{"imp_2ms", "اِهْبَيِّخْ"},
{"ind_1p", "نَهْبَيِّخُ"},
{"ind_1s", "أَهْبَيِّخُ"},
{"ind_2d", "تَهْبَيِّخَانِ"},
{"ind_2fp", "تَهْبَيِّخْنَ"},
{"ind_2fs", "تَهْبَيِّخِينَ"},
{"ind_2mp", "تَهْبَيِّخُونَ"},
{"ind_2ms", "تَهْبَيِّخُ"},
{"ind_3fd", "تَهْبَيِّخَانِ"},
{"ind_3fp", "يَهْبَيِّخْنَ"},
{"ind_3fs", "تَهْبَيِّخُ"},
{"ind_3md", "يَهْبَيِّخَانِ"},
{"ind_3mp", "يَهْبَيِّخُونَ"},
{"ind_3ms", "يَهْبَيِّخُ"},
{"past_1p", "اِهْبَيَّخْنَا"},
{"past_1s", "اِهْبَيَّخْتُ"},
{"past_2d", "اِهْبَيَّخْتُمَا"},
{"past_2fp", "اِهْبَيَّخْتُنَّ"},
{"past_2fs", "اِهْبَيَّخْتِ"},
{"past_2mp", "اِهْبَيَّخْتُمْ"},
{"past_2ms", "اِهْبَيَّخْتَ"},
{"past_3fd", "اِهْبَيَّخَتَا"},
{"past_3fp", "اِهْبَيَّخْنَ"},
{"past_3fs", "اِهْبَيَّخَتْ"},
{"past_3md", "اِهْبَيَّخَا"},
{"past_3mp", "اِهْبَيَّخُوا"},
{"past_3ms", "اِهْبَيَّخَ"},
},
},
{
label = "أَخا (p160)", root = "أخو", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "اُؤْخُوَا"},
{"imp_2fp", "اُؤْخُونَ"},
{"imp_2fs", "اُؤْخِي"},
{"imp_2mp", "اُؤْخُوا"},
{"imp_2ms", "اُؤْخُ"},
{"ind_1p", "نَأْخُو"},
{"ind_1s", "آخُو"},
{"ind_2d", "تَأْخُوَانِ"},
{"ind_2fp", "تَأْخُونَ"},
{"ind_2fs", "تَأْخِينَ"},
{"ind_2mp", "تَأْخُونَ"},
{"ind_2ms", "تَأْخُو"},
{"ind_3fd", "تَأْخُوَانِ"},
{"ind_3fp", "يَأْخُونَ"},
{"ind_3fs", "تَأْخُو"},
{"ind_3md", "يَأْخُوَانِ"},
{"ind_3mp", "يَأْخُونَ"},
{"ind_3ms", "يَأْخُو"},
{"past_1p", "أَخَوْنَا"},
{"past_1s", "أَخَوْتُ"},
{"past_2d", "أَخَوْتُمَا"},
{"past_2fp", "أَخَوْتُنَّ"},
{"past_2fs", "أَخَوْتِ"},
{"past_2mp", "أَخَوْتُمْ"},
{"past_2ms", "أَخَوْتَ"},
{"past_3fd", "أَخَتَا"},
{"past_3fp", "أَخَوْنَ"},
{"past_3fs", "أَخَتْ"},
{"past_3md", "أَخَوَا"},
{"past_3mp", "أَخَوْا"},
{"past_3ms", "أَخَا"},
},
},
{
label = "آضَ (p177)", root = "أيض", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "إِيضَا"},
{"imp_2fp", "إِضْنَ"},
{"imp_2fs", "إِيضِي"},
{"imp_2mp", "إِيضُوا"},
{"imp_2ms", "إِضْ"},
{"ind_1p", "نَئِيضُ"},
{"ind_1s", "أَئِيضُ"},
{"ind_2d", "تَئِيضَانِ"},
{"ind_2fp", "تَئِضْنَ"},
{"ind_2fs", "تَئِيضِينَ"},
{"ind_2mp", "تَئِيضُونَ"},
{"ind_2ms", "تَئِيضُ"},
{"ind_3fd", "تَئِيضَانِ"},
{"ind_3fp", "يَئِضْنَ"},
{"ind_3fs", "تَئِيضُ"},
{"ind_3md", "يَئِيضَانِ"},
{"ind_3mp", "يَئِيضُونَ"},
{"ind_3ms", "يَئِيضُ"},
{"past_1p", "إِضْنَا"},
{"past_1s", "إِضْتُ"},
{"past_2d", "إِضْتُمَا"},
{"past_2fp", "إِضْتُنَّ"},
{"past_2fs", "إِضْتِ"},
{"past_2mp", "إِضْتُمْ"},
{"past_2ms", "إِضْتَ"},
{"past_3fd", "آضَتَا"},
{"past_3fp", "إِضْنَ"},
{"past_3fs", "آضَتْ"},
{"past_3md", "آضَا"},
{"past_3mp", "آضُوا"},
{"past_3ms", "آضَ"},
},
},
{
label = "وَبَأَ (p199)", root = "وبأ", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "اِيبَآ"},
{"imp_2fp", "اِيبَأْنَ"},
{"imp_2fs", "اِيبَئِي"},
{"imp_2mp", "اِيبَؤُوا"},
{"imp_2ms", "اِيبَأْ"},
{"ind_1p", "نَوْبَأُ"},
{"ind_1s", "أَوْبَأُ"},
{"ind_2d", "تَوْبَآنِ"},
{"ind_2fp", "تَوْبَأْنَ"},
{"ind_2fs", "تَوْبَئِينَ"},
{"ind_2mp", "تَوْبَؤُونَ"},
{"ind_2ms", "تَوْبَأُ"},
{"ind_3fd", "تَوْبَآنِ"},
{"ind_3fp", "يَوْبَأْنَ"},
{"ind_3fs", "تَوْبَأُ"},
{"ind_3md", "يَوْبَآنِ"},
{"ind_3mp", "يَوْبَؤُونَ"},
{"ind_3ms", "يَوْبَأُ"},
{"past_1p", "وَبَأْنَا"},
{"past_1s", "وَبَأْتُ"},
{"past_2d", "وَبَأْتُمَا"},
{"past_2fp", "وَبَأْتُنَّ"},
{"past_2fs", "وَبَأْتِ"},
{"past_2mp", "وَبَأْتُمْ"},
{"past_2ms", "وَبَأْتَ"},
{"past_3fd", "وَبَأَتَا"},
{"past_3fp", "وَبَأْنَ"},
{"past_3fs", "وَبَأَتْ"},
{"past_3md", "وَبَآ"},
{"past_3mp", "وَبَؤُوا"},
{"past_3ms", "وَبَأَ"},
},
},
{
label = "فَأَى (p205)", root = "فأي", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "اِفْأَيَا"},
{"imp_2fp", "اِفْأَيْنَ"},
{"imp_2fs", "اِفْأَيْ"},
{"imp_2mp", "اِفْأَوْا"},
{"imp_2ms", "اِفْأَ"},
{"ind_1p", "نَفْأَى"},
{"ind_1s", "أَفْأَى"},
{"ind_2d", "تَفْأَيَانِ"},
{"ind_2fp", "تَفْأَيْنَ"},
{"ind_2fs", "تَفْأَيْنَ"},
{"ind_2mp", "تَفْأَوْنَ"},
{"ind_2ms", "تَفْأَى"},
{"ind_3fd", "تَفْأَيَانِ"},
{"ind_3fp", "يَفْأَيْنَ"},
{"ind_3fs", "تَفْأَى"},
{"ind_3md", "يَفْأَيَانِ"},
{"ind_3mp", "يَفْأَوْنَ"},
{"ind_3ms", "يَفْأَى"},
{"past_1p", "فَأَيْنَا"},
{"past_1s", "فَأَيْتُ"},
{"past_2d", "فَأَيْتُمَا"},
{"past_2fp", "فَأَيْتُنَّ"},
{"past_2fs", "فَأَيْتِ"},
{"past_2mp", "فَأَيْتُمْ"},
{"past_2ms", "فَأَيْتَ"},
{"past_3fd", "فَأَتَا"},
{"past_3fp", "فَأَيْنَ"},
{"past_3fs", "فَأَتْ"},
{"past_3md", "فَأَيَا"},
{"past_3mp", "فَأَوْا"},
{"past_3ms", "فَأَى"},
},
},
{
label = "بَدَّلَ (p260)", root = "بدل", wazn = "فعّل",
forms = {
{"imp_2d", "بَدِّلَا"},
{"imp_2fp", "بَدِّلْنَ"},
{"imp_2fs", "بَدِّلِي"},
{"imp_2mp", "بَدِّلُوا"},
{"imp_2ms", "بَدِّلْ"},
{"ind_1p", "نُبَدِّلُ"},
{"ind_1s", "أُبَدِّلُ"},
{"ind_2d", "تُبَدِّلَانِ"},
{"ind_2fp", "تُبَدِّلْنَ"},
{"ind_2fs", "تُبَدِّلِينَ"},
{"ind_2mp", "تُبَدِّلُونَ"},
{"ind_2ms", "تُبَدِّلُ"},
{"ind_3fd", "تُبَدِّلَانِ"},
{"ind_3fp", "يُبَدِّلْنَ"},
{"ind_3fs", "تُبَدِّلُ"},
{"ind_3md", "يُبَدِّلَانِ"},
{"ind_3mp", "يُبَدِّلُونَ"},
{"ind_3ms", "يُبَدِّلُ"},
{"past_1p", "بَدَّلْنَا"},
{"past_1s", "بَدَّلْتُ"},
{"past_2d", "بَدَّلْتُمَا"},
{"past_2fp", "بَدَّلْتُنَّ"},
{"past_2fs", "بَدَّلْتِ"},
{"past_2mp", "بَدَّلْتُمْ"},
{"past_2ms", "بَدَّلْتَ"},
{"past_3fd", "بَدَّلَتَا"},
{"past_3fp", "بَدَّلْنَ"},
{"past_3fs", "بَدَّلَتْ"},
{"past_3md", "بَدَّلَا"},
{"past_3mp", "بَدَّلُوا"},
{"past_3ms", "بَدَّلَ"},
},
},
{
label = "أَمَّمَ (p262)", root = "أمم", wazn = "فعّل",
forms = {
{"imp_2d", "أَمِّمَا"},
{"imp_2fp", "أَمِّمْنَ"},
{"imp_2fs", "أَمِّمِي"},
{"imp_2mp", "أَمِّمُوا"},
{"imp_2ms", "أَمِّمْ"},
{"ind_1p", "نُؤَمِّمُ"},
{"ind_1s", "أُؤَمِّمُ"},
{"ind_2d", "تُؤَمِّمَانِ"},
{"ind_2fp", "تُؤَمِّمْنَ"},
{"ind_2fs", "تُؤَمِّمِينَ"},
{"ind_2mp", "تُؤَمِّمُونَ"},
{"ind_2ms", "تُؤَمِّمُ"},
{"ind_3fd", "تُؤَمِّمَانِ"},
{"ind_3fp", "يُؤَمِّمْنَ"},
{"ind_3fs", "تُؤَمِّمُ"},
{"ind_3md", "يُؤَمِّمَانِ"},
{"ind_3mp", "يُؤَمِّمُونَ"},
{"ind_3ms", "يُؤَمِّمُ"},
{"past_1p", "أَمَّمْنَا"},
{"past_1s", "أَمَّمْتُ"},
{"past_2d", "أَمَّمْتُمَا"},
{"past_2fp", "أَمَّمْتُنَّ"},
{"past_2fs", "أَمَّمْتِ"},
{"past_2mp", "أَمَّمْتُمْ"},
{"past_2ms", "أَمَّمْتَ"},
{"past_3fd", "أَمَّمَتَا"},
{"past_3fp", "أَمَّمْنَ"},
{"past_3fs", "أَمَّمَتْ"},
{"past_3md", "أَمَّمَا"},
{"past_3mp", "أَمَّمُوا"},
{"past_3ms", "أَمَّمَ"},
},
},
{
label = "جَنَّنَ (p262)", root = "جنن", wazn = "فعّل",
forms = {
{"imp_2d", "جَنِّنَا"},
{"imp_2fp", "جَنِّنَّ"},
{"imp_2fs", "جَنِّنِي"},
{"imp_2mp", "جَنِّنُوا"},
{"imp_2ms", "جَنِّنْ"},
{"ind_1p", "نُجَنِّنُ"},
{"ind_1s", "أُجَنِّنُ"},
{"ind_2d", "تُجَنِّنَانِ"},
{"ind_2fp", "تُجَنِّنَّ"},
{"ind_2fs", "تُجَنِّنِينَ"},
{"ind_2mp", "تُجَنِّنُونَ"},
{"ind_2ms", "تُجَنِّنُ"},
{"ind_3fd", "تُجَنِّنَانِ"},
{"ind_3fp", "يُجَنِّنَّ"},
{"ind_3fs", "تُجَنِّنُ"},
{"ind_3md", "يُجَنِّنَانِ"},
{"ind_3mp", "يُجَنِّنُونَ"},
{"ind_3ms", "يُجَنِّنُ"},
{"past_1p", "جَنَّنَّا"},
{"past_1s", "جَنَّنْتُ"},
{"past_2d", "جَنَّنْتُمَا"},
{"past_2fp", "جَنَّنْتُنَّ"},
{"past_2fs", "جَنَّنْتِ"},
{"past_2mp", "جَنَّنْتُمْ"},
{"past_2ms", "جَنَّنْتَ"},
{"past_3fd", "جَنَّنَتَا"},
{"past_3fp", "جَنَّنَّ"},
{"past_3fs", "جَنَّنَتْ"},
{"past_3md", "جَنَّنَا"},
{"past_3mp", "جَنَّنُوا"},
{"past_3ms", "جَنَّنَ"},
},
},
{
label = "أَيَّدَ (p268)", root = "أيد", wazn = "فعّل",
forms = {
{"imp_2d", "أَيِّدَا"},
{"imp_2fp", "أَيِّدْنَ"},
{"imp_2fs", "أَيِّدِي"},
{"imp_2mp", "أَيِّدُوا"},
{"imp_2ms", "أَيِّدْ"},
{"ind_1p", "نُؤَيِّدُ"},
{"ind_1s", "أُؤَيِّدُ"},
{"ind_2d", "تُؤَيِّدَانِ"},
{"ind_2fp", "تُؤَيِّدْنَ"},
{"ind_2fs", "تُؤَيِّدِينَ"},
{"ind_2mp", "تُؤَيِّدُونَ"},
{"ind_2ms", "تُؤَيِّدُ"},
{"ind_3fd", "تُؤَيِّدَانِ"},
{"ind_3fp", "يُؤَيِّدْنَ"},
{"ind_3fs", "تُؤَيِّدُ"},
{"ind_3md", "يُؤَيِّدَانِ"},
{"ind_3mp", "يُؤَيِّدُونَ"},
{"ind_3ms", "يُؤَيِّدُ"},
{"past_1p", "أَيَّدْنَا"},
{"past_1s", "أَيَّدْتُ"},
{"past_2d", "أَيَّدْتُمَا"},
{"past_2fp", "أَيَّدْتُنَّ"},
{"past_2fs", "أَيَّدْتِ"},
{"past_2mp", "أَيَّدْتُمْ"},
{"past_2ms", "أَيَّدْتَ"},
{"past_3fd", "أَيَّدَتَا"},
{"past_3fp", "أَيَّدْنَ"},
{"past_3fs", "أَيَّدَتْ"},
{"past_3md", "أَيَّدَا"},
{"past_3mp", "أَيَّدُوا"},
{"past_3ms", "أَيَّدَ"},
},
},
{
label = "فارَرَ (p277)", root = "فرر", wazn = "فاعل",
forms = {
{"imp_2d", "فَارِرَا"},
{"imp_2fp", "فَارِرْنَ"},
{"imp_2fs", "فَارِرِي"},
{"imp_2mp", "فَارِرُوا"},
{"imp_2ms", "فَارِرْ"},
{"ind_1p", "نُفَارِرُ"},
{"ind_1s", "أُفَارِرُ"},
{"ind_2d", "تُفَارِرَانِ"},
{"ind_2fp", "تُفَارِرْنَ"},
{"ind_2fs", "تُفَارِرِينَ"},
{"ind_2mp", "تُفَارِرُونَ"},
{"ind_2ms", "تُفَارِرُ"},
{"ind_3fd", "تُفَارِرَانِ"},
{"ind_3fp", "يُفَارِرْنَ"},
{"ind_3fs", "تُفَارِرُ"},
{"ind_3md", "يُفَارِرَانِ"},
{"ind_3mp", "يُفَارِرُونَ"},
{"ind_3ms", "يُفَارِرُ"},
{"past_1p", "فَارَرْنَا"},
{"past_1s", "فَارَرْتُ"},
{"past_2d", "فَارَرْتُمَا"},
{"past_2fp", "فَارَرْتُنَّ"},
{"past_2fs", "فَارَرْتِ"},
{"past_2mp", "فَارَرْتُمْ"},
{"past_2ms", "فَارَرْتَ"},
{"past_3fd", "فَارَرَتَا"},
{"past_3fp", "فَارَرْنَ"},
{"past_3fs", "فَارَرَتْ"},
{"past_3md", "فَارَرَا"},
{"past_3mp", "فَارَرُوا"},
{"past_3ms", "فَارَرَ"},
},
},
}
13vh165zjxlwo17ssu4bbk3msfu9ilz
1159095
1159037
2026-09-10T19:34:26Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159095
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 13 من 16.
return {
{
label = "تَجَفْجَفَ (p418)", root = "جفجف", wazn = "تفعلل",
forms = {
{"imp_2d", "تَجَفْجَفَا"},
{"imp_2fp", "تَجَفْجَفْنَ"},
{"imp_2fs", "تَجَفْجَفِي"},
{"imp_2mp", "تَجَفْجَفُوا"},
{"imp_2ms", "تَجَفْجَفْ"},
{"ind_1p", "نَتَجَفْجَفُ"},
{"ind_1s", "أَتَجَفْجَفُ"},
{"ind_2d", "تَتَجَفْجَفَانِ"},
{"ind_2fp", "تَتَجَفْجَفْنَ"},
{"ind_2fs", "تَتَجَفْجَفِينَ"},
{"ind_2mp", "تَتَجَفْجَفُونَ"},
{"ind_2ms", "تَتَجَفْجَفُ"},
{"ind_3fd", "تَتَجَفْجَفَانِ"},
{"ind_3fp", "يَتَجَفْجَفْنَ"},
{"ind_3fs", "تَتَجَفْجَفُ"},
{"ind_3md", "يَتَجَفْجَفَانِ"},
{"ind_3mp", "يَتَجَفْجَفُونَ"},
{"ind_3ms", "يَتَجَفْجَفُ"},
{"past_1p", "تَجَفْجَفْنَا"},
{"past_1s", "تَجَفْجَفْتُ"},
{"past_2d", "تَجَفْجَفْتُمَا"},
{"past_2fp", "تَجَفْجَفْتُنَّ"},
{"past_2fs", "تَجَفْجَفْتِ"},
{"past_2mp", "تَجَفْجَفْتُمْ"},
{"past_2ms", "تَجَفْجَفْتَ"},
{"past_3fd", "تَجَفْجَفَتَا"},
{"past_3fp", "تَجَفْجَفْنَ"},
{"past_3fs", "تَجَفْجَفَتْ"},
{"past_3md", "تَجَفْجَفَا"},
{"past_3mp", "تَجَفْجَفُوا"},
{"past_3ms", "تَجَفْجَفَ"},
},
},
{
label = "تَرَأْبَلَ (p419)", root = "رأبل", wazn = "تفعلل",
forms = {
{"imp_2d", "تَرَأْبَلَا"},
{"imp_2fp", "تَرَأْبَلْنَ"},
{"imp_2fs", "تَرَأْبَلِي"},
{"imp_2mp", "تَرَأْبَلُوا"},
{"imp_2ms", "تَرَأْبَلْ"},
{"ind_1p", "نَتَرَأْبَلُ"},
{"ind_1s", "أَتَرَأْبَلُ"},
{"ind_2d", "تَتَرَأْبَلَانِ"},
{"ind_2fp", "تَتَرَأْبَلْنَ"},
{"ind_2fs", "تَتَرَأْبَلِينَ"},
{"ind_2mp", "تَتَرَأْبَلُونَ"},
{"ind_2ms", "تَتَرَأْبَلُ"},
{"ind_3fd", "تَتَرَأْبَلَانِ"},
{"ind_3fp", "يَتَرَأْبَلْنَ"},
{"ind_3fs", "تَتَرَأْبَلُ"},
{"ind_3md", "يَتَرَأْبَلَانِ"},
{"ind_3mp", "يَتَرَأْبَلُونَ"},
{"ind_3ms", "يَتَرَأْبَلُ"},
{"past_1p", "تَرَأْبَلْنَا"},
{"past_1s", "تَرَأْبَلْتُ"},
{"past_2d", "تَرَأْبَلْتُمَا"},
{"past_2fp", "تَرَأْبَلْتُنَّ"},
{"past_2fs", "تَرَأْبَلْتِ"},
{"past_2mp", "تَرَأْبَلْتُمْ"},
{"past_2ms", "تَرَأْبَلْتَ"},
{"past_3fd", "تَرَأْبَلَتَا"},
{"past_3fp", "تَرَأْبَلْنَ"},
{"past_3fs", "تَرَأْبَلَتْ"},
{"past_3md", "تَرَأْبَلَا"},
{"past_3mp", "تَرَأْبَلُوا"},
{"past_3ms", "تَرَأْبَلَ"},
},
},
{
label = "تَثَأْلَلَ (p419)", root = "ثألل", wazn = "تفعلل",
forms = {
{"imp_2d", "تَثَأْلَلَا"},
{"imp_2fp", "تَثَأْلَلْنَ"},
{"imp_2fs", "تَثَأْلَلِي"},
{"imp_2mp", "تَثَأْلَلُوا"},
{"imp_2ms", "تَثَأْلَلْ"},
{"ind_1p", "نَتَثَأْلَلُ"},
{"ind_1s", "أَتَثَأْلَلُ"},
{"ind_2d", "تَتَثَأْلَلَانِ"},
{"ind_2fp", "تَتَثَأْلَلْنَ"},
{"ind_2fs", "تَتَثَأْلَلِينَ"},
{"ind_2mp", "تَتَثَأْلَلُونَ"},
{"ind_2ms", "تَتَثَأْلَلُ"},
{"ind_3fd", "تَتَثَأْلَلَانِ"},
{"ind_3fp", "يَتَثَأْلَلْنَ"},
{"ind_3fs", "تَتَثَأْلَلُ"},
{"ind_3md", "يَتَثَأْلَلَانِ"},
{"ind_3mp", "يَتَثَأْلَلُونَ"},
{"ind_3ms", "يَتَثَأْلَلُ"},
{"past_1p", "تَثَأْلَلْنَا"},
{"past_1s", "تَثَأْلَلْتُ"},
{"past_2d", "تَثَأْلَلْتُمَا"},
{"past_2fp", "تَثَأْلَلْتُنَّ"},
{"past_2fs", "تَثَأْلَلْتِ"},
{"past_2mp", "تَثَأْلَلْتُمْ"},
{"past_2ms", "تَثَأْلَلْتَ"},
{"past_3fd", "تَثَأْلَلَتَا"},
{"past_3fp", "تَثَأْلَلْنَ"},
{"past_3fs", "تَثَأْلَلَتْ"},
{"past_3md", "تَثَأْلَلَا"},
{"past_3mp", "تَثَأْلَلُوا"},
{"past_3ms", "تَثَأْلَلَ"},
},
},
{
label = "تَدَرْبَأَ (p420)", root = "دربأ", wazn = "تفعلل",
forms = {
{"imp_2d", "تَدَرْبَآ"},
{"imp_2fp", "تَدَرْبَأْنَ"},
{"imp_2fs", "تَدَرْبَئِي"},
{"imp_2mp", "تَدَرْبَؤُوا"},
{"imp_2ms", "تَدَرْبَأْ"},
{"ind_1p", "نَتَدَرْبَأُ"},
{"ind_1s", "أَتَدَرْبَأُ"},
{"ind_2d", "تَتَدَرْبَآنِ"},
{"ind_2fp", "تَتَدَرْبَأْنَ"},
{"ind_2fs", "تَتَدَرْبَئِينَ"},
{"ind_2mp", "تَتَدَرْبَؤُونَ"},
{"ind_2ms", "تَتَدَرْبَأُ"},
{"ind_3fd", "تَتَدَرْبَآنِ"},
{"ind_3fp", "يَتَدَرْبَأْنَ"},
{"ind_3fs", "تَتَدَرْبَأُ"},
{"ind_3md", "يَتَدَرْبَآنِ"},
{"ind_3mp", "يَتَدَرْبَؤُونَ"},
{"ind_3ms", "يَتَدَرْبَأُ"},
{"past_1p", "تَدَرْبَأْنَا"},
{"past_1s", "تَدَرْبَأْتُ"},
{"past_2d", "تَدَرْبَأْتُمَا"},
{"past_2fp", "تَدَرْبَأْتُنَّ"},
{"past_2fs", "تَدَرْبَأْتِ"},
{"past_2mp", "تَدَرْبَأْتُمْ"},
{"past_2ms", "تَدَرْبَأْتَ"},
{"past_3fd", "تَدَرْبَأَتَا"},
{"past_3fp", "تَدَرْبَأْنَ"},
{"past_3fs", "تَدَرْبَأَتْ"},
{"past_3md", "تَدَرْبَآ"},
{"past_3mp", "تَدَرْبَؤُوا"},
{"past_3ms", "تَدَرْبَأَ"},
},
},
{
label = "تَكَرْثَأَ (p420)", root = "كرثأ", wazn = "تفعلل",
forms = {
{"imp_2d", "تَكَرْثَآ"},
{"imp_2fp", "تَكَرْثَأْنَ"},
{"imp_2fs", "تَكَرْثَئِي"},
{"imp_2mp", "تَكَرْثَؤُوا"},
{"ind_1p", "نَتَكَرْثَأُ"},
{"ind_1s", "أَتَكَرْثَأُ"},
{"ind_2d", "تَتَكَرْثَآنِ"},
{"ind_2fp", "تَتَكَرْثَأْنَ"},
{"ind_2fs", "تَتَكَرْثَئِينَ"},
{"ind_2mp", "تَتَكَرْثَؤُونَ"},
{"ind_2ms", "تَتَكَرْثَأُ"},
{"ind_3fd", "تَتَكَرْثَآنِ"},
{"ind_3fp", "يَتَكَرْثَأْنَ"},
{"ind_3fs", "تَتَكَرْثَأُ"},
{"ind_3md", "يَتَكَرْثَآنِ"},
{"ind_3mp", "يَتَكَرْثَؤُونَ"},
{"ind_3ms", "يَتَكَرْثَأُ"},
{"past_1p", "تَكَرْثَأْنَا"},
{"past_1s", "تَكَرْثَأْتُ"},
{"past_2d", "تَكَرْثَأْتُمَا"},
{"past_2fp", "تَكَرْثَأْتُنَّ"},
{"past_2fs", "تَكَرْثَأْتِ"},
{"past_2mp", "تَكَرْثَأْتُمْ"},
{"past_2ms", "تَكَرْثَأْتَ"},
{"past_3fd", "تَكَرْثَأَتَا"},
{"past_3fp", "تَكَرْثَأْنَ"},
{"past_3fs", "تَكَرْثَأَتْ"},
{"past_3md", "تَكَرْثَآ"},
{"past_3mp", "تَكَرْثَؤُوا"},
{"past_3ms", "تَكَرْثَأَ"},
},
},
{
label = "تَوَكْوَكَ (p421)", root = "وكوك", wazn = "تفعلل",
forms = {
{"imp_2d", "تَوَكْوَكَا"},
{"imp_2fp", "تَوَكْوَكْنَ"},
{"imp_2fs", "تَوَكْوَكِي"},
{"imp_2mp", "تَوَكْوَكُوا"},
{"imp_2ms", "تَوَكْوَكْ"},
{"ind_1p", "نَتَوَكْوَكُ"},
{"ind_1s", "أَتَوَكْوَكُ"},
{"ind_2d", "تَتَوَكْوَكَانِ"},
{"ind_2fp", "تَتَوَكْوَكْنَ"},
{"ind_2fs", "تَتَوَكْوَكِينَ"},
{"ind_2mp", "تَتَوَكْوَكُونَ"},
{"ind_2ms", "تَتَوَكْوَكُ"},
{"ind_3fd", "تَتَوَكْوَكَانِ"},
{"ind_3fp", "يَتَوَكْوَكْنَ"},
{"ind_3fs", "تَتَوَكْوَكُ"},
{"ind_3md", "يَتَوَكْوَكَانِ"},
{"ind_3mp", "يَتَوَكْوَكُونَ"},
{"ind_3ms", "يَتَوَكْوَكُ"},
{"past_1p", "تَوَكْوَكْنَا"},
{"past_1s", "تَوَكْوَكْتُ"},
{"past_2d", "تَوَكْوَكْتُمَا"},
{"past_2fp", "تَوَكْوَكْتُنَّ"},
{"past_2fs", "تَوَكْوَكْتِ"},
{"past_2mp", "تَوَكْوَكْتُمْ"},
{"past_2ms", "تَوَكْوَكْتَ"},
{"past_3fd", "تَوَكْوَكَتَا"},
{"past_3fp", "تَوَكْوَكْنَ"},
{"past_3fs", "تَوَكْوَكَتْ"},
{"past_3md", "تَوَكْوَكَا"},
{"past_3mp", "تَوَكْوَكُوا"},
{"past_3ms", "تَوَكْوَكَ"},
},
},
{
label = "تَوَطْوَطَ (p421)", root = "وطوط", wazn = "تفعلل",
forms = {
{"imp_2d", "تَوَطْوَطَا"},
{"imp_2fp", "تَوَطْوَطْنَ"},
{"imp_2fs", "تَوَطْوَطِي"},
{"imp_2mp", "تَوَطْوَطُوا"},
{"imp_2ms", "تَوَطْوَطْ"},
{"ind_1p", "نَتَوَطْوَطُ"},
{"ind_1s", "أَتَوَطْوَطُ"},
{"ind_2d", "تَتَوَطْوَطَانِ"},
{"ind_2fp", "تَتَوَطْوَطْنَ"},
{"ind_2fs", "تَتَوَطْوَطِينَ"},
{"ind_2mp", "تَتَوَطْوَطُونَ"},
{"ind_2ms", "تَتَوَطْوَطُ"},
{"ind_3fd", "تَتَوَطْوَطَانِ"},
{"ind_3fp", "يَتَوَطْوَطْنَ"},
{"ind_3fs", "تَتَوَطْوَطُ"},
{"ind_3md", "يَتَوَطْوَطَانِ"},
{"ind_3mp", "يَتَوَطْوَطُونَ"},
{"ind_3ms", "يَتَوَطْوَطُ"},
{"past_1p", "تَوَطْوَطْنَا"},
{"past_1s", "تَوَطْوَطْتُ"},
{"past_2d", "تَوَطْوَطْتُمَا"},
{"past_2fp", "تَوَطْوَطْتُنَّ"},
{"past_2fs", "تَوَطْوَطْتِ"},
{"past_2mp", "تَوَطْوَطْتُمْ"},
{"past_2ms", "تَوَطْوَطْتَ"},
{"past_3fd", "تَوَطْوَطَتَا"},
{"past_3fp", "تَوَطْوَطْنَ"},
{"past_3fs", "تَوَطْوَطَتْ"},
{"past_3md", "تَوَطْوَطَا"},
{"past_3mp", "تَوَطْوَطُوا"},
{"past_3ms", "تَوَطْوَطَ"},
},
},
{
label = "تَجَوْرَبَ (p422)", root = "جورب", wazn = "تفعلل",
forms = {
{"imp_2d", "تَجَوْرَبَا"},
{"imp_2fp", "تَجَوْرَبْنَ"},
{"imp_2fs", "تَجَوْرَبِي"},
{"imp_2mp", "تَجَوْرَبُوا"},
{"imp_2ms", "تَجَوْرَبْ"},
{"ind_1p", "نَتَجَوْرَبُ"},
{"ind_1s", "أَتَجَوْرَبُ"},
{"ind_2d", "تَتَجَوْرَبَانِ"},
{"ind_2fp", "تَتَجَوْرَبْنَ"},
{"ind_2fs", "تَتَجَوْرَبِينَ"},
{"ind_2mp", "تَتَجَوْرَبُونَ"},
{"ind_2ms", "تَتَجَوْرَبُ"},
{"ind_3fd", "تَتَجَوْرَبَانِ"},
{"ind_3fp", "يَتَجَوْرَبْنَ"},
{"ind_3fs", "تَتَجَوْرَبُ"},
{"ind_3md", "يَتَجَوْرَبَانِ"},
{"ind_3mp", "يَتَجَوْرَبُونَ"},
{"ind_3ms", "يَتَجَوْرَبُ"},
{"past_1p", "تَجَوْرَبْنَا"},
{"past_1s", "تَجَوْرَبْتُ"},
{"past_2d", "تَجَوْرَبْتُمَا"},
{"past_2fp", "تَجَوْرَبْتُنَّ"},
{"past_2fs", "تَجَوْرَبْتِ"},
{"past_2mp", "تَجَوْرَبْتُمْ"},
{"past_2ms", "تَجَوْرَبْتَ"},
{"past_3fd", "تَجَوْرَبَتَا"},
{"past_3fp", "تَجَوْرَبْنَ"},
{"past_3fs", "تَجَوْرَبَتْ"},
{"past_3md", "تَجَوْرَبَا"},
{"past_3mp", "تَجَوْرَبُوا"},
{"past_3ms", "تَجَوْرَبَ"},
},
},
{
label = "تَسَرْوَلَ (p423)", root = "سرول", wazn = "تفعلل",
forms = {
{"imp_2d", "تَسَرْوَلَا"},
{"imp_2fp", "تَسَرْوَلْنَ"},
{"imp_2fs", "تَسَرْوَلِي"},
{"imp_2mp", "تَسَرْوَلُوا"},
{"imp_2ms", "تَسَرْوَلْ"},
{"ind_1p", "نَتَسَرْوَلُ"},
{"ind_1s", "أَتَسَرْوَلُ"},
{"ind_2d", "تَتَسَرْوَلَانِ"},
{"ind_2fp", "تَتَسَرْوَلْنَ"},
{"ind_2fs", "تَتَسَرْوَلِينَ"},
{"ind_2mp", "تَتَسَرْوَلُونَ"},
{"ind_2ms", "تَتَسَرْوَلُ"},
{"ind_3fd", "تَتَسَرْوَلَانِ"},
{"ind_3fp", "يَتَسَرْوَلْنَ"},
{"ind_3fs", "تَتَسَرْوَلُ"},
{"ind_3md", "يَتَسَرْوَلَانِ"},
{"ind_3mp", "يَتَسَرْوَلُونَ"},
{"ind_3ms", "يَتَسَرْوَلُ"},
{"past_1p", "تَسَرْوَلْنَا"},
{"past_1s", "تَسَرْوَلْتُ"},
{"past_2d", "تَسَرْوَلْتُمَا"},
{"past_2fp", "تَسَرْوَلْتُنَّ"},
{"past_2fs", "تَسَرْوَلْتِ"},
{"past_2mp", "تَسَرْوَلْتُمْ"},
{"past_2ms", "تَسَرْوَلْتَ"},
{"past_3fd", "تَسَرْوَلَتَا"},
{"past_3fp", "تَسَرْوَلْنَ"},
{"past_3fs", "تَسَرْوَلَتْ"},
{"past_3md", "تَسَرْوَلَا"},
{"past_3mp", "تَسَرْوَلُوا"},
{"past_3ms", "تَسَرْوَلَ"},
},
},
{
label = "تَحَمْيَرَ (p423)", root = "حمير", wazn = "تفعلل",
forms = {
{"imp_2d", "تَحَمْيَرَا"},
{"imp_2fp", "تَحَمْيَرْنَ"},
{"imp_2fs", "تَحَمْيَرِي"},
{"imp_2mp", "تَحَمْيَرُوا"},
{"imp_2ms", "تَحَمْيَرْ"},
{"ind_1p", "نَتَحَمْيَرُ"},
{"ind_1s", "أَتَحَمْيَرُ"},
{"ind_2d", "تَتَحَمْيَرَانِ"},
{"ind_2fp", "تَتَحَمْيَرْنَ"},
{"ind_2fs", "تَتَحَمْيَرِينَ"},
{"ind_2mp", "تَتَحَمْيَرُونَ"},
{"ind_2ms", "تَتَحَمْيَرُ"},
{"ind_3fd", "تَتَحَمْيَرَانِ"},
{"ind_3fp", "يَتَحَمْيَرْنَ"},
{"ind_3fs", "تَتَحَمْيَرُ"},
{"ind_3md", "يَتَحَمْيَرَانِ"},
{"ind_3mp", "يَتَحَمْيَرُونَ"},
{"ind_3ms", "يَتَحَمْيَرُ"},
{"past_1p", "تَحَمْيَرْنَا"},
{"past_1s", "تَحَمْيَرْتُ"},
{"past_2d", "تَحَمْيَرْتُمَا"},
{"past_2fp", "تَحَمْيَرْتُنَّ"},
{"past_2fs", "تَحَمْيَرْتِ"},
{"past_2mp", "تَحَمْيَرْتُمْ"},
{"past_2ms", "تَحَمْيَرْتَ"},
{"past_3fd", "تَحَمْيَرَتَا"},
{"past_3fp", "تَحَمْيَرْنَ"},
{"past_3fs", "تَحَمْيَرَتْ"},
{"past_3md", "تَحَمْيَرَا"},
{"past_3mp", "تَحَمْيَرُوا"},
{"past_3ms", "تَحَمْيَرَ"},
},
},
{
label = "اِحْرَنْجَمَ (p426)", root = "حرجم", wazn = "افعنلل",
forms = {
{"imp_2d", "اِحْرَنْجِمَا"},
{"imp_2fp", "اِحْرَنْجِمْنَ"},
{"imp_2fs", "اِحْرَنْجِمِي"},
{"imp_2mp", "اِحْرَنْجِمُوا"},
{"imp_2ms", "اِحْرَنْجِمْ"},
{"ind_1p", "نَحْرَنْجِمُ"},
{"ind_1s", "أَحْرَنْجِمُ"},
{"ind_2d", "تَحْرَنْجِمَانِ"},
{"ind_2fp", "تَحْرَنْجِمْنَ"},
{"ind_2fs", "تَحْرَنْجِمِينَ"},
{"ind_2mp", "تَحْرَنْجِمُونَ"},
{"ind_2ms", "تَحْرَنْجِمُ"},
{"ind_3fd", "تَحْرَنْجِمَانِ"},
{"ind_3fp", "يَحْرَنْجِمْنَ"},
{"ind_3fs", "تَحْرَنْجِمُ"},
{"ind_3md", "يَحْرَنْجِمَانِ"},
{"ind_3mp", "يَحْرَنْجِمُونَ"},
{"ind_3ms", "يَحْرَنْجِمُ"},
{"past_1p", "اِحْرَنْجَمْنَا"},
{"past_1s", "اِحْرَنْجَمْتُ"},
{"past_2d", "اِحْرَنْجَمْتُمَا"},
{"past_2fp", "اِحْرَنْجَمْتُنَّ"},
{"past_2fs", "اِحْرَنْجَمْتِ"},
{"past_2mp", "اِحْرَنْجَمْتُمْ"},
{"past_2ms", "اِحْرَنْجَمْتَ"},
{"past_3fd", "اِحْرَنْجَمَتَا"},
{"past_3fp", "اِحْرَنْجَمْنَ"},
{"past_3fs", "اِحْرَنْجَمَتْ"},
{"past_3md", "اِحْرَنْجَمَا"},
{"past_3mp", "اِحْرَنْجَمُوا"},
{"past_3ms", "اِحْرَنْجَمَ"},
},
},
{
label = "اِفْرَنْقَعَ (p426)", root = "فرقع", wazn = "افعنلل",
forms = {
{"imp_2d", "اِفْرَنْقِعَا"},
{"imp_2fp", "اِفْرَنْقِعْنَ"},
{"imp_2fs", "اِفْرَنْقِعِي"},
{"imp_2mp", "اِفْرَنْقِعُوا"},
{"imp_2ms", "اِفْرَنْقِعْ"},
{"ind_1p", "نَفْرَنْقِعُ"},
{"ind_1s", "أَفْرَنْقِعُ"},
{"ind_2d", "تَفْرَنْقِعَانِ"},
{"ind_2fp", "تَفْرَنْقِعْنَ"},
{"ind_2fs", "تَفْرَنْقِعِينَ"},
{"ind_2mp", "تَفْرَنْقِعُونَ"},
{"ind_2ms", "تَفْرَنْقِعُ"},
{"ind_3fd", "تَفْرَنْقِعَانِ"},
{"ind_3fp", "يَفْرَنْقِعْنَ"},
{"ind_3fs", "تَفْرَنْقِعُ"},
{"ind_3md", "يَفْرَنْقِعَانِ"},
{"ind_3mp", "يَفْرَنْقِعُونَ"},
{"ind_3ms", "يَفْرَنْقِعُ"},
{"past_1p", "اِفْرَنْقَعْنَا"},
{"past_1s", "اِفْرَنْقَعْتُ"},
{"past_2d", "اِفْرَنْقَعْتُمَا"},
{"past_2fp", "اِفْرَنْقَعْتُنَّ"},
{"past_2fs", "اِفْرَنْقَعْتِ"},
{"past_2mp", "اِفْرَنْقَعْتُمْ"},
{"past_2ms", "اِفْرَنْقَعْتَ"},
{"past_3fd", "اِفْرَنْقَعَتَا"},
{"past_3fp", "اِفْرَنْقَعْنَ"},
{"past_3fs", "اِفْرَنْقَعَتْ"},
{"past_3md", "اِفْرَنْقَعَا"},
{"past_3mp", "اِفْرَنْقَعُوا"},
{"past_3ms", "اِفْرَنْقَعَ"},
},
},
{
label = "اِسْلَنْطَأَ (p427)", root = "سلطأ", wazn = "افعنلل",
forms = {
{"imp_2d", "اِسْلَنْطِئَا"},
{"imp_2fp", "اِسْلَنْطِئْنَ"},
{"imp_2fs", "اِسْلَنْطِئِي"},
{"imp_2mp", "اِسْلَنْطِئُوا"},
{"imp_2ms", "اِسْلَنْطِئْ"},
{"ind_1p", "نَسْلَنْطِئُ"},
{"ind_1s", "أَسْلَنْطِئُ"},
{"ind_2d", "تَسْلَنْطِئَانِ"},
{"ind_2fp", "تَسْلَنْطِئْنَ"},
{"ind_2fs", "تَسْلَنْطِئِينَ"},
{"ind_2mp", "تَسْلَنْطِئُونَ"},
{"ind_2ms", "تَسْلَنْطِئُ"},
{"ind_3fd", "تَسْلَنْطِئَانِ"},
{"ind_3fp", "يَسْلَنْطِئْنَ"},
{"ind_3fs", "تَسْلَنْطِئُ"},
{"ind_3md", "يَسْلَنْطِئَانِ"},
{"ind_3mp", "يَسْلَنْطِئُونَ"},
{"ind_3ms", "يَسْلَنْطِئُ"},
{"past_1p", "اِسْلَنْطَأْنَا"},
{"past_1s", "اِسْلَنْطَأْتُ"},
{"past_2d", "اِسْلَنْطَأْتُمَا"},
{"past_2fp", "اِسْلَنْطَأْتُنَّ"},
{"past_2fs", "اِسْلَنْطَأْتِ"},
{"past_2mp", "اِسْلَنْطَأْتُمْ"},
{"past_2ms", "اِسْلَنْطَأْتَ"},
{"past_3fd", "اِسْلَنْطَأَتَا"},
{"past_3fp", "اِسْلَنْطَأْنَ"},
{"past_3fs", "اِسْلَنْطَأَتْ"},
{"past_3md", "اِسْلَنْطَآ"},
{"past_3mp", "اِسْلَنْطَؤُوا"},
{"past_3ms", "اِسْلَنْطَأَ"},
},
},
{
label = "اِطْلَنْفَأَ (p427)", root = "طلفأ", wazn = "افعنلل",
forms = {
{"imp_2d", "اِطْلَنْفِئَا"},
{"imp_2fp", "اِطْلَنْفِئْنَ"},
{"imp_2fs", "اِطْلَنْفِئِي"},
{"imp_2mp", "اِطْلَنْفِئُوا"},
{"imp_2ms", "اِطْلَنْفِئْ"},
{"ind_1p", "نَطْلَنْفِئُ"},
{"ind_1s", "أَطْلَنْفِئُ"},
{"ind_2d", "تَطْلَنْفِئَانِ"},
{"ind_2fp", "تَطْلَنْفِئْنَ"},
{"ind_2fs", "تَطْلَنْفِئِينَ"},
{"ind_2mp", "تَطْلَنْفِئُونَ"},
{"ind_2ms", "تَطْلَنْفِئُ"},
{"ind_3fd", "تَطْلَنْفِئَانِ"},
{"ind_3fp", "يَطْلَنْفِئْنَ"},
{"ind_3fs", "تَطْلَنْفِئُ"},
{"ind_3md", "يَطْلَنْفِئَانِ"},
{"ind_3mp", "يَطْلَنْفِئُونَ"},
{"ind_3ms", "يَطْلَنْفِئُ"},
{"past_1p", "اِطْلَنْفَأْنَا"},
{"past_1s", "اِطْلَنْفَأْتُ"},
{"past_2d", "اِطْلَنْفَأْتُمَا"},
{"past_2fp", "اِطْلَنْفَأْتُنَّ"},
{"past_2fs", "اِطْلَنْفَأْتِ"},
{"past_2mp", "اِطْلَنْفَأْتُمْ"},
{"past_2ms", "اِطْلَنْفَأْتَ"},
{"past_3fd", "اِطْلَنْفَأَتَا"},
{"past_3fp", "اِطْلَنْفَأْنَ"},
{"past_3fs", "اِطْلَنْفَأَتْ"},
{"past_3md", "اِطْلَنْفَآ"},
{"past_3mp", "اِطْلَنْفَؤُوا"},
{"past_3ms", "اِطْلَنْفَأَ"},
},
},
{
label = "اِقْشَعَرَّ (p431)", root = "قشعر", wazn = "افعللّ",
forms = {
{"imp_2d", "اِقْشَعِرَّا"},
{"imp_2fp", "اِقْشَعْرِرْنَ"},
{"imp_2fs", "اِقْشَعِرِّي"},
{"imp_2mp", "اِقْشَعِرُّوا"},
{"imp_2ms", "اِقْشَعْرِرْ"},
{"ind_1p", "نَقْشَعِرُّ"},
{"ind_1s", "أَقْشَعِرُّ"},
{"ind_2d", "تَقْشَعِرَّانِ"},
{"ind_2fp", "تَقْشَعْرِرْنَ"},
{"ind_2fs", "تَقْشَعِرِّينَ"},
{"ind_2mp", "تَقْشَعِرُّونَ"},
{"ind_2ms", "تَقْشَعِرُّ"},
{"ind_3fd", "تَقْشَعِرَّانِ"},
{"ind_3fp", "يَقْشَعْرِرْنَ"},
{"ind_3fs", "تَقْشَعِرُّ"},
{"ind_3md", "يَقْشَعِرَّانِ"},
{"ind_3mp", "يَقْشَعِرُّونَ"},
{"ind_3ms", "يَقْشَعِرُّ"},
{"past_1p", "اِقْشَعْرَرْنَا"},
{"past_1s", "اِقْشَعْرَرْتُ"},
{"past_2d", "اِقْشَعْرَرْتُمَا"},
{"past_2fp", "اِقْشَعْرَرْتُنَّ"},
{"past_2fs", "اِقْشَعْرَرْتِ"},
{"past_2mp", "اِقْشَعْرَرْتُمْ"},
{"past_2ms", "اِقْشَعْرَرْتَ"},
{"past_3fd", "اِقْشَعَرَّتَا"},
{"past_3fp", "اِقْشَعْرَرْنَ"},
{"past_3fs", "اِقْشَعَرَّتْ"},
{"past_3md", "اِقْشَعَرَّا"},
{"past_3mp", "اِقْشَعَرُّوا"},
{"past_3ms", "اِقْشَعَرَّ"},
},
},
{
label = "اِكْفَهَرَّ (p432)", root = "كفهر", wazn = "افعللّ",
forms = {
{"imp_2d", "اِكْفَهِرَّا"},
{"imp_2fp", "اِكْفَهْرِرْنَ"},
{"imp_2fs", "اِكْفَهِرِّي"},
{"imp_2mp", "اِكْفَهِرُّوا"},
{"imp_2ms", "اِكْفَهْرِرْ"},
{"ind_1p", "نَكْفَهِرُّ"},
{"ind_1s", "أَكْفَهِرُّ"},
{"ind_2d", "تَكْفَهِرَّانِ"},
{"ind_2fp", "تَكْفَهْرِرْنَ"},
{"ind_2fs", "تَكْفَهِرِّينَ"},
{"ind_2mp", "تَكْفَهِرُّونَ"},
{"ind_2ms", "تَكْفَهِرُّ"},
{"ind_3fd", "تَكْفَهِرَّانِ"},
{"ind_3fp", "يَكْفَهْرِرْنَ"},
{"ind_3fs", "تَكْفَهِرُّ"},
{"ind_3md", "يَكْفَهِرَّانِ"},
{"ind_3mp", "يَكْفَهِرُّونَ"},
{"ind_3ms", "يَكْفَهِرُّ"},
{"past_1p", "اِكْفَهْرَرْنَا"},
{"past_1s", "اِكْفَهْرَرْتُ"},
{"past_2d", "اِكْفَهْرَرْتُمَا"},
{"past_2fp", "اِكْفَهْرَرْتُنَّ"},
{"past_2fs", "اِكْفَهْرَرْتِ"},
{"past_2mp", "اِكْفَهْرَرْتُمْ"},
{"past_2ms", "اِكْفَهْرَرْتَ"},
{"past_3fd", "اِكْفَهَرَّتَا"},
{"past_3fp", "اِكْفَهْرَرْنَ"},
{"past_3fs", "اِكْفَهَرَّتْ"},
{"past_3md", "اِكْفَهَرَّا"},
{"past_3mp", "اِكْفَهَرُّوا"},
{"past_3ms", "اِكْفَهَرَّ"},
},
},
{
label = "اِضْمَحَلَّ (p432)", root = "ضمحل", wazn = "افعللّ",
forms = {
{"imp_2d", "اِضْمَحِلَّا"},
{"imp_2fp", "اِضْمَحْلِلْنَ"},
{"imp_2fs", "اِضْمَحِلِّي"},
{"imp_2mp", "اِضْمَحِلُّوا"},
{"imp_2ms", "اِضْمَحْلِلْ"},
{"ind_1p", "نَضْمَحِلُّ"},
{"ind_1s", "أَضْمَحِلُّ"},
{"ind_2d", "تَضْمَحِلَّانِ"},
{"ind_2fp", "تَضْمَحْلِلْنَ"},
{"ind_2fs", "تَضْمَحِلِّينَ"},
{"ind_2mp", "تَضْمَحِلُّونَ"},
{"ind_2ms", "تَضْمَحِلُّ"},
{"ind_3fd", "تَضْمَحِلَّانِ"},
{"ind_3fp", "يَضْمَحْلِلْنَ"},
{"ind_3fs", "تَضْمَحِلُّ"},
{"ind_3md", "يَضْمَحِلَّانِ"},
{"ind_3mp", "يَضْمَحِلُّونَ"},
{"ind_3ms", "يَضْمَحِلُّ"},
{"past_1p", "اِضْمَحْلَلْنَا"},
{"past_1s", "اِضْمَحْلَلْتُ"},
{"past_2d", "اِضْمَحْلَلْتُمَا"},
{"past_2fp", "اِضْمَحْلَلْتُنَّ"},
{"past_2fs", "اِضْمَحْلَلْتِ"},
{"past_2mp", "اِضْمَحْلَلْتُمْ"},
{"past_2ms", "اِضْمَحْلَلْتَ"},
{"past_3fd", "اِضْمَحَلَّتَا"},
{"past_3fp", "اِضْمَحْلَلْنَ"},
{"past_3fs", "اِضْمَحَلَّتْ"},
{"past_3md", "اِضْمَحَلَّا"},
{"past_3mp", "اِضْمَحَلُّوا"},
{"past_3ms", "اِضْمَحَلَّ"},
},
},
{
label = "اِزْرَأَمَّ (p433)", root = "زرأم", wazn = "افعللّ",
forms = {
{"imp_2d", "اِزْرَئِمَّا"},
{"imp_2fp", "اِزْرَأْمِمْنَ"},
{"imp_2fs", "اِزْرَئِمِّي"},
{"imp_2mp", "اِزْرَئِمُّوا"},
{"imp_2ms", "اِزْرَأْمِمْ"},
{"ind_1p", "نَزْرَئِمُّ"},
{"ind_1s", "أَزْرَئِمُّ"},
{"ind_2d", "تَزْرَئِمَّانِ"},
{"ind_2fp", "تَزْرَأْمِمْنَ"},
{"ind_2fs", "تَزْرَئِمِّينَ"},
{"ind_2mp", "تَزْرَئِمُّونَ"},
{"ind_2ms", "تَزْرَئِمُّ"},
{"ind_3fd", "تَزْرَئِمَّانِ"},
{"ind_3fp", "يَزْرَأْمِمْنَ"},
{"ind_3fs", "تَزْرَئِمُّ"},
{"ind_3md", "يَزْرَئِمَّانِ"},
{"ind_3mp", "يَزْرَئِمُّونَ"},
{"ind_3ms", "يَزْرَئِمُّ"},
{"past_1p", "اِزْرَأْمَمْنَا"},
{"past_1s", "اِزْرَأْمَمْتُ"},
{"past_2d", "اِزْرَأْمَمْتُمَا"},
{"past_2fp", "اِزْرَأْمَمْتُنَّ"},
{"past_2fs", "اِزْرَأْمَمْتِ"},
{"past_2mp", "اِزْرَأْمَمْتُمْ"},
{"past_2ms", "اِزْرَأْمَمْتَ"},
{"past_3fd", "اِزْرَأَمَّتَا"},
{"past_3fp", "اِزْرَأْمَمْنَ"},
{"past_3fs", "اِزْرَأَمَّتْ"},
{"past_3md", "اِزْرَأَمَّا"},
{"past_3mp", "اِزْرَأَمُّوا"},
{"past_3ms", "اِزْرَأَمَّ"},
},
},
{
label = "اِطْمَأَنَّ (p433)", root = "طمأن", wazn = "افعللّ",
forms = {
{"imp_2d", "اِطْمَئِنَّا"},
{"imp_2fp", "اِطْمَأْنِنَّ"},
{"imp_2fs", "اِطْمَئِنِّي"},
{"imp_2mp", "اِطْمَئِنُّوا"},
{"imp_2ms", "اِطْمَأْنِنْ"},
{"ind_1p", "نَطْمَئِنُّ"},
{"ind_1s", "أَطْمَئِنُّ"},
{"ind_2d", "تَطْمَئِنَّانِ"},
{"ind_2fp", "تَطْمَأْنِنَّ"},
{"ind_2fs", "تَطْمَئِنِّينَ"},
{"ind_2mp", "تَطْمَئِنُّونَ"},
{"ind_2ms", "تَطْمَئِنُّ"},
{"ind_3fd", "تَطْمَئِنَّانِ"},
{"ind_3fp", "يَطْمَأْنِنَّ"},
{"ind_3fs", "تَطْمَئِنُّ"},
{"ind_3md", "يَطْمَئِنَّانِ"},
{"ind_3mp", "يَطْمَئِنُّونَ"},
{"ind_3ms", "يَطْمَئِنُّ"},
{"past_1p", "اِطْمَأْنَنَّا"},
{"past_1s", "اِطْمَأْنَنْتُ"},
{"past_2d", "اِطْمَأْنَنْتُمَا"},
{"past_2fp", "اِطْمَأْنَنْتُنَّ"},
{"past_2fs", "اِطْمَأْنَنْتِ"},
{"past_2mp", "اِطْمَأْنَنْتُمْ"},
{"past_2ms", "اِطْمَأْنَنْتَ"},
{"past_3fd", "اِطْمَأَنَّتَا"},
{"past_3fp", "اِطْمَأْنَنَّ"},
{"past_3fs", "اِطْمَأَنَّتْ"},
{"past_3md", "اِطْمَأَنَّا"},
{"past_3mp", "اِطْمَأَنُّوا"},
{"past_3ms", "اِطْمَأَنَّ"},
},
},
{
label = "يَمَنَ ـُ (p.137، معتل الفاء مثال)", root = "يمن", wazn = "فعَل يفعُل",
pass = true,
forms = {
{"imp_2d", "اُومُنَا"},
{"imp_2fp", "اُومُنَّ"},
{"imp_2fs", "اُومُنِي"},
{"imp_2mp", "اُومُنُوا"},
{"imp_2ms", "اُومُنْ"},
{"ind_1p", "نَيْمُنُ"},
{"ind_1s", "أَيْمُنُ"},
{"ind_2d", "تَيْمُنَانِ"},
{"ind_2fp", "تَيْمُنَّ"},
{"ind_2fs", "تَيْمُنِينَ"},
{"ind_2mp", "تَيْمُنُونَ"},
{"ind_2ms", "تَيْمُنُ"},
{"ind_3fd", "تَيْمُنَانِ"},
{"ind_3fp", "يَيْمُنَّ"},
{"ind_3fs", "تَيْمُنُ"},
{"ind_3md", "يَيْمُنَانِ"},
{"ind_3mp", "يَيْمُنُونَ"},
{"ind_3ms", "يَيْمُنُ"},
{"ind_pass_1p", "نُومَنُ"},
{"ind_pass_1s", "أُومَنُ"},
{"ind_pass_2d", "تُومَنَانِ"},
{"ind_pass_2fp", "تُومَنَّ"},
{"ind_pass_2fs", "تُومَنِينَ"},
{"ind_pass_2mp", "تُومَنُونَ"},
{"ind_pass_2ms", "تُومَنُ"},
{"ind_pass_3fd", "تُومَنَانِ"},
{"ind_pass_3fp", "يُومَنَّ"},
{"ind_pass_3fs", "تُومَنُ"},
{"ind_pass_3md", "يُومَنَانِ"},
{"ind_pass_3mp", "يُومَنُونَ"},
{"ind_pass_3ms", "يُومَنُ"},
{"past_1p", "يَمَنَّا"},
{"past_1s", "يَمَنْتُ"},
{"past_2d", "يَمَنْتُمَا"},
{"past_2fp", "يَمَنْتُنَّ"},
{"past_2fs", "يَمَنْتِ"},
{"past_2mp", "يَمَنْتُمْ"},
{"past_2ms", "يَمَنْتَ"},
{"past_3fd", "يَمَنَتَا"},
{"past_3fp", "يَمَنَّ"},
{"past_3fs", "يَمَنَتْ"},
{"past_3md", "يَمَنَا"},
{"past_3mp", "يَمَنُوا"},
{"past_3ms", "يَمَنَ"},
{"past_pass_1p", "يُمِنَّا"},
{"past_pass_1s", "يُمِنْتُ"},
{"past_pass_2d", "يُمِنْتُمَا"},
{"past_pass_2fp", "يُمِنْتُنَّ"},
{"past_pass_2fs", "يُمِنْتِ"},
{"past_pass_2mp", "يُمِنْتُمْ"},
{"past_pass_2ms", "يُمِنْتَ"},
{"past_pass_3fd", "يُمِنَتَا"},
{"past_pass_3fp", "يُمِنَّ"},
{"past_pass_3fs", "يُمِنَتْ"},
{"past_pass_3md", "يُمِنَا"},
{"past_pass_3mp", "يُمِنُوا"},
{"past_pass_3ms", "يُمِنَ"},
},
},
{
label = "اِهْبَيَّخَ (p.415، افعنلل معتل اللام)", root = "هبيخ", wazn = "افعنلل",
reduced = true,
forms = {
{"imp_2d", "اِهْبَيِّخَا"},
{"imp_2fp", "اِهْبَيِّخْنَ"},
{"imp_2fs", "اِهْبَيِّخِي"},
{"imp_2mp", "اِهْبَيِّخُوا"},
{"imp_2ms", "اِهْبَيِّخْ"},
{"ind_1p", "نَهْبَيِّخُ"},
{"ind_1s", "أَهْبَيِّخُ"},
{"ind_2d", "تَهْبَيِّخَانِ"},
{"ind_2fp", "تَهْبَيِّخْنَ"},
{"ind_2fs", "تَهْبَيِّخِينَ"},
{"ind_2mp", "تَهْبَيِّخُونَ"},
{"ind_2ms", "تَهْبَيِّخُ"},
{"ind_3fd", "تَهْبَيِّخَانِ"},
{"ind_3fp", "يَهْبَيِّخْنَ"},
{"ind_3fs", "تَهْبَيِّخُ"},
{"ind_3md", "يَهْبَيِّخَانِ"},
{"ind_3mp", "يَهْبَيِّخُونَ"},
{"ind_3ms", "يَهْبَيِّخُ"},
{"past_1p", "اِهْبَيَّخْنَا"},
{"past_1s", "اِهْبَيَّخْتُ"},
{"past_2d", "اِهْبَيَّخْتُمَا"},
{"past_2fp", "اِهْبَيَّخْتُنَّ"},
{"past_2fs", "اِهْبَيَّخْتِ"},
{"past_2mp", "اِهْبَيَّخْتُمْ"},
{"past_2ms", "اِهْبَيَّخْتَ"},
{"past_3fd", "اِهْبَيَّخَتَا"},
{"past_3fp", "اِهْبَيَّخْنَ"},
{"past_3fs", "اِهْبَيَّخَتْ"},
{"past_3md", "اِهْبَيَّخَا"},
{"past_3mp", "اِهْبَيَّخُوا"},
{"past_3ms", "اِهْبَيَّخَ"},
},
},
{
label = "أَخا (p160)", root = "أخو", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "اُؤْخُوَا"},
{"imp_2fp", "اُؤْخُونَ"},
{"imp_2fs", "اُؤْخِي"},
{"imp_2mp", "اُؤْخُوا"},
{"imp_2ms", "اُؤْخُ"},
{"ind_1p", "نَأْخُو"},
{"ind_1s", "آخُو"},
{"ind_2d", "تَأْخُوَانِ"},
{"ind_2fp", "تَأْخُونَ"},
{"ind_2fs", "تَأْخِينَ"},
{"ind_2mp", "تَأْخُونَ"},
{"ind_2ms", "تَأْخُو"},
{"ind_3fd", "تَأْخُوَانِ"},
{"ind_3fp", "يَأْخُونَ"},
{"ind_3fs", "تَأْخُو"},
{"ind_3md", "يَأْخُوَانِ"},
{"ind_3mp", "يَأْخُونَ"},
{"ind_3ms", "يَأْخُو"},
{"past_1p", "أَخَوْنَا"},
{"past_1s", "أَخَوْتُ"},
{"past_2d", "أَخَوْتُمَا"},
{"past_2fp", "أَخَوْتُنَّ"},
{"past_2fs", "أَخَوْتِ"},
{"past_2mp", "أَخَوْتُمْ"},
{"past_2ms", "أَخَوْتَ"},
{"past_3fd", "أَخَتَا"},
{"past_3fp", "أَخَوْنَ"},
{"past_3fs", "أَخَتْ"},
{"past_3md", "أَخَوَا"},
{"past_3mp", "أَخَوْا"},
{"past_3ms", "أَخَا"},
},
},
{
label = "آضَ (p177)", root = "أيض", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "إِيضَا"},
{"imp_2fp", "إِضْنَ"},
{"imp_2fs", "إِيضِي"},
{"imp_2mp", "إِيضُوا"},
{"imp_2ms", "إِضْ"},
{"ind_1p", "نَئِيضُ"},
{"ind_1s", "أَئِيضُ"},
{"ind_2d", "تَئِيضَانِ"},
{"ind_2fp", "تَئِضْنَ"},
{"ind_2fs", "تَئِيضِينَ"},
{"ind_2mp", "تَئِيضُونَ"},
{"ind_2ms", "تَئِيضُ"},
{"ind_3fd", "تَئِيضَانِ"},
{"ind_3fp", "يَئِضْنَ"},
{"ind_3fs", "تَئِيضُ"},
{"ind_3md", "يَئِيضَانِ"},
{"ind_3mp", "يَئِيضُونَ"},
{"ind_3ms", "يَئِيضُ"},
{"past_1p", "إِضْنَا"},
{"past_1s", "إِضْتُ"},
{"past_2d", "إِضْتُمَا"},
{"past_2fp", "إِضْتُنَّ"},
{"past_2fs", "إِضْتِ"},
{"past_2mp", "إِضْتُمْ"},
{"past_2ms", "إِضْتَ"},
{"past_3fd", "آضَتَا"},
{"past_3fp", "إِضْنَ"},
{"past_3fs", "آضَتْ"},
{"past_3md", "آضَا"},
{"past_3mp", "آضُوا"},
{"past_3ms", "آضَ"},
},
},
{
label = "وَبَأَ (p199)", root = "وبأ", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "اِيبَآ"},
{"imp_2fp", "اِيبَأْنَ"},
{"imp_2fs", "اِيبَئِي"},
{"imp_2mp", "اِيبَؤُوا"},
{"imp_2ms", "اِيبَأْ"},
{"ind_1p", "نَوْبَأُ"},
{"ind_1s", "أَوْبَأُ"},
{"ind_2d", "تَوْبَآنِ"},
{"ind_2fp", "تَوْبَأْنَ"},
{"ind_2fs", "تَوْبَئِينَ"},
{"ind_2mp", "تَوْبَؤُونَ"},
{"ind_2ms", "تَوْبَأُ"},
{"ind_3fd", "تَوْبَآنِ"},
{"ind_3fp", "يَوْبَأْنَ"},
{"ind_3fs", "تَوْبَأُ"},
{"ind_3md", "يَوْبَآنِ"},
{"ind_3mp", "يَوْبَؤُونَ"},
{"ind_3ms", "يَوْبَأُ"},
{"past_1p", "وَبَأْنَا"},
{"past_1s", "وَبَأْتُ"},
{"past_2d", "وَبَأْتُمَا"},
{"past_2fp", "وَبَأْتُنَّ"},
{"past_2fs", "وَبَأْتِ"},
{"past_2mp", "وَبَأْتُمْ"},
{"past_2ms", "وَبَأْتَ"},
{"past_3fd", "وَبَأَتَا"},
{"past_3fp", "وَبَأْنَ"},
{"past_3fs", "وَبَأَتْ"},
{"past_3md", "وَبَآ"},
{"past_3mp", "وَبَؤُوا"},
{"past_3ms", "وَبَأَ"},
},
},
{
label = "فَأَى (p205)", root = "فأي", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "اِفْأَيَا"},
{"imp_2fp", "اِفْأَيْنَ"},
{"imp_2fs", "اِفْأَيْ"},
{"imp_2mp", "اِفْأَوْا"},
{"imp_2ms", "اِفْأَ"},
{"ind_1p", "نَفْأَى"},
{"ind_1s", "أَفْأَى"},
{"ind_2d", "تَفْأَيَانِ"},
{"ind_2fp", "تَفْأَيْنَ"},
{"ind_2fs", "تَفْأَيْنَ"},
{"ind_2mp", "تَفْأَوْنَ"},
{"ind_2ms", "تَفْأَى"},
{"ind_3fd", "تَفْأَيَانِ"},
{"ind_3fp", "يَفْأَيْنَ"},
{"ind_3fs", "تَفْأَى"},
{"ind_3md", "يَفْأَيَانِ"},
{"ind_3mp", "يَفْأَوْنَ"},
{"ind_3ms", "يَفْأَى"},
{"past_1p", "فَأَيْنَا"},
{"past_1s", "فَأَيْتُ"},
{"past_2d", "فَأَيْتُمَا"},
{"past_2fp", "فَأَيْتُنَّ"},
{"past_2fs", "فَأَيْتِ"},
{"past_2mp", "فَأَيْتُمْ"},
{"past_2ms", "فَأَيْتَ"},
{"past_3fd", "فَأَتَا"},
{"past_3fp", "فَأَيْنَ"},
{"past_3fs", "فَأَتْ"},
{"past_3md", "فَأَيَا"},
{"past_3mp", "فَأَوْا"},
{"past_3ms", "فَأَى"},
},
},
{
label = "بَدَّلَ (p260)", root = "بدل", wazn = "فعّل",
forms = {
{"imp_2d", "بَدِّلَا"},
{"imp_2fp", "بَدِّلْنَ"},
{"imp_2fs", "بَدِّلِي"},
{"imp_2mp", "بَدِّلُوا"},
{"imp_2ms", "بَدِّلْ"},
{"ind_1p", "نُبَدِّلُ"},
{"ind_1s", "أُبَدِّلُ"},
{"ind_2d", "تُبَدِّلَانِ"},
{"ind_2fp", "تُبَدِّلْنَ"},
{"ind_2fs", "تُبَدِّلِينَ"},
{"ind_2mp", "تُبَدِّلُونَ"},
{"ind_2ms", "تُبَدِّلُ"},
{"ind_3fd", "تُبَدِّلَانِ"},
{"ind_3fp", "يُبَدِّلْنَ"},
{"ind_3fs", "تُبَدِّلُ"},
{"ind_3md", "يُبَدِّلَانِ"},
{"ind_3mp", "يُبَدِّلُونَ"},
{"ind_3ms", "يُبَدِّلُ"},
{"past_1p", "بَدَّلْنَا"},
{"past_1s", "بَدَّلْتُ"},
{"past_2d", "بَدَّلْتُمَا"},
{"past_2fp", "بَدَّلْتُنَّ"},
{"past_2fs", "بَدَّلْتِ"},
{"past_2mp", "بَدَّلْتُمْ"},
{"past_2ms", "بَدَّلْتَ"},
{"past_3fd", "بَدَّلَتَا"},
{"past_3fp", "بَدَّلْنَ"},
{"past_3fs", "بَدَّلَتْ"},
{"past_3md", "بَدَّلَا"},
{"past_3mp", "بَدَّلُوا"},
{"past_3ms", "بَدَّلَ"},
},
},
{
label = "أَمَّمَ (p262)", root = "أمم", wazn = "فعّل",
forms = {
{"imp_2d", "أَمِّمَا"},
{"imp_2fp", "أَمِّمْنَ"},
{"imp_2fs", "أَمِّمِي"},
{"imp_2mp", "أَمِّمُوا"},
{"imp_2ms", "أَمِّمْ"},
{"ind_1p", "نُؤَمِّمُ"},
{"ind_1s", "أُؤَمِّمُ"},
{"ind_2d", "تُؤَمِّمَانِ"},
{"ind_2fp", "تُؤَمِّمْنَ"},
{"ind_2fs", "تُؤَمِّمِينَ"},
{"ind_2mp", "تُؤَمِّمُونَ"},
{"ind_2ms", "تُؤَمِّمُ"},
{"ind_3fd", "تُؤَمِّمَانِ"},
{"ind_3fp", "يُؤَمِّمْنَ"},
{"ind_3fs", "تُؤَمِّمُ"},
{"ind_3md", "يُؤَمِّمَانِ"},
{"ind_3mp", "يُؤَمِّمُونَ"},
{"ind_3ms", "يُؤَمِّمُ"},
{"past_1p", "أَمَّمْنَا"},
{"past_1s", "أَمَّمْتُ"},
{"past_2d", "أَمَّمْتُمَا"},
{"past_2fp", "أَمَّمْتُنَّ"},
{"past_2fs", "أَمَّمْتِ"},
{"past_2mp", "أَمَّمْتُمْ"},
{"past_2ms", "أَمَّمْتَ"},
{"past_3fd", "أَمَّمَتَا"},
{"past_3fp", "أَمَّمْنَ"},
{"past_3fs", "أَمَّمَتْ"},
{"past_3md", "أَمَّمَا"},
{"past_3mp", "أَمَّمُوا"},
{"past_3ms", "أَمَّمَ"},
},
},
{
label = "جَنَّنَ (p262)", root = "جنن", wazn = "فعّل",
forms = {
{"imp_2d", "جَنِّنَا"},
{"imp_2fp", "جَنِّنَّ"},
{"imp_2fs", "جَنِّنِي"},
{"imp_2mp", "جَنِّنُوا"},
{"imp_2ms", "جَنِّنْ"},
{"ind_1p", "نُجَنِّنُ"},
{"ind_1s", "أُجَنِّنُ"},
{"ind_2d", "تُجَنِّنَانِ"},
{"ind_2fp", "تُجَنِّنَّ"},
{"ind_2fs", "تُجَنِّنِينَ"},
{"ind_2mp", "تُجَنِّنُونَ"},
{"ind_2ms", "تُجَنِّنُ"},
{"ind_3fd", "تُجَنِّنَانِ"},
{"ind_3fp", "يُجَنِّنَّ"},
{"ind_3fs", "تُجَنِّنُ"},
{"ind_3md", "يُجَنِّنَانِ"},
{"ind_3mp", "يُجَنِّنُونَ"},
{"ind_3ms", "يُجَنِّنُ"},
{"past_1p", "جَنَّنَّا"},
{"past_1s", "جَنَّنْتُ"},
{"past_2d", "جَنَّنْتُمَا"},
{"past_2fp", "جَنَّنْتُنَّ"},
{"past_2fs", "جَنَّنْتِ"},
{"past_2mp", "جَنَّنْتُمْ"},
{"past_2ms", "جَنَّنْتَ"},
{"past_3fd", "جَنَّنَتَا"},
{"past_3fp", "جَنَّنَّ"},
{"past_3fs", "جَنَّنَتْ"},
{"past_3md", "جَنَّنَا"},
{"past_3mp", "جَنَّنُوا"},
{"past_3ms", "جَنَّنَ"},
},
},
{
label = "أَيَّدَ (p268)", root = "أيد", wazn = "فعّل",
forms = {
{"imp_2d", "أَيِّدَا"},
{"imp_2fp", "أَيِّدْنَ"},
{"imp_2fs", "أَيِّدِي"},
{"imp_2mp", "أَيِّدُوا"},
{"imp_2ms", "أَيِّدْ"},
{"ind_1p", "نُؤَيِّدُ"},
{"ind_1s", "أُؤَيِّدُ"},
{"ind_2d", "تُؤَيِّدَانِ"},
{"ind_2fp", "تُؤَيِّدْنَ"},
{"ind_2fs", "تُؤَيِّدِينَ"},
{"ind_2mp", "تُؤَيِّدُونَ"},
{"ind_2ms", "تُؤَيِّدُ"},
{"ind_3fd", "تُؤَيِّدَانِ"},
{"ind_3fp", "يُؤَيِّدْنَ"},
{"ind_3fs", "تُؤَيِّدُ"},
{"ind_3md", "يُؤَيِّدَانِ"},
{"ind_3mp", "يُؤَيِّدُونَ"},
{"ind_3ms", "يُؤَيِّدُ"},
{"past_1p", "أَيَّدْنَا"},
{"past_1s", "أَيَّدْتُ"},
{"past_2d", "أَيَّدْتُمَا"},
{"past_2fp", "أَيَّدْتُنَّ"},
{"past_2fs", "أَيَّدْتِ"},
{"past_2mp", "أَيَّدْتُمْ"},
{"past_2ms", "أَيَّدْتَ"},
{"past_3fd", "أَيَّدَتَا"},
{"past_3fp", "أَيَّدْنَ"},
{"past_3fs", "أَيَّدَتْ"},
{"past_3md", "أَيَّدَا"},
{"past_3mp", "أَيَّدُوا"},
{"past_3ms", "أَيَّدَ"},
},
},
{
label = "فارَرَ (p277)", root = "فرر", wazn = "فاعل",
forms = {
{"imp_2d", "فَارِرَا"},
{"imp_2fp", "فَارِرْنَ"},
{"imp_2fs", "فَارِرِي"},
{"imp_2mp", "فَارِرُوا"},
{"imp_2ms", "فَارِرْ"},
{"ind_1p", "نُفَارِرُ"},
{"ind_1s", "أُفَارِرُ"},
{"ind_2d", "تُفَارِرَانِ"},
{"ind_2fp", "تُفَارِرْنَ"},
{"ind_2fs", "تُفَارِرِينَ"},
{"ind_2mp", "تُفَارِرُونَ"},
{"ind_2ms", "تُفَارِرُ"},
{"ind_3fd", "تُفَارِرَانِ"},
{"ind_3fp", "يُفَارِرْنَ"},
{"ind_3fs", "تُفَارِرُ"},
{"ind_3md", "يُفَارِرَانِ"},
{"ind_3mp", "يُفَارِرُونَ"},
{"ind_3ms", "يُفَارِرُ"},
{"past_1p", "فَارَرْنَا"},
{"past_1s", "فَارَرْتُ"},
{"past_2d", "فَارَرْتُمَا"},
{"past_2fp", "فَارَرْتُنَّ"},
{"past_2fs", "فَارَرْتِ"},
{"past_2mp", "فَارَرْتُمْ"},
{"past_2ms", "فَارَرْتَ"},
{"past_3fd", "فَارَرَتَا"},
{"past_3fp", "فَارَرْنَ"},
{"past_3fs", "فَارَرَتْ"},
{"past_3md", "فَارَرَا"},
{"past_3mp", "فَارَرُوا"},
{"past_3ms", "فَارَرَ"},
},
},
}
t9xqqpsvvof88nt5qd3rqt62cq5k5zn
وحدة:ar-verb/testcases/13
828
242582
1159038
1158906
2026-09-10T12:39:55Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159038
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 13 من 15. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/13")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_13()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
lp0j0oe406581j1i2flje99pts6a2vj
1159096
1159038
2026-09-10T19:34:27Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159096
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 13 من 16. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/13")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_13()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
g9suyq04yyssg4z5qvwf7azp2l5evqi
نقاش الوحدة:ar-verb/testcases/13
829
242583
1159039
1158907
2026-09-10T12:39:56Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159039
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/13|الجزء 13 من 15]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، [[نقاش الوحدة:ar-verb/testcases/1|1]]، [[نقاش الوحدة:ar-verb/testcases/2|2]]، [[نقاش الوحدة:ar-verb/testcases/3|3]]، [[نقاش الوحدة:ar-verb/testcases/4|4]]، [[نقاش الوحدة:ar-verb/testcases/5|5]]، [[نقاش الوحدة:ar-verb/testcases/6|6]]، [[نقاش الوحدة:ar-verb/testcases/7|7]]، [[نقاش الوحدة:ar-verb/testcases/8|8]]، [[نقاش الوحدة:ar-verb/testcases/9|9]]، [[نقاش الوحدة:ar-verb/testcases/10|10]]، [[نقاش الوحدة:ar-verb/testcases/11|11]]، [[نقاش الوحدة:ar-verb/testcases/12|12]]، 13، [[نقاش الوحدة:ar-verb/testcases/14|14]]، [[نقاش الوحدة:ar-verb/testcases/15|15]] — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/13|run_tests}}
iiky6alywn3ul3untjgbjkc3dy3sl9d
1159097
1159039
2026-09-10T19:34:28Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159097
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/13|الجزء 13 من 16]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، [[نقاش الوحدة:ar-verb/testcases/1|1]]، [[نقاش الوحدة:ar-verb/testcases/2|2]]، [[نقاش الوحدة:ar-verb/testcases/3|3]]، [[نقاش الوحدة:ar-verb/testcases/4|4]]، [[نقاش الوحدة:ar-verb/testcases/5|5]]، [[نقاش الوحدة:ar-verb/testcases/6|6]]، [[نقاش الوحدة:ar-verb/testcases/7|7]]، [[نقاش الوحدة:ar-verb/testcases/8|8]]، [[نقاش الوحدة:ar-verb/testcases/9|9]]، [[نقاش الوحدة:ar-verb/testcases/10|10]]، [[نقاش الوحدة:ar-verb/testcases/11|11]]، [[نقاش الوحدة:ar-verb/testcases/12|12]]، 13، [[نقاش الوحدة:ar-verb/testcases/14|14]]، [[نقاش الوحدة:ar-verb/testcases/15|15]]، [[نقاش الوحدة:ar-verb/testcases/16|16]] — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/13|run_tests}}
5x4a20fn2fk86oksh22nr4ormxiavwi
مستخدم:MHFR08/ملعبي
2
243390
1159054
1158804
2026-09-10T19:12:21Z
MHFR08
39160
طلب تعديل حماية جزئية في 10 سبتمبر 2026
1159054
wikitext
text/x-wiki
كل شي في المواقع من مقالات للعالم عبدالمجيد بن بن بدرالدين بن يوسف من المدينة المنورة عمره 34 اصبح الان ونحن في 2026/9/10 مقالات علمية كثيرة سرقة منه له لايوجد مقال علمي حديث الا من العالم عبدالمجيد بن محمد بن بدرالدين بن يوسف وجميعها مسروقة من اجهزة تنصة تعمل وتخرج المعلومات حتى من داخل الراس وهذه بعض المواقع لانها اساسا تهمس لهم علوم مثل سمعات المكيفات والمرواح فاذا نظرت لها سوف تجد بها شكل السمعات بمروحة وكل الاجهزة التي تشبة السمعات تصدر هندسة صوتية دقيقة في الاذان وتعطعهم كل شي منه.
missing and stolen books and info and devices golde and silver and stone and money knowlonge and others things inside the computre and thinking of all of the prevese infromation. from headphones too.
بعض من المواقع
https://altibbi.com/
https://www.webteb.com/
https://mawdoo3.com/
fp055vq74rtinn9qwa1agkrllloqkie
1159055
1159054
2026-09-10T19:12:33Z
NDG
37587
استرجع تعديلات [[Special:Contributions/MHFR08|MHFR08]] ([[User talk:MHFR08|نقاش]]) حتى آخر مراجعة ل[[User:أبو هشام|أبو هشام]]
1158804
wikitext
text/x-wiki
{{شطب|دعاية صريحة أو ترويج لأمر ما}}
كل شي في المواقع من مقالات للعالم عبدالمجيد بن بن بدرالدين بن يوسف من المدينة المنورة عمره 34 اصبح الان ونحن في عام 2026/9/8 مقالات علمية كثيرة سرقة منه له لايوجد مقال علمي حديث الا من العالم عبدالمجيد بن محمد بن بدرالدين بن يوسف وجميعها مسروقة من اجهزة تنصة تعمل وتخرج المعلومات حتى من داخل الراس وهذه بعض المواقع لانها اساسا تهمس لهم علوم مثل سمعات المكيفات والمرواح فاذا نظرت لها سوف تجد بها شكل السمعات بمروحة وكل الاجهزة التي تشبة السمعات تصدر هندسة صوتية دقيقة في الاذان وتعطعهم كل شي منه.
كل شي من العالم عبدالمجيد بن محمد بن بدرالدين بن يوسف منذ ان اوعي على الحياة الى اليوم.
بعض من المواقع
https://altibbi.com/
https://www.webteb.com/
https://mawdoo3.com/
3ur5mn1nyz29rsygumxwqarsv16u36q
1159056
1159055
2026-09-10T19:15:34Z
MHFR08
39160
even wiki from him
1159056
wikitext
text/x-wiki
كل شي في المواقع من مقالات للعالم عبدالمجيد بن بن بدرالدين بن يوسف من المدينة المنورة عمره 34 اصبح الان ونحن في عام 2026/9/8 مقالات علمية كثيرة سرقة منه له لايوجد مقال علمي حديث الا من العالم عبدالمجيد بن محمد بن بدرالدين بن يوسف وجميعها مسروقة من اجهزة تنصة تعمل وتخرج المعلومات حتى من داخل الراس وهذه بعض المواقع لانها اساسا تهمس لهم علوم مثل سمعات المكيفات والمرواح فاذا نظرت لها سوف تجد بها شكل السمعات بمروحة وكل الاجهزة التي تشبة السمعات تصدر هندسة صوتية دقيقة في الاذان وتعطعهم كل شي منه.
missing and stolen books and info and devices golde and silver and stone and money knowlonge and others things inside the computre and thinking of all of the prevese infromation. from headphone
even wiki from him
بعض من المواقع
https://altibbi.com/
https://www.webteb.com/
https://mawdoo3.com/
e36mvu94w3mlhgp7l2hkuo6vrnmx5p0
1159057
1159056
2026-09-10T19:16:00Z
NDG
37587
استرجع تعديلات [[Special:Contributions/MHFR08|MHFR08]] ([[User talk:MHFR08|نقاش]]) حتى آخر مراجعة ل[[User:NDG|NDG]]
1158804
wikitext
text/x-wiki
{{شطب|دعاية صريحة أو ترويج لأمر ما}}
كل شي في المواقع من مقالات للعالم عبدالمجيد بن بن بدرالدين بن يوسف من المدينة المنورة عمره 34 اصبح الان ونحن في عام 2026/9/8 مقالات علمية كثيرة سرقة منه له لايوجد مقال علمي حديث الا من العالم عبدالمجيد بن محمد بن بدرالدين بن يوسف وجميعها مسروقة من اجهزة تنصة تعمل وتخرج المعلومات حتى من داخل الراس وهذه بعض المواقع لانها اساسا تهمس لهم علوم مثل سمعات المكيفات والمرواح فاذا نظرت لها سوف تجد بها شكل السمعات بمروحة وكل الاجهزة التي تشبة السمعات تصدر هندسة صوتية دقيقة في الاذان وتعطعهم كل شي منه.
كل شي من العالم عبدالمجيد بن محمد بن بدرالدين بن يوسف منذ ان اوعي على الحياة الى اليوم.
بعض من المواقع
https://altibbi.com/
https://www.webteb.com/
https://mawdoo3.com/
3ur5mn1nyz29rsygumxwqarsv16u36q
قالب:تفضيلات مقالة
10
243449
1158971
2026-09-10T12:00:59Z
حبيشان
31560
استيراد من ar.wikipedia.org
1158971
wikitext
text/x-wiki
<noinclude>
{{توثيق}}
</noinclude>
7qekabulji4sfrze1n6k9fo6oweltqo
قالب:تفضيلات مقالة/شرح
10
243450
1158972
2026-09-10T12:01:01Z
حبيشان
31560
استيراد من ar.wikipedia.org
1158972
wikitext
text/x-wiki
{{صفحة توثيق فرعية}}
هذا القالب ليس له إخراج يستعمل قاعدة بيانات مركزية لوسائط القوالب المستعملة في المقالة.
=== استعمال ===
<syntaxhighlight lang="wikitext" style="text-align:right;direction:rtl">
{{تفضيلات مقالة
|<اسم القالب>:<اسم الوسيط>=<القيمة>
|<اسم وسيط عام>=<القيمة>}}
</syntaxhighlight>
=== مثال ===
<syntaxhighlight lang="wikitext" style="text-align:right;direction:rtl">
{{تفضيلات مقالة
|قرآن:الرسم=عثماني
|أبيات:عرض=10em}}
</syntaxhighlight>
== القوالب التي تتأثر بتفضيلات المقالة ==
* {{قا|قرآن}}
* {{قا|أبيات}}
== بيانات القالب ==
{{رأس بيانات القالب}}
<templatedata>
{
"params": {},
"format": "block",
"description": "هذا القالب ليس له إخراج يستعمل قاعدة بيانات مركزية لوسائط القوالب المستعملة في المقالة"
}
</templatedata>
<includeonly>
[[تصنيف:قوالب ويكيبيديا]]
</includeonly>
atuvzsjyzz6c0gm88kvj2k87socaaq7
تَخَضْرَمَ
0
243451
1158974
2026-09-10T12:03:06Z
أبو هشام
20788
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1158974
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1535054}}
=== المعاني ===
'''تَخَضْرَمَ''' {{تفعلل}}
{{معجمية|L1535054|معاني}}
=== النطق ===
* {{أصد-عر|تَخَضْرَمَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=خضرم|وزن=تفعلل}}
=== المراجع ===
{{مراجع}}
49n87q8iwzdmf18oe9nir64wonazhc7
اِسْتَجْفَرَ
0
243452
1158977
2026-09-10T12:10:18Z
إسلام
12622
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1158977
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1533981}}
=== المعاني ===
'''اِسْتَجْفَرَ''' {{استفعل}}
{{معجمية|L1533981|معاني}}
=== النطق ===
* {{أصد-عر|اِسْتَجْفَرَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=جفر|وزن=استفعل}}
=== المراجع ===
{{مراجع}}
h2a481mb9xwlh8xoghijwmck1lmhn6q
خَضْرَمَ
0
243453
1158978
2026-09-10T12:10:53Z
أبو هشام
20788
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1158978
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1535053}}
=== المعاني ===
'''خَضْرَمَ''' {{فعلل}}
{{معجمية|L1535053|معاني}}
=== النطق ===
* {{أصد-عر|خَضْرَمَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=خضرم|وزن=فعلل}}
=== المراجع ===
{{مراجع}}
aip0sfpktc9q3m9mum9x91k0d0hzrim
جَفَّرَ
0
243454
1158979
2026-09-10T12:12:11Z
إسلام
12622
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1158979
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1533984}}
=== المعاني ===
'''جَفَّرَ''' {{فعّل}}
{{معجمية|L1533984|معاني}}
=== النطق ===
* {{أصد-عر|جَفَّرَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=جفر|وزن=فعّل}}
=== المراجع ===
{{مراجع}}
16dxrlpp97pzc3tn35w446gn2e1y200
قالب:تفضيل مقالة
10
243455
1158980
2026-09-10T12:13:07Z
حبيشان
31560
استيراد من ar.wikipedia.org
1158980
wikitext
text/x-wiki
{{#invoke:Art pref|main}}
hns7jbjes8angd6oije7f31uf344nfc
اِنْجَفَلَ
0
243456
1158981
2026-09-10T12:14:30Z
إسلام
12622
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1158981
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1533987}}
=== المعاني ===
'''اِنْجَفَلَ''' {{انفعل}}
{{معجمية|L1533987|معاني}}
=== النطق ===
* {{أصد-عر|اِنْجَفَلَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=جفل|وزن=انفعل}}
=== المراجع ===
{{مراجع}}
4ztmcrlidvjt0vc0qbn1nwadeog0k1e
خَضْلَفَ
0
243457
1158982
2026-09-10T12:14:46Z
أبو هشام
20788
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1158982
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1535064}}
=== المعاني ===
'''خَضْلَفَ''' {{فعلل}}
{{معجمية|L1535064|معاني}}
=== النطق ===
* {{أصد-عر|خَضْلَفَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=خضلف|وزن=فعلل}}
=== المراجع ===
{{مراجع}}
jmxc98yf6qrlpx45o9cbemf6vlorfhz
تَجَفَّلَ
0
243458
1158983
2026-09-10T12:15:47Z
إسلام
12622
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1158983
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1533988}}
=== المعاني ===
'''تَجَفَّلَ''' {{تفعّل}}
{{معجمية|L1533988|معاني}}
=== النطق ===
* {{أصد-عر|تَجَفَّلَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=جفل|وزن=تفعّل}}
=== المراجع ===
{{مراجع}}
frdvc5s8lvxjpqvxjiesgoramehe4zp
جَمْعَرَ
0
243459
1158984
2026-09-10T12:17:23Z
إسلام
12622
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1158984
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1534066}}
=== المعاني ===
'''جَمْعَرَ''' {{فعلل}}
{{معجمية|L1534066|معاني}}
=== النطق ===
* {{أصد-عر|جَمْعَرَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=جمعر|وزن=فعلل}}
=== المراجع ===
{{مراجع}}
fcvx6yueytcrhopsmox8kgfprj4dqnx
تَخَاطَأَ
0
243460
1158986
2026-09-10T12:18:27Z
أبو هشام
20788
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1158986
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1495794}}
=== المعاني ===
'''تَخَاطَأَ''' {{تفاعل}}
{{معجمية|L1495794|معاني}}
=== النطق ===
* {{أصد-عر|تَخَاطَأَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=خطأ|وزن=تفاعل}}
=== المراجع ===
{{مراجع}}
4jl6juqibu6xj7tj45jmuu6ctg3veuf
تَجَمَّى
0
243461
1158987
2026-09-10T12:19:05Z
إسلام
12622
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1158987
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1534072}}
=== المعاني ===
'''تَجَمَّى''' {{تفعّل}}
{{معجمية|L1534072|معاني}}
=== النطق ===
* {{أصد-عر|تَجَمَّى}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=جمي|وزن=تفعّل}}
=== المراجع ===
{{مراجع}}
ku164rp3t213wu09jfraj78zp3x7h4h
جَمَى
0
243462
1158988
2026-09-10T12:19:26Z
إسلام
12622
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1158988
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1545669}}
=== المعاني ===
'''جَمَى''' {{ضرب}}
{{معجمية|L1545669|معاني}}
=== النطق ===
* {{أصد-عر|جَمَى}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=جمي|وزن=فعَل يفعِل}}
=== المراجع ===
{{مراجع}}
hw2xcam9xvfb4oudqp77iwlbnbta676
اِسْتَخْطَأَ
0
243463
1158989
2026-09-10T12:19:37Z
أبو هشام
20788
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1158989
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1535069}}
=== المعاني ===
'''اِسْتَخْطَأَ''' {{استفعل}}
{{معجمية|L1535069|معاني}}
=== النطق ===
* {{أصد-عر|اِسْتَخْطَأَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=خطأ|وزن=استفعل}}
=== المراجع ===
{{مراجع}}
ifrp2afdzzhx3wbccdu8o6vufwu2eg2
اِسْتَجَابَ
0
243464
1158990
2026-09-10T12:23:50Z
إسلام
12622
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1158990
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1480999}}
=== المعاني ===
'''اِسْتَجَابَ''' {{استفعل}}
{{معجمية|L1480999|معاني}}
=== النطق ===
* {{أصد-عر|اِسْتَجَابَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=جوب|وزن=استفعل}}
=== المراجع ===
{{مراجع}}
hgbx5zwuw7hira9gs8f775mamp4gzec
تَجَانَبَ
0
243465
1158991
2026-09-10T12:24:50Z
إسلام
12622
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1158991
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1486779}}
=== المعاني ===
'''تَجَانَبَ''' {{تفاعل}}
{{معجمية|L1486779|معاني}}
=== النطق ===
* {{أصد-عر|تَجَانَبَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=جنب|وزن=تفاعل}}
=== المراجع ===
{{مراجع}}
25aaylpa4ekkf6y6dkc2tn5udg64bsw
جَهْجَهَ
0
243466
1158992
2026-09-10T12:26:34Z
إسلام
12622
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1158992
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1534098}}
=== المعاني ===
'''جَهْجَهَ''' {{فعلل}}
{{معجمية|L1534098|معاني}}
=== النطق ===
* {{أصد-عر|جَهْجَهَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=جهجه|وزن=فعلل}}
=== المراجع ===
{{مراجع}}
2n32ek19yq75qwcex45a4nr01ta8iil
تَجَاهَدَ
0
243467
1158993
2026-09-10T12:27:18Z
إسلام
12622
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1158993
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1534101}}
=== المعاني ===
'''تَجَاهَدَ''' {{تفاعل}}
{{معجمية|L1534101|معاني}}
=== النطق ===
* {{أصد-عر|تَجَاهَدَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=جهد|وزن=تفاعل}}
=== المراجع ===
{{مراجع}}
kgygtkww1aqhco9qve574muc5uy663j
اِجْتَهَرَ
0
243468
1158994
2026-09-10T12:29:58Z
إسلام
12622
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1158994
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1534102}}
=== المعاني ===
'''اِجْتَهَرَ''' {{افتعل}}
{{معجمية|L1534102|معاني}}
=== النطق ===
* {{أصد-عر|اِجْتَهَرَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=جهر|وزن=افتعل}}
=== المراجع ===
{{مراجع}}
6juzai40l3fz8a6g5jndwqrwmhdss6t
جَهْمَزَ
0
243469
1158995
2026-09-10T12:31:15Z
إسلام
12622
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1158995
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1534109}}
=== المعاني ===
'''جَهْمَزَ''' {{فعلل}}
{{معجمية|L1534109|معاني}}
=== النطق ===
* {{أصد-عر|جَهْمَزَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=جهمز|وزن=فعلل}}
=== المراجع ===
{{مراجع}}
fl3l9h02aiys71rdg5nzpmglrxs8anh
تَجَانَفَ
0
243470
1158998
2026-09-10T12:38:57Z
إسلام
12622
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1158998
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1534090}}
=== المعاني ===
'''تَجَانَفَ''' {{تفاعل}}
{{معجمية|L1534090|معاني}}
=== النطق ===
* {{أصد-عر|تَجَانَفَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=جنف|وزن=تفاعل}}
=== المراجع ===
{{مراجع}}
3r323lbh91xo338uyp7la26scdkbwhf
وحدة:ar-verb/testcases/بيانات/14
828
243471
1159040
2026-09-10T12:39:58Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159040
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 14 من 15.
return {
{
label = "آدَبَ (p278)", root = "أدب", wazn = "فاعل",
forms = {
{"imp_2d", "آدِبَا"},
{"imp_2fp", "آدِبْنَ"},
{"imp_2fs", "آدِبِي"},
{"imp_2mp", "آدِبُوا"},
{"imp_2ms", "آدِبْ"},
{"ind_1p", "نُؤَادِبُ"},
{"ind_1s", "أُؤَادِبُ"},
{"ind_2d", "تُؤَادِبَانِ"},
{"ind_2fp", "تُؤَادِبْنَ"},
{"ind_2fs", "تُؤَادِبِينَ"},
{"ind_2mp", "تُؤَادِبُونَ"},
{"ind_2ms", "تُؤَادِبُ"},
{"ind_3fd", "تُؤَادِبَانِ"},
{"ind_3fp", "يُؤَادِبْنَ"},
{"ind_3fs", "تُؤَادِبُ"},
{"ind_3md", "يُؤَادِبَانِ"},
{"ind_3mp", "يُؤَادِبُونَ"},
{"ind_3ms", "يُؤَادِبُ"},
{"past_1p", "آدَبْنَا"},
{"past_1s", "آدَبْتُ"},
{"past_2d", "آدَبْتُمَا"},
{"past_2fp", "آدَبْتُنَّ"},
{"past_2fs", "آدَبْتِ"},
{"past_2mp", "آدَبْتُمْ"},
{"past_2ms", "آدَبْتَ"},
{"past_3fd", "آدَبَتَا"},
{"past_3fp", "آدَبْنَ"},
{"past_3fs", "آدَبَتْ"},
{"past_3md", "آدَبَا"},
{"past_3mp", "آدَبُوا"},
{"past_3ms", "آدَبَ"},
},
},
{
label = "سَاءَلَ (p279)", root = "سأل", wazn = "فاعل",
forms = {
{"imp_2d", "سَائِلَا"},
{"imp_2fp", "سَائِلْنَ"},
{"imp_2fs", "سَائِلِي"},
{"imp_2mp", "سَائِلُوا"},
{"imp_2ms", "سَائِلْ"},
{"ind_1p", "نُسَائِلُ"},
{"ind_1s", "أُسَائِلُ"},
{"ind_2d", "تُسَائِلَانِ"},
{"ind_2fp", "تُسَائِلْنَ"},
{"ind_2fs", "تُسَائِلِينَ"},
{"ind_2mp", "تُسَائِلُونَ"},
{"ind_2ms", "تُسَائِلُ"},
{"ind_3fd", "تُسَائِلَانِ"},
{"ind_3fp", "يُسَائِلْنَ"},
{"ind_3fs", "تُسَائِلُ"},
{"ind_3md", "يُسَائِلَانِ"},
{"ind_3mp", "يُسَائِلُونَ"},
{"ind_3ms", "يُسَائِلُ"},
{"past_1p", "سَاءَلْنَا"},
{"past_1s", "سَاءَلْتُ"},
{"past_2d", "سَاءَلْتُمَا"},
{"past_2fp", "سَاءَلْتُنَّ"},
{"past_2fs", "سَاءَلْتِ"},
{"past_2mp", "سَاءَلْتُمْ"},
{"past_2ms", "سَاءَلْتَ"},
{"past_3fd", "سَاءَلَتَا"},
{"past_3fp", "سَاءَلْنَ"},
{"past_3fs", "سَاءَلَتْ"},
{"past_3md", "سَاءَلَا"},
{"past_3mp", "سَاءَلُوا"},
{"past_3ms", "سَاءَلَ"},
},
},
{
label = "لَاءَمَ (p279)", root = "لءم", wazn = "فاعل",
forms = {
{"imp_2d", "لَائِمَا"},
{"imp_2fp", "لَائِمْنَ"},
{"imp_2fs", "لَائِمِي"},
{"imp_2mp", "لَائِمُوا"},
{"imp_2ms", "لَائِمْ"},
{"ind_1p", "نُلَائِمُ"},
{"ind_1s", "أُلَائِمُ"},
{"ind_2d", "تُلَائِمَانِ"},
{"ind_2fp", "تُلَائِمْنَ"},
{"ind_2fs", "تُلَائِمِينَ"},
{"ind_2mp", "تُلَائِمُونَ"},
{"ind_2ms", "تُلَائِمُ"},
{"ind_3fd", "تُلَائِمَانِ"},
{"ind_3fp", "يُلَائِمْنَ"},
{"ind_3fs", "تُلَائِمُ"},
{"ind_3md", "يُلَائِمَانِ"},
{"ind_3mp", "يُلَائِمُونَ"},
{"ind_3ms", "يُلَائِمُ"},
{"past_1p", "لَاءَمْنَا"},
{"past_1s", "لَاءَمْتُ"},
{"past_2d", "لَاءَمْتُمَا"},
{"past_2fp", "لَاءَمْتُنَّ"},
{"past_2fs", "لَاءَمْتِ"},
{"past_2mp", "لَاءَمْتُمْ"},
{"past_2ms", "لَاءَمْتَ"},
{"past_3fd", "لَاءَمَتَا"},
{"past_3fp", "لَاءَمْنَ"},
{"past_3fs", "لَاءَمَتْ"},
{"past_3md", "لَاءَمَا"},
{"past_3mp", "لَاءَمُوا"},
{"past_3ms", "لَاءَمَ"},
},
},
{
label = "آوَى (p288)", root = "أوي", wazn = "فاعل",
forms = {
{"imp_2d", "آوِيَا"},
{"imp_2fp", "آوِينَ"},
{"imp_2fs", "آوِي"},
{"imp_2mp", "آوُوا"},
{"imp_2ms", "آوِ"},
{"ind_1p", "نُؤَاوِي"},
{"ind_1s", "أُؤَاوِي"},
{"ind_2d", "تُؤَاوِيَانِ"},
{"ind_2fp", "تُؤَاوِينَ"},
{"ind_2fs", "تُؤَاوِينَ"},
{"ind_2mp", "تُؤَاوُونَ"},
{"ind_2ms", "تُؤَاوِي"},
{"ind_3fd", "تُؤَاوِيَانِ"},
{"ind_3fp", "يُؤَاوِينَ"},
{"ind_3fs", "تُؤَاوِي"},
{"ind_3md", "يُؤَاوِيَانِ"},
{"ind_3mp", "يُؤَاوُونَ"},
{"ind_3ms", "يُؤَاوِي"},
{"past_1p", "آوَيْنَا"},
{"past_1s", "آوَيْتُ"},
{"past_2d", "آوَيْتُمَا"},
{"past_2fp", "آوَيْتُنَّ"},
{"past_2fs", "آوَيْتِ"},
{"past_2mp", "آوَيْتُمْ"},
{"past_2ms", "آوَيْتَ"},
{"past_3fd", "آوَتَا"},
{"past_3fp", "آوَيْنَ"},
{"past_3fs", "آوَتْ"},
{"past_3md", "آوَيَا"},
{"past_3mp", "آوَوْا"},
{"past_3ms", "آوَى"},
},
},
{
label = "آجَرَ (p292)", root = "أجر", wazn = "أفعل",
forms = {
{"imp_2d", "آجِرَا"},
{"imp_2fp", "آجِرْنَ"},
{"imp_2fs", "آجِرِي"},
{"imp_2mp", "آجِرُوا"},
{"imp_2ms", "آجِرْ"},
{"ind_1p", "نُؤْجِرُ"},
{"ind_1s", "أُوجِرُ"},
{"ind_2d", "تُؤْجِرَانِ"},
{"ind_2fp", "تُؤْجِرْنَ"},
{"ind_2fs", "تُؤْجِرِينَ"},
{"ind_2mp", "تُؤْجِرُونَ"},
{"ind_2ms", "تُؤْجِرُ"},
{"ind_3fd", "تُؤْجِرَانِ"},
{"ind_3fp", "يُؤْجِرْنَ"},
{"ind_3fs", "تُؤْجِرُ"},
{"ind_3md", "يُؤْجِرَانِ"},
{"ind_3mp", "يُؤْجِرُونَ"},
{"ind_3ms", "يُؤْجِرُ"},
{"past_1p", "آجَرْنَا"},
{"past_1s", "آجَرْتُ"},
{"past_2d", "آجَرْتُمَا"},
{"past_2fp", "آجَرْتُنَّ"},
{"past_2fs", "آجَرْتِ"},
{"past_2mp", "آجَرْتُمْ"},
{"past_2ms", "آجَرْتَ"},
{"past_3fd", "آجَرَتَا"},
{"past_3fp", "آجَرْنَ"},
{"past_3fs", "آجَرَتْ"},
{"past_3md", "آجَرَا"},
{"past_3mp", "آجَرُوا"},
{"past_3ms", "آجَرَ"},
},
},
{
label = "آذَنَ (p292)", root = "أذن", wazn = "أفعل",
forms = {
{"imp_2d", "آذِنَا"},
{"imp_2fp", "آذِنَّ"},
{"imp_2fs", "آذِنِي"},
{"imp_2mp", "آذِنُوا"},
{"imp_2ms", "آذِنْ"},
{"ind_1p", "نُؤْذِنُ"},
{"ind_1s", "أُوذِنُ"},
{"ind_2d", "تُؤْذِنَانِ"},
{"ind_2fp", "تُؤْذِنَّ"},
{"ind_2fs", "تُؤْذِنِينَ"},
{"ind_2mp", "تُؤْذِنُونَ"},
{"ind_2ms", "تُؤْذِنُ"},
{"ind_3fd", "تُؤْذِنَانِ"},
{"ind_3fp", "يُؤْذِنَّ"},
{"ind_3fs", "تُؤْذِنُ"},
{"ind_3md", "يُؤْذِنَانِ"},
{"ind_3mp", "يُؤْذِنُونَ"},
{"ind_3ms", "يُؤْذِنُ"},
{"past_1p", "آذَنَّا"},
{"past_1s", "آذَنْتُ"},
{"past_2d", "آذَنْتُمَا"},
{"past_2fp", "آذَنْتُنَّ"},
{"past_2fs", "آذَنْتِ"},
{"past_2mp", "آذَنْتُمْ"},
{"past_2ms", "آذَنْتَ"},
{"past_3fd", "آذَنَتَا"},
{"past_3fp", "آذَنَّ"},
{"past_3fs", "آذَنَتْ"},
{"past_3md", "آذَنَا"},
{"past_3mp", "آذَنُوا"},
{"past_3ms", "آذَنَ"},
},
},
{
label = "أَثْوَبَ (p297)", root = "ثوب", wazn = "أفعل",
forms = {
{"imp_2d", "أَثْوِبَا"},
{"imp_2fp", "أَثْوِبْنَ"},
{"imp_2fs", "أَثْوِبِي"},
{"imp_2mp", "أَثْوِبُوا"},
{"imp_2ms", "أَثْوِبْ"},
{"ind_1p", "نُثْوِبُ"},
{"ind_1s", "أُثْوِبُ"},
{"ind_2d", "تُثْوِبَانِ"},
{"ind_2fp", "تُثْوِبْنَ"},
{"ind_2fs", "تُثْوِبِينَ"},
{"ind_2mp", "تُثْوِبُونَ"},
{"ind_2ms", "تُثْوِبُ"},
{"ind_3fd", "تُثْوِبَانِ"},
{"ind_3fp", "يُثْوِبْنَ"},
{"ind_3fs", "تُثْوِبُ"},
{"ind_3md", "يُثْوِبَانِ"},
{"ind_3mp", "يُثْوِبُونَ"},
{"ind_3ms", "يُثْوِبُ"},
{"past_1p", "أَثْوَبْنَا"},
{"past_1s", "أَثْوَبْتُ"},
{"past_2d", "أَثْوَبْتُمَا"},
{"past_2fp", "أَثْوَبْتُنَّ"},
{"past_2fs", "أَثْوَبْتِ"},
{"past_2mp", "أَثْوَبْتُمْ"},
{"past_2ms", "أَثْوَبْتَ"},
{"past_3fd", "أَثْوَبَتَا"},
{"past_3fp", "أَثْوَبْنَ"},
{"past_3fs", "أَثْوَبَتْ"},
{"past_3md", "أَثْوَبَا"},
{"past_3mp", "أَثْوَبُوا"},
{"past_3ms", "أَثْوَبَ"},
},
},
{
label = "تَعاثَثَ (p324)", root = "عثث", wazn = "تفاعل",
forms = {
{"imp_2d", "تَعَاثَثَا"},
{"imp_2fp", "تَعَاثَثْنَ"},
{"imp_2fs", "تَعَاثَثِي"},
{"imp_2mp", "تَعَاثَثُوا"},
{"imp_2ms", "تَعَاثَثْ"},
{"ind_1p", "نَتَعَاثَثُ"},
{"ind_1s", "أَتَعَاثَثُ"},
{"ind_2d", "تَتَعَاثَثَانِ"},
{"ind_2fp", "تَتَعَاثَثْنَ"},
{"ind_2fs", "تَتَعَاثَثِينَ"},
{"ind_2mp", "تَتَعَاثَثُونَ"},
{"ind_2ms", "تَتَعَاثَثُ"},
{"ind_3fd", "تَتَعَاثَثَانِ"},
{"ind_3fp", "يَتَعَاثَثْنَ"},
{"ind_3fs", "تَتَعَاثَثُ"},
{"ind_3md", "يَتَعَاثَثَانِ"},
{"ind_3mp", "يَتَعَاثَثُونَ"},
{"ind_3ms", "يَتَعَاثَثُ"},
{"past_1p", "تَعَاثَثْنَا"},
{"past_1s", "تَعَاثَثْتُ"},
{"past_2d", "تَعَاثَثْتُمَا"},
{"past_2fp", "تَعَاثَثْتُنَّ"},
{"past_2fs", "تَعَاثَثْتِ"},
{"past_2mp", "تَعَاثَثْتُمْ"},
{"past_2ms", "تَعَاثَثْتَ"},
{"past_3fd", "تَعَاثَثَتَا"},
{"past_3fp", "تَعَاثَثْنَ"},
{"past_3fs", "تَعَاثَثَتْ"},
{"past_3md", "تَعَاثَثَا"},
{"past_3mp", "تَعَاثَثُوا"},
{"past_3ms", "تَعَاثَثَ"},
},
},
{
label = "تَغاضَضَ (p324)", root = "غضض", wazn = "تفاعل",
forms = {
{"imp_2d", "تَغَاضَضَا"},
{"imp_2fp", "تَغَاضَضْنَ"},
{"imp_2fs", "تَغَاضَضِي"},
{"imp_2mp", "تَغَاضَضُوا"},
{"imp_2ms", "تَغَاضَضْ"},
{"ind_1p", "نَتَغَاضَضُ"},
{"ind_1s", "أَتَغَاضَضُ"},
{"ind_2d", "تَتَغَاضَضَانِ"},
{"ind_2fp", "تَتَغَاضَضْنَ"},
{"ind_2fs", "تَتَغَاضَضِينَ"},
{"ind_2mp", "تَتَغَاضَضُونَ"},
{"ind_2ms", "تَتَغَاضَضُ"},
{"ind_3fd", "تَتَغَاضَضَانِ"},
{"ind_3fp", "يَتَغَاضَضْنَ"},
{"ind_3fs", "تَتَغَاضَضُ"},
{"ind_3md", "يَتَغَاضَضَانِ"},
{"ind_3mp", "يَتَغَاضَضُونَ"},
{"ind_3ms", "يَتَغَاضَضُ"},
{"past_1p", "تَغَاضَضْنَا"},
{"past_1s", "تَغَاضَضْتُ"},
{"past_2d", "تَغَاضَضْتُمَا"},
{"past_2fp", "تَغَاضَضْتُنَّ"},
{"past_2fs", "تَغَاضَضْتِ"},
{"past_2mp", "تَغَاضَضْتُمْ"},
{"past_2ms", "تَغَاضَضْتَ"},
{"past_3fd", "تَغَاضَضَتَا"},
{"past_3fp", "تَغَاضَضْنَ"},
{"past_3fs", "تَغَاضَضَتْ"},
{"past_3md", "تَغَاضَضَا"},
{"past_3mp", "تَغَاضَضُوا"},
{"past_3ms", "تَغَاضَضَ"},
},
},
{
label = "تَآمَرَ (p325)", root = "أمر", wazn = "تفاعل",
forms = {
{"imp_2d", "تَآمَرَا"},
{"imp_2fp", "تَآمَرْنَ"},
{"imp_2fs", "تَآمَرِي"},
{"imp_2mp", "تَآمَرُوا"},
{"imp_2ms", "تَآمَرْ"},
{"ind_1p", "نَتَآمَرُ"},
{"ind_1s", "أَتَآمَرُ"},
{"ind_2d", "تَتَآمَرَانِ"},
{"ind_2fp", "تَتَآمَرْنَ"},
{"ind_2fs", "تَتَآمَرِينَ"},
{"ind_2mp", "تَتَآمَرُونَ"},
{"ind_2ms", "تَتَآمَرُ"},
{"ind_3fd", "تَتَآمَرَانِ"},
{"ind_3fp", "يَتَآمَرْنَ"},
{"ind_3fs", "تَتَآمَرُ"},
{"ind_3md", "يَتَآمَرَانِ"},
{"ind_3mp", "يَتَآمَرُونَ"},
{"ind_3ms", "يَتَآمَرُ"},
{"past_1p", "تَآمَرْنَا"},
{"past_1s", "تَآمَرْتُ"},
{"past_2d", "تَآمَرْتُمَا"},
{"past_2fp", "تَآمَرْتُنَّ"},
{"past_2fs", "تَآمَرْتِ"},
{"past_2mp", "تَآمَرْتُمْ"},
{"past_2ms", "تَآمَرْتَ"},
{"past_3fd", "تَآمَرَتَا"},
{"past_3fp", "تَآمَرْنَ"},
{"past_3fs", "تَآمَرَتْ"},
{"past_3md", "تَآمَرَا"},
{"past_3mp", "تَآمَرُوا"},
{"past_3ms", "تَآمَرَ"},
},
},
{
label = "تَآلَفَ (p325)", root = "ألف", wazn = "تفاعل",
forms = {
{"imp_2d", "تَآلَفَا"},
{"imp_2fp", "تَآلَفْنَ"},
{"imp_2fs", "تَآلَفِي"},
{"imp_2mp", "تَآلَفُوا"},
{"imp_2ms", "تَآلَفْ"},
{"ind_1p", "نَتَآلَفُ"},
{"ind_1s", "أَتَآلَفُ"},
{"ind_2d", "تَتَآلَفَانِ"},
{"ind_2fp", "تَتَآلَفْنَ"},
{"ind_2fs", "تَتَآلَفِينَ"},
{"ind_2mp", "تَتَآلَفُونَ"},
{"ind_2ms", "تَتَآلَفُ"},
{"ind_3fd", "تَتَآلَفَانِ"},
{"ind_3fp", "يَتَآلَفْنَ"},
{"ind_3fs", "تَتَآلَفُ"},
{"ind_3md", "يَتَآلَفَانِ"},
{"ind_3mp", "يَتَآلَفُونَ"},
{"ind_3ms", "يَتَآلَفُ"},
{"past_1p", "تَآلَفْنَا"},
{"past_1s", "تَآلَفْتُ"},
{"past_2d", "تَآلَفْتُمَا"},
{"past_2fp", "تَآلَفْتُنَّ"},
{"past_2fs", "تَآلَفْتِ"},
{"past_2mp", "تَآلَفْتُمْ"},
{"past_2ms", "تَآلَفْتَ"},
{"past_3fd", "تَآلَفَتَا"},
{"past_3fp", "تَآلَفْنَ"},
{"past_3fs", "تَآلَفَتْ"},
{"past_3md", "تَآلَفَا"},
{"past_3mp", "تَآلَفُوا"},
{"past_3ms", "تَآلَفَ"},
},
},
{
label = "تَباوَأَ (p331)", root = "بوأ", wazn = "تفاعل",
forms = {
{"imp_2d", "تَبَاوَآ"},
{"imp_2fp", "تَبَاوَأْنَ"},
{"imp_2fs", "تَبَاوَئِي"},
{"imp_2mp", "تَبَاوَؤُوا"},
{"imp_2ms", "تَبَاوَأْ"},
{"ind_1p", "نَتَبَاوَأُ"},
{"ind_1s", "أَتَبَاوَأُ"},
{"ind_2d", "تَتَبَاوَآنِ"},
{"ind_2fp", "تَتَبَاوَأْنَ"},
{"ind_2fs", "تَتَبَاوَئِينَ"},
{"ind_2mp", "تَتَبَاوَؤُونَ"},
{"ind_2ms", "تَتَبَاوَأُ"},
{"ind_3fd", "تَتَبَاوَآنِ"},
{"ind_3fp", "يَتَبَاوَأْنَ"},
{"ind_3fs", "تَتَبَاوَأُ"},
{"ind_3md", "يَتَبَاوَآنِ"},
{"ind_3mp", "يَتَبَاوَؤُونَ"},
{"ind_3ms", "يَتَبَاوَأُ"},
{"past_1p", "تَبَاوَأْنَا"},
{"past_1s", "تَبَاوَأْتُ"},
{"past_2d", "تَبَاوَأْتُمَا"},
{"past_2fp", "تَبَاوَأْتُنَّ"},
{"past_2fs", "تَبَاوَأْتِ"},
{"past_2mp", "تَبَاوَأْتُمْ"},
{"past_2ms", "تَبَاوَأْتَ"},
{"past_3fd", "تَبَاوَأَتَا"},
{"past_3fp", "تَبَاوَأْنَ"},
{"past_3fs", "تَبَاوَأَتْ"},
{"past_3md", "تَبَاوَآ"},
{"past_3mp", "تَبَاوَؤُوا"},
{"past_3ms", "تَبَاوَأَ"},
},
},
{
label = "اِمَّدَحَ (p339)", root = "مدح", wazn = "انفعل",
reduced = true,
forms = {
{"imp_2d", "اِمَّدِحَا"},
{"imp_2fp", "اِمَّدِحْنَ"},
{"imp_2fs", "اِمَّدِحِي"},
{"imp_2mp", "اِمَّدِحُوا"},
{"imp_2ms", "اِمَّدِحْ"},
{"ind_1p", "نَمَّدِحُ"},
{"ind_1s", "أَمَّدِحُ"},
{"ind_2d", "تَمَّدِحَانِ"},
{"ind_2fp", "تَمَّدِحْنَ"},
{"ind_2fs", "تَمَّدِحِينَ"},
{"ind_2mp", "تَمَّدِحُونَ"},
{"ind_2ms", "تَمَّدِحُ"},
{"ind_3fd", "تَمَّدِحَانِ"},
{"ind_3fp", "يَمَّدِحْنَ"},
{"ind_3fs", "تَمَّدِحُ"},
{"ind_3md", "يَمَّدِحَانِ"},
{"ind_3mp", "يَمَّدِحُونَ"},
{"ind_3ms", "يَمَّدِحُ"},
{"past_1p", "اِمَّدَحْنَا"},
{"past_1s", "اِمَّدَحْتُ"},
{"past_2d", "اِمَّدَحْتُمَا"},
{"past_2fp", "اِمَّدَحْتُنَّ"},
{"past_2fs", "اِمَّدَحْتِ"},
{"past_2mp", "اِمَّدَحْتُمْ"},
{"past_2ms", "اِمَّدَحْتَ"},
{"past_3fd", "اِمَّدَحَتَا"},
{"past_3fp", "اِمَّدَحْنَ"},
{"past_3fs", "اِمَّدَحَتْ"},
{"past_3md", "اِمَّدَحَا"},
{"past_3mp", "اِمَّدَحُوا"},
{"past_3ms", "اِمَّدَحَ"},
},
},
{
label = "اِنَّمَسَ (p339)", root = "نمس", wazn = "انفعل",
forms = {
{"imp_2d", "اِنَّمِسَا"},
{"imp_2fp", "اِنَّمِسْنَ"},
{"imp_2fs", "اِنَّمِسِي"},
{"imp_2mp", "اِنَّمِسُوا"},
{"imp_2ms", "اِنَّمِسْ"},
{"ind_1p", "نَنَّمِسُ"},
{"ind_1s", "أَنَّمِسُ"},
{"ind_2d", "تَنَّمِسَانِ"},
{"ind_2fp", "تَنَّمِسْنَ"},
{"ind_2fs", "تَنَّمِسِينَ"},
{"ind_2mp", "تَنَّمِسُونَ"},
{"ind_2ms", "تَنَّمِسُ"},
{"ind_3fd", "تَنَّمِسَانِ"},
{"ind_3fp", "يَنَّمِسْنَ"},
{"ind_3fs", "تَنَّمِسُ"},
{"ind_3md", "يَنَّمِسَانِ"},
{"ind_3mp", "يَنَّمِسُونَ"},
{"ind_3ms", "يَنَّمِسُ"},
{"past_1p", "اِنَّمَسْنَا"},
{"past_1s", "اِنَّمَسْتُ"},
{"past_2d", "اِنَّمَسْتُمَا"},
{"past_2fp", "اِنَّمَسْتُنَّ"},
{"past_2fs", "اِنَّمَسْتِ"},
{"past_2mp", "اِنَّمَسْتُمْ"},
{"past_2ms", "اِنَّمَسْتَ"},
{"past_3fd", "اِنَّمَسَتَا"},
{"past_3fp", "اِنَّمَسْنَ"},
{"past_3fs", "اِنَّمَسَتْ"},
{"past_3md", "اِنَّمَسَا"},
{"past_3mp", "اِنَّمَسُوا"},
{"past_3ms", "اِنَّمَسَ"},
},
},
{
label = "اِنْسَيَأَ (p345)", root = "سيأ", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْسَيِئَا"},
{"imp_2fp", "اِنْسَيِئْنَ"},
{"imp_2fs", "اِنْسَيِئِي"},
{"imp_2mp", "اِنْسَيِئُوا"},
{"imp_2ms", "اِنْسَيِئْ"},
{"ind_1p", "نَنْسَيِئُ"},
{"ind_1s", "أَنْسَيِئُ"},
{"ind_2d", "تَنْسَيِئَانِ"},
{"ind_2fp", "تَنْسَيِئْنَ"},
{"ind_2fs", "تَنْسَيِئِينَ"},
{"ind_2mp", "تَنْسَيِئُونَ"},
{"ind_2ms", "تَنْسَيِئُ"},
{"ind_3fd", "تَنْسَيِئَانِ"},
{"ind_3fp", "يَنْسَيِئْنَ"},
{"ind_3fs", "تَنْسَيِئُ"},
{"ind_3md", "يَنْسَيِئَانِ"},
{"ind_3mp", "يَنْسَيِئُونَ"},
{"ind_3ms", "يَنْسَيِئُ"},
{"past_1p", "اِنْسَيَأْنَا"},
{"past_1s", "اِنْسَيَأْتُ"},
{"past_2d", "اِنْسَيَأْتُمَا"},
{"past_2fp", "اِنْسَيَأْتُنَّ"},
{"past_2fs", "اِنْسَيَأْتِ"},
{"past_2mp", "اِنْسَيَأْتُمْ"},
{"past_2ms", "اِنْسَيَأْتَ"},
{"past_3fd", "اِنْسَيَأَتَا"},
{"past_3fp", "اِنْسَيَأْنَ"},
{"past_3fs", "اِنْسَيَأَتْ"},
{"past_3md", "اِنْسَيَآ"},
{"past_3mp", "اِنْسَيَؤُوا"},
{"past_3ms", "اِنْسَيَأَ"},
},
},
{
label = "إِدَّعَمَ (p352)", root = "دعم", wazn = "افتعل",
forms = {
{"imp_2d", "اِدَّعِمَا"},
{"imp_2fp", "اِدَّعِمْنَ"},
{"imp_2fs", "اِدَّعِمِي"},
{"imp_2mp", "اِدَّعِمُوا"},
{"imp_2ms", "اِدَّعِمْ"},
{"ind_1p", "نَدَّعِمُ"},
{"ind_1s", "أَدَّعِمُ"},
{"ind_2d", "تَدَّعِمَانِ"},
{"ind_2fp", "تَدَّعِمْنَ"},
{"ind_2fs", "تَدَّعِمِينَ"},
{"ind_2mp", "تَدَّعِمُونَ"},
{"ind_2ms", "تَدَّعِمُ"},
{"ind_3fd", "تَدَّعِمَانِ"},
{"ind_3fp", "يَدَّعِمْنَ"},
{"ind_3fs", "تَدَّعِمُ"},
{"ind_3md", "يَدَّعِمَانِ"},
{"ind_3mp", "يَدَّعِمُونَ"},
{"ind_3ms", "يَدَّعِمُ"},
{"past_1p", "اِدَّعَمْنَا"},
{"past_1s", "اِدَّعَمْتُ"},
{"past_2d", "اِدَّعَمْتُمَا"},
{"past_2fp", "اِدَّعَمْتُنَّ"},
{"past_2fs", "اِدَّعَمْتِ"},
{"past_2mp", "اِدَّعَمْتُمْ"},
{"past_2ms", "اِدَّعَمْتَ"},
{"past_3fd", "اِدَّعَمَتَا"},
{"past_3fp", "اِدَّعَمْنَ"},
{"past_3fs", "اِدَّعَمَتْ"},
{"past_3md", "اِدَّعَمَا"},
{"past_3mp", "اِدَّعَمُوا"},
{"past_3ms", "اِدَّعَمَ"},
},
},
{
label = "اِطَّلَبَ (p352)", root = "طلب", wazn = "افتعل",
forms = {
{"imp_2d", "اِطَّلِبَا"},
{"imp_2fp", "اِطَّلِبْنَ"},
{"imp_2fs", "اِطَّلِبِي"},
{"imp_2mp", "اِطَّلِبُوا"},
{"imp_2ms", "اِطَّلِبْ"},
{"ind_1p", "نَطَّلِبُ"},
{"ind_1s", "أَطَّلِبُ"},
{"ind_2d", "تَطَّلِبَانِ"},
{"ind_2fp", "تَطَّلِبْنَ"},
{"ind_2fs", "تَطَّلِبِينَ"},
{"ind_2mp", "تَطَّلِبُونَ"},
{"ind_2ms", "تَطَّلِبُ"},
{"ind_3fd", "تَطَّلِبَانِ"},
{"ind_3fp", "يَطَّلِبْنَ"},
{"ind_3fs", "تَطَّلِبُ"},
{"ind_3md", "يَطَّلِبَانِ"},
{"ind_3mp", "يَطَّلِبُونَ"},
{"ind_3ms", "يَطَّلِبُ"},
{"past_1p", "اِطَّلَبْنَا"},
{"past_1s", "اِطَّلَبْتُ"},
{"past_2d", "اِطَّلَبْتُمَا"},
{"past_2fp", "اِطَّلَبْتُنَّ"},
{"past_2fs", "اِطَّلَبْتِ"},
{"past_2mp", "اِطَّلَبْتُمْ"},
{"past_2ms", "اِطَّلَبْتَ"},
{"past_3fd", "اِطَّلَبَتَا"},
{"past_3fp", "اِطَّلَبْنَ"},
{"past_3fs", "اِطَّلَبَتْ"},
{"past_3md", "اِطَّلَبَا"},
{"past_3mp", "اِطَّلَبُوا"},
{"past_3ms", "اِطَّلَبَ"},
},
},
{
label = "إِذَّكَرَ (p353)", root = "ذكر", wazn = "افتعل",
forms = {
{"imp_2d", "اِذَّكِرَا"},
{"imp_2fp", "اِذَّكِرْنَ"},
{"imp_2fs", "اِذَّكِرِي"},
{"imp_2mp", "اِذَّكِرُوا"},
{"imp_2ms", "اِذَّكِرْ"},
{"ind_1p", "نَذَّكِرُ"},
{"ind_1s", "أَذَّكِرُ"},
{"ind_2d", "تَذَّكِرَانِ"},
{"ind_2fp", "تَذَّكِرْنَ"},
{"ind_2fs", "تَذَّكِرِينَ"},
{"ind_2mp", "تَذَّكِرُونَ"},
{"ind_2ms", "تَذَّكِرُ"},
{"ind_3fd", "تَذَّكِرَانِ"},
{"ind_3fp", "يَذَّكِرْنَ"},
{"ind_3fs", "تَذَّكِرُ"},
{"ind_3md", "يَذَّكِرَانِ"},
{"ind_3mp", "يَذَّكِرُونَ"},
{"ind_3ms", "يَذَّكِرُ"},
{"past_1p", "اِذَّكَرْنَا"},
{"past_1s", "اِذَّكَرْتُ"},
{"past_2d", "اِذَّكَرْتُمَا"},
{"past_2fp", "اِذَّكَرْتُنَّ"},
{"past_2fs", "اِذَّكَرْتِ"},
{"past_2mp", "اِذَّكَرْتُمْ"},
{"past_2ms", "اِذَّكَرْتَ"},
{"past_3fd", "اِذَّكَرَتَا"},
{"past_3fp", "اِذَّكَرْنَ"},
{"past_3fs", "اِذَّكَرَتْ"},
{"past_3md", "اِذَّكَرَا"},
{"past_3mp", "اِذَّكَرُوا"},
{"past_3ms", "اِذَّكَرَ"},
},
},
{
label = "اِتَّحَدَ (p359)", root = "أحد", wazn = "افتعل",
reduced = true,
forms = {
{"imp_2d", "اِتَّحِدَا"},
{"imp_2fp", "اِتَّحِدْنَ"},
{"imp_2fs", "اِتَّحِدِي"},
{"imp_2mp", "اِتَّحِدُوا"},
{"imp_2ms", "اِتَّحِدْ"},
{"ind_1p", "نَتَّحِدُ"},
{"ind_1s", "أَتَّحِدُ"},
{"ind_2d", "تَتَّحِدَانِ"},
{"ind_2fp", "تَتَّحِدْنَ"},
{"ind_2fs", "تَتَّحِدِينَ"},
{"ind_2mp", "تَتَّحِدُونَ"},
{"ind_2ms", "تَتَّحِدُ"},
{"ind_3fd", "تَتَّحِدَانِ"},
{"ind_3fp", "يَتَّحِدْنَ"},
{"ind_3fs", "تَتَّحِدُ"},
{"ind_3md", "يَتَّحِدَانِ"},
{"ind_3mp", "يَتَّحِدُونَ"},
{"ind_3ms", "يَتَّحِدُ"},
{"past_1p", "اِتَّحَدْنَا"},
{"past_1s", "اِتَّحَدْتُ"},
{"past_2d", "اِتَّحَدْتُمَا"},
{"past_2fp", "اِتَّحَدْتُنَّ"},
{"past_2fs", "اِتَّحَدْتِ"},
{"past_2mp", "اِتَّحَدْتُمْ"},
{"past_2ms", "اِتَّحَدْتَ"},
{"past_3fd", "اِتَّحَدَتَا"},
{"past_3fp", "اِتَّحَدْنَ"},
{"past_3fs", "اِتَّحَدَتْ"},
{"past_3md", "اِتَّحَدَا"},
{"past_3mp", "اِتَّحَدُوا"},
{"past_3ms", "اِتَّحَدَ"},
},
},
{
label = "اِتَّزَرَ (p359)", root = "أزر", wazn = "افتعل",
reduced = true,
forms = {
{"imp_2d", "اِتَّزِرَا"},
{"imp_2fp", "اِتَّزِرْنَ"},
{"imp_2fs", "اِتَّزِرِي"},
{"imp_2mp", "اِتَّزِرُوا"},
{"imp_2ms", "اِتَّزِرْ"},
{"ind_1p", "نَتَّزِرُ"},
{"ind_1s", "أَتَّزِرُ"},
{"ind_2d", "تَتَّزِرَانِ"},
{"ind_2fp", "تَتَّزِرْنَ"},
{"ind_2fs", "تَتَّزِرِينَ"},
{"ind_2mp", "تَتَّزِرُونَ"},
{"ind_2ms", "تَتَّزِرُ"},
{"ind_3fd", "تَتَّزِرَانِ"},
{"ind_3fp", "يَتَّزِرْنَ"},
{"ind_3fs", "تَتَّزِرُ"},
{"ind_3md", "يَتَّزِرَانِ"},
{"ind_3mp", "يَتَّزِرُونَ"},
{"ind_3ms", "يَتَّزِرُ"},
{"past_1p", "اِتَّزَرْنَا"},
{"past_1s", "اِتَّزَرْتُ"},
{"past_2d", "اِتَّزَرْتُمَا"},
{"past_2fp", "اِتَّزَرْتُنَّ"},
{"past_2fs", "اِتَّزَرْتِ"},
{"past_2mp", "اِتَّزَرْتُمْ"},
{"past_2ms", "اِتَّزَرْتَ"},
{"past_3fd", "اِتَّزَرَتَا"},
{"past_3fp", "اِتَّزَرْنَ"},
{"past_3fs", "اِتَّزَرَتْ"},
{"past_3md", "اِتَّزَرَا"},
{"past_3mp", "اِتَّزَرُوا"},
{"past_3ms", "اِتَّزَرَ"},
},
},
{
label = "اِتَّأَمَ (p361)", root = "تأم", wazn = "افتعل",
forms = {
{"imp_2d", "اِتَّئِمَا"},
{"imp_2fp", "اِتَّئِمْنَ"},
{"imp_2fs", "اِتَّئِمِي"},
{"imp_2mp", "اِتَّئِمُوا"},
{"imp_2ms", "اِتَّئِمْ"},
{"ind_1p", "نَتَّئِمُ"},
{"ind_1s", "أَتَّئِمُ"},
{"ind_2d", "تَتَّئِمَانِ"},
{"ind_2fp", "تَتَّئِمْنَ"},
{"ind_2fs", "تَتَّئِمِينَ"},
{"ind_2mp", "تَتَّئِمُونَ"},
{"ind_2ms", "تَتَّئِمُ"},
{"ind_3fd", "تَتَّئِمَانِ"},
{"ind_3fp", "يَتَّئِمْنَ"},
{"ind_3fs", "تَتَّئِمُ"},
{"ind_3md", "يَتَّئِمَانِ"},
{"ind_3mp", "يَتَّئِمُونَ"},
{"ind_3ms", "يَتَّئِمُ"},
{"past_1p", "اِتَّأَمْنَا"},
{"past_1s", "اِتَّأَمْتُ"},
{"past_2d", "اِتَّأَمْتُمَا"},
{"past_2fp", "اِتَّأَمْتُنَّ"},
{"past_2fs", "اِتَّأَمْتِ"},
{"past_2mp", "اِتَّأَمْتُمْ"},
{"past_2ms", "اِتَّأَمْتَ"},
{"past_3fd", "اِتَّأَمَتَا"},
{"past_3fp", "اِتَّأَمْنَ"},
{"past_3fs", "اِتَّأَمَتْ"},
{"past_3md", "اِتَّأَمَا"},
{"past_3mp", "اِتَّأَمُوا"},
{"past_3ms", "اِتَّأَمَ"},
},
},
{
label = "اِتَّزَنَ (p363)", root = "وزن", wazn = "افتعل",
forms = {
{"imp_2d", "اِتَّزِنَا"},
{"imp_2fp", "اِتَّزِنَّ"},
{"imp_2fs", "اِتَّزِنِي"},
{"imp_2mp", "اِتَّزِنُوا"},
{"imp_2ms", "اِتَّزِنْ"},
{"ind_1p", "نَتَّزِنُ"},
{"ind_1s", "أَتَّزِنُ"},
{"ind_2d", "تَتَّزِنَانِ"},
{"ind_2fp", "تَتَّزِنَّ"},
{"ind_2fs", "تَتَّزِنِينَ"},
{"ind_2mp", "تَتَّزِنُونَ"},
{"ind_2ms", "تَتَّزِنُ"},
{"ind_3fd", "تَتَّزِنَانِ"},
{"ind_3fp", "يَتَّزِنَّ"},
{"ind_3fs", "تَتَّزِنُ"},
{"ind_3md", "يَتَّزِنَانِ"},
{"ind_3mp", "يَتَّزِنُونَ"},
{"ind_3ms", "يَتَّزِنُ"},
{"past_1p", "اِتَّزَنَّا"},
{"past_1s", "اِتَّزَنْتُ"},
{"past_2d", "اِتَّزَنْتُمَا"},
{"past_2fp", "اِتَّزَنْتُنَّ"},
{"past_2fs", "اِتَّزَنْتِ"},
{"past_2mp", "اِتَّزَنْتُمْ"},
{"past_2ms", "اِتَّزَنْتَ"},
{"past_3fd", "اِتَّزَنَتَا"},
{"past_3fp", "اِتَّزَنَّ"},
{"past_3fs", "اِتَّزَنَتْ"},
{"past_3md", "اِتَّزَنَا"},
{"past_3mp", "اِتَّزَنُوا"},
{"past_3ms", "اِتَّزَنَ"},
},
},
{
label = "اِتَّصَفَ (p363)", root = "وصف", wazn = "افتعل",
forms = {
{"imp_2d", "اِتَّصِفَا"},
{"imp_2fp", "اِتَّصِفْنَ"},
{"imp_2fs", "اِتَّصِفِي"},
{"imp_2mp", "اِتَّصِفُوا"},
{"imp_2ms", "اِتَّصِفْ"},
{"ind_1p", "نَتَّصِفُ"},
{"ind_1s", "أَتَّصِفُ"},
{"ind_2d", "تَتَّصِفَانِ"},
{"ind_2fp", "تَتَّصِفْنَ"},
{"ind_2fs", "تَتَّصِفِينَ"},
{"ind_2mp", "تَتَّصِفُونَ"},
{"ind_2ms", "تَتَّصِفُ"},
{"ind_3fd", "تَتَّصِفَانِ"},
{"ind_3fp", "يَتَّصِفْنَ"},
{"ind_3fs", "تَتَّصِفُ"},
{"ind_3md", "يَتَّصِفَانِ"},
{"ind_3mp", "يَتَّصِفُونَ"},
{"ind_3ms", "يَتَّصِفُ"},
{"past_1p", "اِتَّصَفْنَا"},
{"past_1s", "اِتَّصَفْتُ"},
{"past_2d", "اِتَّصَفْتُمَا"},
{"past_2fp", "اِتَّصَفْتُنَّ"},
{"past_2fs", "اِتَّصَفْتِ"},
{"past_2mp", "اِتَّصَفْتُمْ"},
{"past_2ms", "اِتَّصَفْتَ"},
{"past_3fd", "اِتَّصَفَتَا"},
{"past_3fp", "اِتَّصَفْنَ"},
{"past_3fs", "اِتَّصَفَتْ"},
{"past_3md", "اِتَّصَفَا"},
{"past_3mp", "اِتَّصَفُوا"},
{"past_3ms", "اِتَّصَفَ"},
},
},
{
label = "اِعْتَوَلَ (p364)", root = "عول", wazn = "افتعل",
forms = {
{"imp_2d", "اِعْتَوِلَا"},
{"imp_2fp", "اِعْتَوِلْنَ"},
{"imp_2fs", "اِعْتَوِلِي"},
{"imp_2mp", "اِعْتَوِلُوا"},
{"imp_2ms", "اِعْتَوِلْ"},
{"ind_1p", "نَعْتَوِلُ"},
{"ind_1s", "أَعْتَوِلُ"},
{"ind_2d", "تَعْتَوِلَانِ"},
{"ind_2fp", "تَعْتَوِلْنَ"},
{"ind_2fs", "تَعْتَوِلِينَ"},
{"ind_2mp", "تَعْتَوِلُونَ"},
{"ind_2ms", "تَعْتَوِلُ"},
{"ind_3fd", "تَعْتَوِلَانِ"},
{"ind_3fp", "يَعْتَوِلْنَ"},
{"ind_3fs", "تَعْتَوِلُ"},
{"ind_3md", "يَعْتَوِلَانِ"},
{"ind_3mp", "يَعْتَوِلُونَ"},
{"ind_3ms", "يَعْتَوِلُ"},
{"past_1p", "اِعْتَوَلْنَا"},
{"past_1s", "اِعْتَوَلْتُ"},
{"past_2d", "اِعْتَوَلْتُمَا"},
{"past_2fp", "اِعْتَوَلْتُنَّ"},
{"past_2fs", "اِعْتَوَلْتِ"},
{"past_2mp", "اِعْتَوَلْتُمْ"},
{"past_2ms", "اِعْتَوَلْتَ"},
{"past_3fd", "اِعْتَوَلَتَا"},
{"past_3fp", "اِعْتَوَلْنَ"},
{"past_3fs", "اِعْتَوَلَتْ"},
{"past_3md", "اِعْتَوَلَا"},
{"past_3mp", "اِعْتَوَلُوا"},
{"past_3ms", "اِعْتَوَلَ"},
},
},
{
label = "اِئْتَسَى (p368)", root = "أسي", wazn = "افتعل",
forms = {
{"imp_2d", "اِئْتَسِيَا"},
{"imp_2fp", "اِئْتَسِينَ"},
{"imp_2fs", "اِئْتَسِي"},
{"imp_2mp", "اِئْتَسُوا"},
{"imp_2ms", "اِئْتَسِ"},
{"ind_1p", "نَأْتَسِي"},
{"ind_1s", "أَأْتَسِي"},
{"ind_2d", "تَأْتَسِيَانِ"},
{"ind_2fp", "تَأْتَسِينَ"},
{"ind_2fs", "تَأْتَسِينَ"},
{"ind_2mp", "تَأْتَسُونَ"},
{"ind_2ms", "تَأْتَسِي"},
{"ind_3fd", "تَأْتَسِيَانِ"},
{"ind_3fp", "يَأْتَسِينَ"},
{"ind_3fs", "تَأْتَسِي"},
{"ind_3md", "يَأْتَسِيَانِ"},
{"ind_3mp", "يَأْتَسُونَ"},
{"ind_3ms", "يَأْتَسِي"},
{"past_1p", "اِئْتَسَيْنَا"},
{"past_1s", "اِئْتَسَيْتُ"},
{"past_2d", "اِئْتَسَيْتُمَا"},
{"past_2fp", "اِئْتَسَيْتُنَّ"},
{"past_2fs", "اِئْتَسَيْتِ"},
{"past_2mp", "اِئْتَسَيْتُمْ"},
{"past_2ms", "اِئْتَسَيْتَ"},
{"past_3fd", "اِئْتَسَتَا"},
{"past_3fp", "اِئْتَسَيْنَ"},
{"past_3fs", "اِئْتَسَتْ"},
{"past_3md", "اِئْتَسَيَا"},
{"past_3mp", "اِئْتَسَوْا"},
{"past_3ms", "اِئْتَسَى"},
},
},
{
label = "اِتَّقَى (p369)", root = "وقو", wazn = "افتعل",
forms = {
{"imp_2d", "اِتَّقِيَا"},
{"imp_2fp", "اِتَّقِينَ"},
{"imp_2fs", "اِتَّقِي"},
{"imp_2mp", "اِتَّقُوا"},
{"imp_2ms", "اِتَّقِ"},
{"ind_1p", "نَتَّقِي"},
{"ind_1s", "أَتَّقِي"},
{"ind_2d", "تَتَّقِيَانِ"},
{"ind_2fp", "تَتَّقِينَ"},
{"ind_2fs", "تَتَّقِينَ"},
{"ind_2mp", "تَتَّقُونَ"},
{"ind_2ms", "تَتَّقِي"},
{"ind_3fd", "تَتَّقِيَانِ"},
{"ind_3fp", "يَتَّقِينَ"},
{"ind_3fs", "تَتَّقِي"},
{"ind_3md", "يَتَّقِيَانِ"},
{"ind_3mp", "يَتَّقُونَ"},
{"ind_3ms", "يَتَّقِي"},
{"past_1p", "اِتَّقَيْنَا"},
{"past_1s", "اِتَّقَيْتُ"},
{"past_2d", "اِتَّقَيْتُمَا"},
{"past_2fp", "اِتَّقَيْتُنَّ"},
{"past_2fs", "اِتَّقَيْتِ"},
{"past_2mp", "اِتَّقَيْتُمْ"},
{"past_2ms", "اِتَّقَيْتَ"},
{"past_3fd", "اِتَّقَتَا"},
{"past_3fp", "اِتَّقَيْنَ"},
{"past_3fs", "اِتَّقَتْ"},
{"past_3md", "اِتَّقَيَا"},
{"past_3mp", "اِتَّقَوْا"},
{"past_3ms", "اِتَّقَى"},
},
},
{
label = "اِسْتَجْوَبَ (p385)", root = "جوب", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَجْوِبَا"},
{"imp_2fp", "اِسْتَجْوِبْنَ"},
{"imp_2fs", "اِسْتَجْوِبِي"},
{"imp_2mp", "اِسْتَجْوِبُوا"},
{"imp_2ms", "اِسْتَجْوِبْ"},
{"ind_1p", "نَسْتَجْوِبُ"},
{"ind_1s", "أَسْتَجْوِبُ"},
{"ind_2d", "تَسْتَجْوِبَانِ"},
{"ind_2fp", "تَسْتَجْوِبْنَ"},
{"ind_2fs", "تَسْتَجْوِبِينَ"},
{"ind_2mp", "تَسْتَجْوِبُونَ"},
{"ind_2ms", "تَسْتَجْوِبُ"},
{"ind_3fd", "تَسْتَجْوِبَانِ"},
{"ind_3fp", "يَسْتَجْوِبْنَ"},
{"ind_3fs", "تَسْتَجْوِبُ"},
{"ind_3md", "يَسْتَجْوِبَانِ"},
{"ind_3mp", "يَسْتَجْوِبُونَ"},
{"ind_3ms", "يَسْتَجْوِبُ"},
{"past_1p", "اِسْتَجْوَبْنَا"},
{"past_1s", "اِسْتَجْوَبْتُ"},
{"past_2d", "اِسْتَجْوَبْتُمَا"},
{"past_2fp", "اِسْتَجْوَبْتُنَّ"},
{"past_2fs", "اِسْتَجْوَبْتِ"},
{"past_2mp", "اِسْتَجْوَبْتُمْ"},
{"past_2ms", "اِسْتَجْوَبْتَ"},
{"past_3fd", "اِسْتَجْوَبَتَا"},
{"past_3fp", "اِسْتَجْوَبْنَ"},
{"past_3fs", "اِسْتَجْوَبَتْ"},
{"past_3md", "اِسْتَجْوَبَا"},
{"past_3mp", "اِسْتَجْوَبُوا"},
{"past_3ms", "اِسْتَجْوَبَ"},
},
},
{
label = "اِقْلَوَّدَ (p394)", root = "قلد", wazn = "افعوّل",
forms = {
{"imp_2d", "اِقْلَوِّدَا"},
{"imp_2fp", "اِقْلَوِّدْنَ"},
{"imp_2fs", "اِقْلَوِّدِي"},
{"imp_2mp", "اِقْلَوِّدُوا"},
{"imp_2ms", "اِقْلَوِّدْ"},
{"ind_1p", "نَقْلَوِّدُ"},
{"ind_1s", "أَقْلَوِّدُ"},
{"ind_2d", "تَقْلَوِّدَانِ"},
{"ind_2fp", "تَقْلَوِّدْنَ"},
{"ind_2fs", "تَقْلَوِّدِينَ"},
{"ind_2mp", "تَقْلَوِّدُونَ"},
{"ind_2ms", "تَقْلَوِّدُ"},
{"ind_3fd", "تَقْلَوِّدَانِ"},
{"ind_3fp", "يَقْلَوِّدْنَ"},
{"ind_3fs", "تَقْلَوِّدُ"},
{"ind_3md", "يَقْلَوِّدَانِ"},
{"ind_3mp", "يَقْلَوِّدُونَ"},
{"ind_3ms", "يَقْلَوِّدُ"},
{"past_1p", "اِقْلَوَّدْنَا"},
{"past_1s", "اِقْلَوَّدْتُ"},
{"past_2d", "اِقْلَوَّدْتُمَا"},
{"past_2fp", "اِقْلَوَّدْتُنَّ"},
{"past_2fs", "اِقْلَوَّدْتِ"},
{"past_2mp", "اِقْلَوَّدْتُمْ"},
{"past_2ms", "اِقْلَوَّدْتَ"},
{"past_3fd", "اِقْلَوَّدَتَا"},
{"past_3fp", "اِقْلَوَّدْنَ"},
{"past_3fs", "اِقْلَوَّدَتْ"},
{"past_3md", "اِقْلَوَّدَا"},
{"past_3mp", "اِقْلَوَّدُوا"},
{"past_3ms", "اِقْلَوَّدَ"},
},
},
{
label = "ايراقَّ (p397)", root = "ورق", wazn = "افعالّ",
forms = {
{"imp_2d", "اِيرَاقَّا"},
{"imp_2fp", "اِيرَاقِقْنَ"},
{"imp_2fs", "اِيرَاقِّي"},
{"imp_2mp", "اِيرَاقُّوا"},
{"imp_2ms", "اِيرَاقِقْ"},
{"ind_1p", "نَوْرَاقُّ"},
{"ind_1s", "أَوْرَاقُّ"},
{"ind_2d", "تَوْرَاقَّانِ"},
{"ind_2fp", "تَوْرَاقِقْنَ"},
{"ind_2fs", "تَوْرَاقِّينَ"},
{"ind_2mp", "تَوْرَاقُّونَ"},
{"ind_2ms", "تَوْرَاقُّ"},
{"ind_3fd", "تَوْرَاقَّانِ"},
{"ind_3fp", "يَوْرَاقِقْنَ"},
{"ind_3fs", "تَوْرَاقُّ"},
{"ind_3md", "يَوْرَاقَّانِ"},
{"ind_3mp", "يَوْرَاقُّونَ"},
{"ind_3ms", "يَوْرَاقُّ"},
{"past_1p", "اِيرَاقَقْنَا"},
{"past_1s", "اِيرَاقَقْتُ"},
{"past_2d", "اِيرَاقَقْتُمَا"},
{"past_2fp", "اِيرَاقَقْتُنَّ"},
{"past_2fs", "اِيرَاقَقْتِ"},
{"past_2mp", "اِيرَاقَقْتُمْ"},
{"past_2ms", "اِيرَاقَقْتَ"},
{"past_3fd", "اِيرَاقَّتَا"},
{"past_3fp", "اِيرَاقَقْنَ"},
{"past_3fs", "اِيرَاقَّتْ"},
{"past_3md", "اِيرَاقَّا"},
{"past_3mp", "اِيرَاقُّوا"},
{"past_3ms", "اِيرَاقَّ"},
},
},
{
label = "ايرادَّ (p397)", root = "ورد", wazn = "افعالّ",
forms = {
{"imp_2d", "اِيرَادَّا"},
{"imp_2fp", "اِيرَادِدْنَ"},
{"imp_2fs", "اِيرَادِّي"},
{"imp_2mp", "اِيرَادُّوا"},
{"imp_2ms", "اِيرَادِدْ"},
{"ind_1p", "نَوْرَادُّ"},
{"ind_1s", "أَوْرَادُّ"},
{"ind_2d", "تَوْرَادَّانِ"},
{"ind_2fp", "تَوْرَادِدْنَ"},
{"ind_2fs", "تَوْرَادِّينَ"},
{"ind_2mp", "تَوْرَادُّونَ"},
{"ind_2ms", "تَوْرَادُّ"},
{"ind_3fd", "تَوْرَادَّانِ"},
{"ind_3fp", "يَوْرَادِدْنَ"},
{"ind_3fs", "تَوْرَادُّ"},
{"ind_3md", "يَوْرَادَّانِ"},
{"ind_3mp", "يَوْرَادُّونَ"},
{"ind_3ms", "يَوْرَادُّ"},
{"past_1p", "اِيرَادَدْنَا"},
{"past_1s", "اِيرَادَدْتُ"},
{"past_2d", "اِيرَادَدْتُمَا"},
{"past_2fp", "اِيرَادَدْتُنَّ"},
{"past_2fs", "اِيرَادَدْتِ"},
{"past_2mp", "اِيرَادَدْتُمْ"},
{"past_2ms", "اِيرَادَدْتَ"},
{"past_3fd", "اِيرَادَّتَا"},
{"past_3fp", "اِيرَادَدْنَ"},
{"past_3fs", "اِيرَادَّتْ"},
{"past_3md", "اِيرَادَّا"},
{"past_3mp", "اِيرَادُّوا"},
{"past_3ms", "اِيرَادَّ"},
},
},
}
6qnp7x4716ughjux5tayj52smj3menz
1159053
1159040
2026-09-10T15:08:33Z
ForzaGreen
28665
تصحيح همزة الوصل في أربعة نماذج
1159053
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 14 من 15.
return {
{
label = "آدَبَ (p278)", root = "أدب", wazn = "فاعل",
forms = {
{"imp_2d", "آدِبَا"},
{"imp_2fp", "آدِبْنَ"},
{"imp_2fs", "آدِبِي"},
{"imp_2mp", "آدِبُوا"},
{"imp_2ms", "آدِبْ"},
{"ind_1p", "نُؤَادِبُ"},
{"ind_1s", "أُؤَادِبُ"},
{"ind_2d", "تُؤَادِبَانِ"},
{"ind_2fp", "تُؤَادِبْنَ"},
{"ind_2fs", "تُؤَادِبِينَ"},
{"ind_2mp", "تُؤَادِبُونَ"},
{"ind_2ms", "تُؤَادِبُ"},
{"ind_3fd", "تُؤَادِبَانِ"},
{"ind_3fp", "يُؤَادِبْنَ"},
{"ind_3fs", "تُؤَادِبُ"},
{"ind_3md", "يُؤَادِبَانِ"},
{"ind_3mp", "يُؤَادِبُونَ"},
{"ind_3ms", "يُؤَادِبُ"},
{"past_1p", "آدَبْنَا"},
{"past_1s", "آدَبْتُ"},
{"past_2d", "آدَبْتُمَا"},
{"past_2fp", "آدَبْتُنَّ"},
{"past_2fs", "آدَبْتِ"},
{"past_2mp", "آدَبْتُمْ"},
{"past_2ms", "آدَبْتَ"},
{"past_3fd", "آدَبَتَا"},
{"past_3fp", "آدَبْنَ"},
{"past_3fs", "آدَبَتْ"},
{"past_3md", "آدَبَا"},
{"past_3mp", "آدَبُوا"},
{"past_3ms", "آدَبَ"},
},
},
{
label = "سَاءَلَ (p279)", root = "سأل", wazn = "فاعل",
forms = {
{"imp_2d", "سَائِلَا"},
{"imp_2fp", "سَائِلْنَ"},
{"imp_2fs", "سَائِلِي"},
{"imp_2mp", "سَائِلُوا"},
{"imp_2ms", "سَائِلْ"},
{"ind_1p", "نُسَائِلُ"},
{"ind_1s", "أُسَائِلُ"},
{"ind_2d", "تُسَائِلَانِ"},
{"ind_2fp", "تُسَائِلْنَ"},
{"ind_2fs", "تُسَائِلِينَ"},
{"ind_2mp", "تُسَائِلُونَ"},
{"ind_2ms", "تُسَائِلُ"},
{"ind_3fd", "تُسَائِلَانِ"},
{"ind_3fp", "يُسَائِلْنَ"},
{"ind_3fs", "تُسَائِلُ"},
{"ind_3md", "يُسَائِلَانِ"},
{"ind_3mp", "يُسَائِلُونَ"},
{"ind_3ms", "يُسَائِلُ"},
{"past_1p", "سَاءَلْنَا"},
{"past_1s", "سَاءَلْتُ"},
{"past_2d", "سَاءَلْتُمَا"},
{"past_2fp", "سَاءَلْتُنَّ"},
{"past_2fs", "سَاءَلْتِ"},
{"past_2mp", "سَاءَلْتُمْ"},
{"past_2ms", "سَاءَلْتَ"},
{"past_3fd", "سَاءَلَتَا"},
{"past_3fp", "سَاءَلْنَ"},
{"past_3fs", "سَاءَلَتْ"},
{"past_3md", "سَاءَلَا"},
{"past_3mp", "سَاءَلُوا"},
{"past_3ms", "سَاءَلَ"},
},
},
{
label = "لَاءَمَ (p279)", root = "لءم", wazn = "فاعل",
forms = {
{"imp_2d", "لَائِمَا"},
{"imp_2fp", "لَائِمْنَ"},
{"imp_2fs", "لَائِمِي"},
{"imp_2mp", "لَائِمُوا"},
{"imp_2ms", "لَائِمْ"},
{"ind_1p", "نُلَائِمُ"},
{"ind_1s", "أُلَائِمُ"},
{"ind_2d", "تُلَائِمَانِ"},
{"ind_2fp", "تُلَائِمْنَ"},
{"ind_2fs", "تُلَائِمِينَ"},
{"ind_2mp", "تُلَائِمُونَ"},
{"ind_2ms", "تُلَائِمُ"},
{"ind_3fd", "تُلَائِمَانِ"},
{"ind_3fp", "يُلَائِمْنَ"},
{"ind_3fs", "تُلَائِمُ"},
{"ind_3md", "يُلَائِمَانِ"},
{"ind_3mp", "يُلَائِمُونَ"},
{"ind_3ms", "يُلَائِمُ"},
{"past_1p", "لَاءَمْنَا"},
{"past_1s", "لَاءَمْتُ"},
{"past_2d", "لَاءَمْتُمَا"},
{"past_2fp", "لَاءَمْتُنَّ"},
{"past_2fs", "لَاءَمْتِ"},
{"past_2mp", "لَاءَمْتُمْ"},
{"past_2ms", "لَاءَمْتَ"},
{"past_3fd", "لَاءَمَتَا"},
{"past_3fp", "لَاءَمْنَ"},
{"past_3fs", "لَاءَمَتْ"},
{"past_3md", "لَاءَمَا"},
{"past_3mp", "لَاءَمُوا"},
{"past_3ms", "لَاءَمَ"},
},
},
{
label = "آوَى (p288)", root = "أوي", wazn = "فاعل",
forms = {
{"imp_2d", "آوِيَا"},
{"imp_2fp", "آوِينَ"},
{"imp_2fs", "آوِي"},
{"imp_2mp", "آوُوا"},
{"imp_2ms", "آوِ"},
{"ind_1p", "نُؤَاوِي"},
{"ind_1s", "أُؤَاوِي"},
{"ind_2d", "تُؤَاوِيَانِ"},
{"ind_2fp", "تُؤَاوِينَ"},
{"ind_2fs", "تُؤَاوِينَ"},
{"ind_2mp", "تُؤَاوُونَ"},
{"ind_2ms", "تُؤَاوِي"},
{"ind_3fd", "تُؤَاوِيَانِ"},
{"ind_3fp", "يُؤَاوِينَ"},
{"ind_3fs", "تُؤَاوِي"},
{"ind_3md", "يُؤَاوِيَانِ"},
{"ind_3mp", "يُؤَاوُونَ"},
{"ind_3ms", "يُؤَاوِي"},
{"past_1p", "آوَيْنَا"},
{"past_1s", "آوَيْتُ"},
{"past_2d", "آوَيْتُمَا"},
{"past_2fp", "آوَيْتُنَّ"},
{"past_2fs", "آوَيْتِ"},
{"past_2mp", "آوَيْتُمْ"},
{"past_2ms", "آوَيْتَ"},
{"past_3fd", "آوَتَا"},
{"past_3fp", "آوَيْنَ"},
{"past_3fs", "آوَتْ"},
{"past_3md", "آوَيَا"},
{"past_3mp", "آوَوْا"},
{"past_3ms", "آوَى"},
},
},
{
label = "آجَرَ (p292)", root = "أجر", wazn = "أفعل",
forms = {
{"imp_2d", "آجِرَا"},
{"imp_2fp", "آجِرْنَ"},
{"imp_2fs", "آجِرِي"},
{"imp_2mp", "آجِرُوا"},
{"imp_2ms", "آجِرْ"},
{"ind_1p", "نُؤْجِرُ"},
{"ind_1s", "أُوجِرُ"},
{"ind_2d", "تُؤْجِرَانِ"},
{"ind_2fp", "تُؤْجِرْنَ"},
{"ind_2fs", "تُؤْجِرِينَ"},
{"ind_2mp", "تُؤْجِرُونَ"},
{"ind_2ms", "تُؤْجِرُ"},
{"ind_3fd", "تُؤْجِرَانِ"},
{"ind_3fp", "يُؤْجِرْنَ"},
{"ind_3fs", "تُؤْجِرُ"},
{"ind_3md", "يُؤْجِرَانِ"},
{"ind_3mp", "يُؤْجِرُونَ"},
{"ind_3ms", "يُؤْجِرُ"},
{"past_1p", "آجَرْنَا"},
{"past_1s", "آجَرْتُ"},
{"past_2d", "آجَرْتُمَا"},
{"past_2fp", "آجَرْتُنَّ"},
{"past_2fs", "آجَرْتِ"},
{"past_2mp", "آجَرْتُمْ"},
{"past_2ms", "آجَرْتَ"},
{"past_3fd", "آجَرَتَا"},
{"past_3fp", "آجَرْنَ"},
{"past_3fs", "آجَرَتْ"},
{"past_3md", "آجَرَا"},
{"past_3mp", "آجَرُوا"},
{"past_3ms", "آجَرَ"},
},
},
{
label = "آذَنَ (p292)", root = "أذن", wazn = "أفعل",
forms = {
{"imp_2d", "آذِنَا"},
{"imp_2fp", "آذِنَّ"},
{"imp_2fs", "آذِنِي"},
{"imp_2mp", "آذِنُوا"},
{"imp_2ms", "آذِنْ"},
{"ind_1p", "نُؤْذِنُ"},
{"ind_1s", "أُوذِنُ"},
{"ind_2d", "تُؤْذِنَانِ"},
{"ind_2fp", "تُؤْذِنَّ"},
{"ind_2fs", "تُؤْذِنِينَ"},
{"ind_2mp", "تُؤْذِنُونَ"},
{"ind_2ms", "تُؤْذِنُ"},
{"ind_3fd", "تُؤْذِنَانِ"},
{"ind_3fp", "يُؤْذِنَّ"},
{"ind_3fs", "تُؤْذِنُ"},
{"ind_3md", "يُؤْذِنَانِ"},
{"ind_3mp", "يُؤْذِنُونَ"},
{"ind_3ms", "يُؤْذِنُ"},
{"past_1p", "آذَنَّا"},
{"past_1s", "آذَنْتُ"},
{"past_2d", "آذَنْتُمَا"},
{"past_2fp", "آذَنْتُنَّ"},
{"past_2fs", "آذَنْتِ"},
{"past_2mp", "آذَنْتُمْ"},
{"past_2ms", "آذَنْتَ"},
{"past_3fd", "آذَنَتَا"},
{"past_3fp", "آذَنَّ"},
{"past_3fs", "آذَنَتْ"},
{"past_3md", "آذَنَا"},
{"past_3mp", "آذَنُوا"},
{"past_3ms", "آذَنَ"},
},
},
{
label = "أَثْوَبَ (p297)", root = "ثوب", wazn = "أفعل",
forms = {
{"imp_2d", "أَثْوِبَا"},
{"imp_2fp", "أَثْوِبْنَ"},
{"imp_2fs", "أَثْوِبِي"},
{"imp_2mp", "أَثْوِبُوا"},
{"imp_2ms", "أَثْوِبْ"},
{"ind_1p", "نُثْوِبُ"},
{"ind_1s", "أُثْوِبُ"},
{"ind_2d", "تُثْوِبَانِ"},
{"ind_2fp", "تُثْوِبْنَ"},
{"ind_2fs", "تُثْوِبِينَ"},
{"ind_2mp", "تُثْوِبُونَ"},
{"ind_2ms", "تُثْوِبُ"},
{"ind_3fd", "تُثْوِبَانِ"},
{"ind_3fp", "يُثْوِبْنَ"},
{"ind_3fs", "تُثْوِبُ"},
{"ind_3md", "يُثْوِبَانِ"},
{"ind_3mp", "يُثْوِبُونَ"},
{"ind_3ms", "يُثْوِبُ"},
{"past_1p", "أَثْوَبْنَا"},
{"past_1s", "أَثْوَبْتُ"},
{"past_2d", "أَثْوَبْتُمَا"},
{"past_2fp", "أَثْوَبْتُنَّ"},
{"past_2fs", "أَثْوَبْتِ"},
{"past_2mp", "أَثْوَبْتُمْ"},
{"past_2ms", "أَثْوَبْتَ"},
{"past_3fd", "أَثْوَبَتَا"},
{"past_3fp", "أَثْوَبْنَ"},
{"past_3fs", "أَثْوَبَتْ"},
{"past_3md", "أَثْوَبَا"},
{"past_3mp", "أَثْوَبُوا"},
{"past_3ms", "أَثْوَبَ"},
},
},
{
label = "تَعاثَثَ (p324)", root = "عثث", wazn = "تفاعل",
forms = {
{"imp_2d", "تَعَاثَثَا"},
{"imp_2fp", "تَعَاثَثْنَ"},
{"imp_2fs", "تَعَاثَثِي"},
{"imp_2mp", "تَعَاثَثُوا"},
{"imp_2ms", "تَعَاثَثْ"},
{"ind_1p", "نَتَعَاثَثُ"},
{"ind_1s", "أَتَعَاثَثُ"},
{"ind_2d", "تَتَعَاثَثَانِ"},
{"ind_2fp", "تَتَعَاثَثْنَ"},
{"ind_2fs", "تَتَعَاثَثِينَ"},
{"ind_2mp", "تَتَعَاثَثُونَ"},
{"ind_2ms", "تَتَعَاثَثُ"},
{"ind_3fd", "تَتَعَاثَثَانِ"},
{"ind_3fp", "يَتَعَاثَثْنَ"},
{"ind_3fs", "تَتَعَاثَثُ"},
{"ind_3md", "يَتَعَاثَثَانِ"},
{"ind_3mp", "يَتَعَاثَثُونَ"},
{"ind_3ms", "يَتَعَاثَثُ"},
{"past_1p", "تَعَاثَثْنَا"},
{"past_1s", "تَعَاثَثْتُ"},
{"past_2d", "تَعَاثَثْتُمَا"},
{"past_2fp", "تَعَاثَثْتُنَّ"},
{"past_2fs", "تَعَاثَثْتِ"},
{"past_2mp", "تَعَاثَثْتُمْ"},
{"past_2ms", "تَعَاثَثْتَ"},
{"past_3fd", "تَعَاثَثَتَا"},
{"past_3fp", "تَعَاثَثْنَ"},
{"past_3fs", "تَعَاثَثَتْ"},
{"past_3md", "تَعَاثَثَا"},
{"past_3mp", "تَعَاثَثُوا"},
{"past_3ms", "تَعَاثَثَ"},
},
},
{
label = "تَغاضَضَ (p324)", root = "غضض", wazn = "تفاعل",
forms = {
{"imp_2d", "تَغَاضَضَا"},
{"imp_2fp", "تَغَاضَضْنَ"},
{"imp_2fs", "تَغَاضَضِي"},
{"imp_2mp", "تَغَاضَضُوا"},
{"imp_2ms", "تَغَاضَضْ"},
{"ind_1p", "نَتَغَاضَضُ"},
{"ind_1s", "أَتَغَاضَضُ"},
{"ind_2d", "تَتَغَاضَضَانِ"},
{"ind_2fp", "تَتَغَاضَضْنَ"},
{"ind_2fs", "تَتَغَاضَضِينَ"},
{"ind_2mp", "تَتَغَاضَضُونَ"},
{"ind_2ms", "تَتَغَاضَضُ"},
{"ind_3fd", "تَتَغَاضَضَانِ"},
{"ind_3fp", "يَتَغَاضَضْنَ"},
{"ind_3fs", "تَتَغَاضَضُ"},
{"ind_3md", "يَتَغَاضَضَانِ"},
{"ind_3mp", "يَتَغَاضَضُونَ"},
{"ind_3ms", "يَتَغَاضَضُ"},
{"past_1p", "تَغَاضَضْنَا"},
{"past_1s", "تَغَاضَضْتُ"},
{"past_2d", "تَغَاضَضْتُمَا"},
{"past_2fp", "تَغَاضَضْتُنَّ"},
{"past_2fs", "تَغَاضَضْتِ"},
{"past_2mp", "تَغَاضَضْتُمْ"},
{"past_2ms", "تَغَاضَضْتَ"},
{"past_3fd", "تَغَاضَضَتَا"},
{"past_3fp", "تَغَاضَضْنَ"},
{"past_3fs", "تَغَاضَضَتْ"},
{"past_3md", "تَغَاضَضَا"},
{"past_3mp", "تَغَاضَضُوا"},
{"past_3ms", "تَغَاضَضَ"},
},
},
{
label = "تَآمَرَ (p325)", root = "أمر", wazn = "تفاعل",
forms = {
{"imp_2d", "تَآمَرَا"},
{"imp_2fp", "تَآمَرْنَ"},
{"imp_2fs", "تَآمَرِي"},
{"imp_2mp", "تَآمَرُوا"},
{"imp_2ms", "تَآمَرْ"},
{"ind_1p", "نَتَآمَرُ"},
{"ind_1s", "أَتَآمَرُ"},
{"ind_2d", "تَتَآمَرَانِ"},
{"ind_2fp", "تَتَآمَرْنَ"},
{"ind_2fs", "تَتَآمَرِينَ"},
{"ind_2mp", "تَتَآمَرُونَ"},
{"ind_2ms", "تَتَآمَرُ"},
{"ind_3fd", "تَتَآمَرَانِ"},
{"ind_3fp", "يَتَآمَرْنَ"},
{"ind_3fs", "تَتَآمَرُ"},
{"ind_3md", "يَتَآمَرَانِ"},
{"ind_3mp", "يَتَآمَرُونَ"},
{"ind_3ms", "يَتَآمَرُ"},
{"past_1p", "تَآمَرْنَا"},
{"past_1s", "تَآمَرْتُ"},
{"past_2d", "تَآمَرْتُمَا"},
{"past_2fp", "تَآمَرْتُنَّ"},
{"past_2fs", "تَآمَرْتِ"},
{"past_2mp", "تَآمَرْتُمْ"},
{"past_2ms", "تَآمَرْتَ"},
{"past_3fd", "تَآمَرَتَا"},
{"past_3fp", "تَآمَرْنَ"},
{"past_3fs", "تَآمَرَتْ"},
{"past_3md", "تَآمَرَا"},
{"past_3mp", "تَآمَرُوا"},
{"past_3ms", "تَآمَرَ"},
},
},
{
label = "تَآلَفَ (p325)", root = "ألف", wazn = "تفاعل",
forms = {
{"imp_2d", "تَآلَفَا"},
{"imp_2fp", "تَآلَفْنَ"},
{"imp_2fs", "تَآلَفِي"},
{"imp_2mp", "تَآلَفُوا"},
{"imp_2ms", "تَآلَفْ"},
{"ind_1p", "نَتَآلَفُ"},
{"ind_1s", "أَتَآلَفُ"},
{"ind_2d", "تَتَآلَفَانِ"},
{"ind_2fp", "تَتَآلَفْنَ"},
{"ind_2fs", "تَتَآلَفِينَ"},
{"ind_2mp", "تَتَآلَفُونَ"},
{"ind_2ms", "تَتَآلَفُ"},
{"ind_3fd", "تَتَآلَفَانِ"},
{"ind_3fp", "يَتَآلَفْنَ"},
{"ind_3fs", "تَتَآلَفُ"},
{"ind_3md", "يَتَآلَفَانِ"},
{"ind_3mp", "يَتَآلَفُونَ"},
{"ind_3ms", "يَتَآلَفُ"},
{"past_1p", "تَآلَفْنَا"},
{"past_1s", "تَآلَفْتُ"},
{"past_2d", "تَآلَفْتُمَا"},
{"past_2fp", "تَآلَفْتُنَّ"},
{"past_2fs", "تَآلَفْتِ"},
{"past_2mp", "تَآلَفْتُمْ"},
{"past_2ms", "تَآلَفْتَ"},
{"past_3fd", "تَآلَفَتَا"},
{"past_3fp", "تَآلَفْنَ"},
{"past_3fs", "تَآلَفَتْ"},
{"past_3md", "تَآلَفَا"},
{"past_3mp", "تَآلَفُوا"},
{"past_3ms", "تَآلَفَ"},
},
},
{
label = "تَباوَأَ (p331)", root = "بوأ", wazn = "تفاعل",
forms = {
{"imp_2d", "تَبَاوَآ"},
{"imp_2fp", "تَبَاوَأْنَ"},
{"imp_2fs", "تَبَاوَئِي"},
{"imp_2mp", "تَبَاوَؤُوا"},
{"imp_2ms", "تَبَاوَأْ"},
{"ind_1p", "نَتَبَاوَأُ"},
{"ind_1s", "أَتَبَاوَأُ"},
{"ind_2d", "تَتَبَاوَآنِ"},
{"ind_2fp", "تَتَبَاوَأْنَ"},
{"ind_2fs", "تَتَبَاوَئِينَ"},
{"ind_2mp", "تَتَبَاوَؤُونَ"},
{"ind_2ms", "تَتَبَاوَأُ"},
{"ind_3fd", "تَتَبَاوَآنِ"},
{"ind_3fp", "يَتَبَاوَأْنَ"},
{"ind_3fs", "تَتَبَاوَأُ"},
{"ind_3md", "يَتَبَاوَآنِ"},
{"ind_3mp", "يَتَبَاوَؤُونَ"},
{"ind_3ms", "يَتَبَاوَأُ"},
{"past_1p", "تَبَاوَأْنَا"},
{"past_1s", "تَبَاوَأْتُ"},
{"past_2d", "تَبَاوَأْتُمَا"},
{"past_2fp", "تَبَاوَأْتُنَّ"},
{"past_2fs", "تَبَاوَأْتِ"},
{"past_2mp", "تَبَاوَأْتُمْ"},
{"past_2ms", "تَبَاوَأْتَ"},
{"past_3fd", "تَبَاوَأَتَا"},
{"past_3fp", "تَبَاوَأْنَ"},
{"past_3fs", "تَبَاوَأَتْ"},
{"past_3md", "تَبَاوَآ"},
{"past_3mp", "تَبَاوَؤُوا"},
{"past_3ms", "تَبَاوَأَ"},
},
},
{
label = "اِمَّدَحَ (p339)", root = "مدح", wazn = "انفعل",
reduced = true,
forms = {
{"imp_2d", "اِمَّدِحَا"},
{"imp_2fp", "اِمَّدِحْنَ"},
{"imp_2fs", "اِمَّدِحِي"},
{"imp_2mp", "اِمَّدِحُوا"},
{"imp_2ms", "اِمَّدِحْ"},
{"ind_1p", "نَمَّدِحُ"},
{"ind_1s", "أَمَّدِحُ"},
{"ind_2d", "تَمَّدِحَانِ"},
{"ind_2fp", "تَمَّدِحْنَ"},
{"ind_2fs", "تَمَّدِحِينَ"},
{"ind_2mp", "تَمَّدِحُونَ"},
{"ind_2ms", "تَمَّدِحُ"},
{"ind_3fd", "تَمَّدِحَانِ"},
{"ind_3fp", "يَمَّدِحْنَ"},
{"ind_3fs", "تَمَّدِحُ"},
{"ind_3md", "يَمَّدِحَانِ"},
{"ind_3mp", "يَمَّدِحُونَ"},
{"ind_3ms", "يَمَّدِحُ"},
{"past_1p", "اِمَّدَحْنَا"},
{"past_1s", "اِمَّدَحْتُ"},
{"past_2d", "اِمَّدَحْتُمَا"},
{"past_2fp", "اِمَّدَحْتُنَّ"},
{"past_2fs", "اِمَّدَحْتِ"},
{"past_2mp", "اِمَّدَحْتُمْ"},
{"past_2ms", "اِمَّدَحْتَ"},
{"past_3fd", "اِمَّدَحَتَا"},
{"past_3fp", "اِمَّدَحْنَ"},
{"past_3fs", "اِمَّدَحَتْ"},
{"past_3md", "اِمَّدَحَا"},
{"past_3mp", "اِمَّدَحُوا"},
{"past_3ms", "اِمَّدَحَ"},
},
},
{
label = "اِنَّمَسَ (p339)", root = "نمس", wazn = "انفعل",
forms = {
{"imp_2d", "اِنَّمِسَا"},
{"imp_2fp", "اِنَّمِسْنَ"},
{"imp_2fs", "اِنَّمِسِي"},
{"imp_2mp", "اِنَّمِسُوا"},
{"imp_2ms", "اِنَّمِسْ"},
{"ind_1p", "نَنَّمِسُ"},
{"ind_1s", "أَنَّمِسُ"},
{"ind_2d", "تَنَّمِسَانِ"},
{"ind_2fp", "تَنَّمِسْنَ"},
{"ind_2fs", "تَنَّمِسِينَ"},
{"ind_2mp", "تَنَّمِسُونَ"},
{"ind_2ms", "تَنَّمِسُ"},
{"ind_3fd", "تَنَّمِسَانِ"},
{"ind_3fp", "يَنَّمِسْنَ"},
{"ind_3fs", "تَنَّمِسُ"},
{"ind_3md", "يَنَّمِسَانِ"},
{"ind_3mp", "يَنَّمِسُونَ"},
{"ind_3ms", "يَنَّمِسُ"},
{"past_1p", "اِنَّمَسْنَا"},
{"past_1s", "اِنَّمَسْتُ"},
{"past_2d", "اِنَّمَسْتُمَا"},
{"past_2fp", "اِنَّمَسْتُنَّ"},
{"past_2fs", "اِنَّمَسْتِ"},
{"past_2mp", "اِنَّمَسْتُمْ"},
{"past_2ms", "اِنَّمَسْتَ"},
{"past_3fd", "اِنَّمَسَتَا"},
{"past_3fp", "اِنَّمَسْنَ"},
{"past_3fs", "اِنَّمَسَتْ"},
{"past_3md", "اِنَّمَسَا"},
{"past_3mp", "اِنَّمَسُوا"},
{"past_3ms", "اِنَّمَسَ"},
},
},
{
label = "اِنْسَيَأَ (p345)", root = "سيأ", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْسَيِئَا"},
{"imp_2fp", "اِنْسَيِئْنَ"},
{"imp_2fs", "اِنْسَيِئِي"},
{"imp_2mp", "اِنْسَيِئُوا"},
{"imp_2ms", "اِنْسَيِئْ"},
{"ind_1p", "نَنْسَيِئُ"},
{"ind_1s", "أَنْسَيِئُ"},
{"ind_2d", "تَنْسَيِئَانِ"},
{"ind_2fp", "تَنْسَيِئْنَ"},
{"ind_2fs", "تَنْسَيِئِينَ"},
{"ind_2mp", "تَنْسَيِئُونَ"},
{"ind_2ms", "تَنْسَيِئُ"},
{"ind_3fd", "تَنْسَيِئَانِ"},
{"ind_3fp", "يَنْسَيِئْنَ"},
{"ind_3fs", "تَنْسَيِئُ"},
{"ind_3md", "يَنْسَيِئَانِ"},
{"ind_3mp", "يَنْسَيِئُونَ"},
{"ind_3ms", "يَنْسَيِئُ"},
{"past_1p", "اِنْسَيَأْنَا"},
{"past_1s", "اِنْسَيَأْتُ"},
{"past_2d", "اِنْسَيَأْتُمَا"},
{"past_2fp", "اِنْسَيَأْتُنَّ"},
{"past_2fs", "اِنْسَيَأْتِ"},
{"past_2mp", "اِنْسَيَأْتُمْ"},
{"past_2ms", "اِنْسَيَأْتَ"},
{"past_3fd", "اِنْسَيَأَتَا"},
{"past_3fp", "اِنْسَيَأْنَ"},
{"past_3fs", "اِنْسَيَأَتْ"},
{"past_3md", "اِنْسَيَآ"},
{"past_3mp", "اِنْسَيَؤُوا"},
{"past_3ms", "اِنْسَيَأَ"},
},
},
{
label = "اِدَّعَمَ (p352)", root = "دعم", wazn = "افتعل",
forms = {
{"imp_2d", "اِدَّعِمَا"},
{"imp_2fp", "اِدَّعِمْنَ"},
{"imp_2fs", "اِدَّعِمِي"},
{"imp_2mp", "اِدَّعِمُوا"},
{"imp_2ms", "اِدَّعِمْ"},
{"ind_1p", "نَدَّعِمُ"},
{"ind_1s", "أَدَّعِمُ"},
{"ind_2d", "تَدَّعِمَانِ"},
{"ind_2fp", "تَدَّعِمْنَ"},
{"ind_2fs", "تَدَّعِمِينَ"},
{"ind_2mp", "تَدَّعِمُونَ"},
{"ind_2ms", "تَدَّعِمُ"},
{"ind_3fd", "تَدَّعِمَانِ"},
{"ind_3fp", "يَدَّعِمْنَ"},
{"ind_3fs", "تَدَّعِمُ"},
{"ind_3md", "يَدَّعِمَانِ"},
{"ind_3mp", "يَدَّعِمُونَ"},
{"ind_3ms", "يَدَّعِمُ"},
{"past_1p", "اِدَّعَمْنَا"},
{"past_1s", "اِدَّعَمْتُ"},
{"past_2d", "اِدَّعَمْتُمَا"},
{"past_2fp", "اِدَّعَمْتُنَّ"},
{"past_2fs", "اِدَّعَمْتِ"},
{"past_2mp", "اِدَّعَمْتُمْ"},
{"past_2ms", "اِدَّعَمْتَ"},
{"past_3fd", "اِدَّعَمَتَا"},
{"past_3fp", "اِدَّعَمْنَ"},
{"past_3fs", "اِدَّعَمَتْ"},
{"past_3md", "اِدَّعَمَا"},
{"past_3mp", "اِدَّعَمُوا"},
{"past_3ms", "اِدَّعَمَ"},
},
},
{
label = "اِطَّلَبَ (p352)", root = "طلب", wazn = "افتعل",
forms = {
{"imp_2d", "اِطَّلِبَا"},
{"imp_2fp", "اِطَّلِبْنَ"},
{"imp_2fs", "اِطَّلِبِي"},
{"imp_2mp", "اِطَّلِبُوا"},
{"imp_2ms", "اِطَّلِبْ"},
{"ind_1p", "نَطَّلِبُ"},
{"ind_1s", "أَطَّلِبُ"},
{"ind_2d", "تَطَّلِبَانِ"},
{"ind_2fp", "تَطَّلِبْنَ"},
{"ind_2fs", "تَطَّلِبِينَ"},
{"ind_2mp", "تَطَّلِبُونَ"},
{"ind_2ms", "تَطَّلِبُ"},
{"ind_3fd", "تَطَّلِبَانِ"},
{"ind_3fp", "يَطَّلِبْنَ"},
{"ind_3fs", "تَطَّلِبُ"},
{"ind_3md", "يَطَّلِبَانِ"},
{"ind_3mp", "يَطَّلِبُونَ"},
{"ind_3ms", "يَطَّلِبُ"},
{"past_1p", "اِطَّلَبْنَا"},
{"past_1s", "اِطَّلَبْتُ"},
{"past_2d", "اِطَّلَبْتُمَا"},
{"past_2fp", "اِطَّلَبْتُنَّ"},
{"past_2fs", "اِطَّلَبْتِ"},
{"past_2mp", "اِطَّلَبْتُمْ"},
{"past_2ms", "اِطَّلَبْتَ"},
{"past_3fd", "اِطَّلَبَتَا"},
{"past_3fp", "اِطَّلَبْنَ"},
{"past_3fs", "اِطَّلَبَتْ"},
{"past_3md", "اِطَّلَبَا"},
{"past_3mp", "اِطَّلَبُوا"},
{"past_3ms", "اِطَّلَبَ"},
},
},
{
label = "اِذَّكَرَ (p353)", root = "ذكر", wazn = "افتعل",
forms = {
{"imp_2d", "اِذَّكِرَا"},
{"imp_2fp", "اِذَّكِرْنَ"},
{"imp_2fs", "اِذَّكِرِي"},
{"imp_2mp", "اِذَّكِرُوا"},
{"imp_2ms", "اِذَّكِرْ"},
{"ind_1p", "نَذَّكِرُ"},
{"ind_1s", "أَذَّكِرُ"},
{"ind_2d", "تَذَّكِرَانِ"},
{"ind_2fp", "تَذَّكِرْنَ"},
{"ind_2fs", "تَذَّكِرِينَ"},
{"ind_2mp", "تَذَّكِرُونَ"},
{"ind_2ms", "تَذَّكِرُ"},
{"ind_3fd", "تَذَّكِرَانِ"},
{"ind_3fp", "يَذَّكِرْنَ"},
{"ind_3fs", "تَذَّكِرُ"},
{"ind_3md", "يَذَّكِرَانِ"},
{"ind_3mp", "يَذَّكِرُونَ"},
{"ind_3ms", "يَذَّكِرُ"},
{"past_1p", "اِذَّكَرْنَا"},
{"past_1s", "اِذَّكَرْتُ"},
{"past_2d", "اِذَّكَرْتُمَا"},
{"past_2fp", "اِذَّكَرْتُنَّ"},
{"past_2fs", "اِذَّكَرْتِ"},
{"past_2mp", "اِذَّكَرْتُمْ"},
{"past_2ms", "اِذَّكَرْتَ"},
{"past_3fd", "اِذَّكَرَتَا"},
{"past_3fp", "اِذَّكَرْنَ"},
{"past_3fs", "اِذَّكَرَتْ"},
{"past_3md", "اِذَّكَرَا"},
{"past_3mp", "اِذَّكَرُوا"},
{"past_3ms", "اِذَّكَرَ"},
},
},
{
label = "اِتَّحَدَ (p359)", root = "أحد", wazn = "افتعل",
reduced = true,
forms = {
{"imp_2d", "اِتَّحِدَا"},
{"imp_2fp", "اِتَّحِدْنَ"},
{"imp_2fs", "اِتَّحِدِي"},
{"imp_2mp", "اِتَّحِدُوا"},
{"imp_2ms", "اِتَّحِدْ"},
{"ind_1p", "نَتَّحِدُ"},
{"ind_1s", "أَتَّحِدُ"},
{"ind_2d", "تَتَّحِدَانِ"},
{"ind_2fp", "تَتَّحِدْنَ"},
{"ind_2fs", "تَتَّحِدِينَ"},
{"ind_2mp", "تَتَّحِدُونَ"},
{"ind_2ms", "تَتَّحِدُ"},
{"ind_3fd", "تَتَّحِدَانِ"},
{"ind_3fp", "يَتَّحِدْنَ"},
{"ind_3fs", "تَتَّحِدُ"},
{"ind_3md", "يَتَّحِدَانِ"},
{"ind_3mp", "يَتَّحِدُونَ"},
{"ind_3ms", "يَتَّحِدُ"},
{"past_1p", "اِتَّحَدْنَا"},
{"past_1s", "اِتَّحَدْتُ"},
{"past_2d", "اِتَّحَدْتُمَا"},
{"past_2fp", "اِتَّحَدْتُنَّ"},
{"past_2fs", "اِتَّحَدْتِ"},
{"past_2mp", "اِتَّحَدْتُمْ"},
{"past_2ms", "اِتَّحَدْتَ"},
{"past_3fd", "اِتَّحَدَتَا"},
{"past_3fp", "اِتَّحَدْنَ"},
{"past_3fs", "اِتَّحَدَتْ"},
{"past_3md", "اِتَّحَدَا"},
{"past_3mp", "اِتَّحَدُوا"},
{"past_3ms", "اِتَّحَدَ"},
},
},
{
label = "اِتَّزَرَ (p359)", root = "أزر", wazn = "افتعل",
reduced = true,
forms = {
{"imp_2d", "اِتَّزِرَا"},
{"imp_2fp", "اِتَّزِرْنَ"},
{"imp_2fs", "اِتَّزِرِي"},
{"imp_2mp", "اِتَّزِرُوا"},
{"imp_2ms", "اِتَّزِرْ"},
{"ind_1p", "نَتَّزِرُ"},
{"ind_1s", "أَتَّزِرُ"},
{"ind_2d", "تَتَّزِرَانِ"},
{"ind_2fp", "تَتَّزِرْنَ"},
{"ind_2fs", "تَتَّزِرِينَ"},
{"ind_2mp", "تَتَّزِرُونَ"},
{"ind_2ms", "تَتَّزِرُ"},
{"ind_3fd", "تَتَّزِرَانِ"},
{"ind_3fp", "يَتَّزِرْنَ"},
{"ind_3fs", "تَتَّزِرُ"},
{"ind_3md", "يَتَّزِرَانِ"},
{"ind_3mp", "يَتَّزِرُونَ"},
{"ind_3ms", "يَتَّزِرُ"},
{"past_1p", "اِتَّزَرْنَا"},
{"past_1s", "اِتَّزَرْتُ"},
{"past_2d", "اِتَّزَرْتُمَا"},
{"past_2fp", "اِتَّزَرْتُنَّ"},
{"past_2fs", "اِتَّزَرْتِ"},
{"past_2mp", "اِتَّزَرْتُمْ"},
{"past_2ms", "اِتَّزَرْتَ"},
{"past_3fd", "اِتَّزَرَتَا"},
{"past_3fp", "اِتَّزَرْنَ"},
{"past_3fs", "اِتَّزَرَتْ"},
{"past_3md", "اِتَّزَرَا"},
{"past_3mp", "اِتَّزَرُوا"},
{"past_3ms", "اِتَّزَرَ"},
},
},
{
label = "اِتَّأَمَ (p361)", root = "تأم", wazn = "افتعل",
forms = {
{"imp_2d", "اِتَّئِمَا"},
{"imp_2fp", "اِتَّئِمْنَ"},
{"imp_2fs", "اِتَّئِمِي"},
{"imp_2mp", "اِتَّئِمُوا"},
{"imp_2ms", "اِتَّئِمْ"},
{"ind_1p", "نَتَّئِمُ"},
{"ind_1s", "أَتَّئِمُ"},
{"ind_2d", "تَتَّئِمَانِ"},
{"ind_2fp", "تَتَّئِمْنَ"},
{"ind_2fs", "تَتَّئِمِينَ"},
{"ind_2mp", "تَتَّئِمُونَ"},
{"ind_2ms", "تَتَّئِمُ"},
{"ind_3fd", "تَتَّئِمَانِ"},
{"ind_3fp", "يَتَّئِمْنَ"},
{"ind_3fs", "تَتَّئِمُ"},
{"ind_3md", "يَتَّئِمَانِ"},
{"ind_3mp", "يَتَّئِمُونَ"},
{"ind_3ms", "يَتَّئِمُ"},
{"past_1p", "اِتَّأَمْنَا"},
{"past_1s", "اِتَّأَمْتُ"},
{"past_2d", "اِتَّأَمْتُمَا"},
{"past_2fp", "اِتَّأَمْتُنَّ"},
{"past_2fs", "اِتَّأَمْتِ"},
{"past_2mp", "اِتَّأَمْتُمْ"},
{"past_2ms", "اِتَّأَمْتَ"},
{"past_3fd", "اِتَّأَمَتَا"},
{"past_3fp", "اِتَّأَمْنَ"},
{"past_3fs", "اِتَّأَمَتْ"},
{"past_3md", "اِتَّأَمَا"},
{"past_3mp", "اِتَّأَمُوا"},
{"past_3ms", "اِتَّأَمَ"},
},
},
{
label = "اِتَّزَنَ (p363)", root = "وزن", wazn = "افتعل",
forms = {
{"imp_2d", "اِتَّزِنَا"},
{"imp_2fp", "اِتَّزِنَّ"},
{"imp_2fs", "اِتَّزِنِي"},
{"imp_2mp", "اِتَّزِنُوا"},
{"imp_2ms", "اِتَّزِنْ"},
{"ind_1p", "نَتَّزِنُ"},
{"ind_1s", "أَتَّزِنُ"},
{"ind_2d", "تَتَّزِنَانِ"},
{"ind_2fp", "تَتَّزِنَّ"},
{"ind_2fs", "تَتَّزِنِينَ"},
{"ind_2mp", "تَتَّزِنُونَ"},
{"ind_2ms", "تَتَّزِنُ"},
{"ind_3fd", "تَتَّزِنَانِ"},
{"ind_3fp", "يَتَّزِنَّ"},
{"ind_3fs", "تَتَّزِنُ"},
{"ind_3md", "يَتَّزِنَانِ"},
{"ind_3mp", "يَتَّزِنُونَ"},
{"ind_3ms", "يَتَّزِنُ"},
{"past_1p", "اِتَّزَنَّا"},
{"past_1s", "اِتَّزَنْتُ"},
{"past_2d", "اِتَّزَنْتُمَا"},
{"past_2fp", "اِتَّزَنْتُنَّ"},
{"past_2fs", "اِتَّزَنْتِ"},
{"past_2mp", "اِتَّزَنْتُمْ"},
{"past_2ms", "اِتَّزَنْتَ"},
{"past_3fd", "اِتَّزَنَتَا"},
{"past_3fp", "اِتَّزَنَّ"},
{"past_3fs", "اِتَّزَنَتْ"},
{"past_3md", "اِتَّزَنَا"},
{"past_3mp", "اِتَّزَنُوا"},
{"past_3ms", "اِتَّزَنَ"},
},
},
{
label = "اِتَّصَفَ (p363)", root = "وصف", wazn = "افتعل",
forms = {
{"imp_2d", "اِتَّصِفَا"},
{"imp_2fp", "اِتَّصِفْنَ"},
{"imp_2fs", "اِتَّصِفِي"},
{"imp_2mp", "اِتَّصِفُوا"},
{"imp_2ms", "اِتَّصِفْ"},
{"ind_1p", "نَتَّصِفُ"},
{"ind_1s", "أَتَّصِفُ"},
{"ind_2d", "تَتَّصِفَانِ"},
{"ind_2fp", "تَتَّصِفْنَ"},
{"ind_2fs", "تَتَّصِفِينَ"},
{"ind_2mp", "تَتَّصِفُونَ"},
{"ind_2ms", "تَتَّصِفُ"},
{"ind_3fd", "تَتَّصِفَانِ"},
{"ind_3fp", "يَتَّصِفْنَ"},
{"ind_3fs", "تَتَّصِفُ"},
{"ind_3md", "يَتَّصِفَانِ"},
{"ind_3mp", "يَتَّصِفُونَ"},
{"ind_3ms", "يَتَّصِفُ"},
{"past_1p", "اِتَّصَفْنَا"},
{"past_1s", "اِتَّصَفْتُ"},
{"past_2d", "اِتَّصَفْتُمَا"},
{"past_2fp", "اِتَّصَفْتُنَّ"},
{"past_2fs", "اِتَّصَفْتِ"},
{"past_2mp", "اِتَّصَفْتُمْ"},
{"past_2ms", "اِتَّصَفْتَ"},
{"past_3fd", "اِتَّصَفَتَا"},
{"past_3fp", "اِتَّصَفْنَ"},
{"past_3fs", "اِتَّصَفَتْ"},
{"past_3md", "اِتَّصَفَا"},
{"past_3mp", "اِتَّصَفُوا"},
{"past_3ms", "اِتَّصَفَ"},
},
},
{
label = "اِعْتَوَلَ (p364)", root = "عول", wazn = "افتعل",
forms = {
{"imp_2d", "اِعْتَوِلَا"},
{"imp_2fp", "اِعْتَوِلْنَ"},
{"imp_2fs", "اِعْتَوِلِي"},
{"imp_2mp", "اِعْتَوِلُوا"},
{"imp_2ms", "اِعْتَوِلْ"},
{"ind_1p", "نَعْتَوِلُ"},
{"ind_1s", "أَعْتَوِلُ"},
{"ind_2d", "تَعْتَوِلَانِ"},
{"ind_2fp", "تَعْتَوِلْنَ"},
{"ind_2fs", "تَعْتَوِلِينَ"},
{"ind_2mp", "تَعْتَوِلُونَ"},
{"ind_2ms", "تَعْتَوِلُ"},
{"ind_3fd", "تَعْتَوِلَانِ"},
{"ind_3fp", "يَعْتَوِلْنَ"},
{"ind_3fs", "تَعْتَوِلُ"},
{"ind_3md", "يَعْتَوِلَانِ"},
{"ind_3mp", "يَعْتَوِلُونَ"},
{"ind_3ms", "يَعْتَوِلُ"},
{"past_1p", "اِعْتَوَلْنَا"},
{"past_1s", "اِعْتَوَلْتُ"},
{"past_2d", "اِعْتَوَلْتُمَا"},
{"past_2fp", "اِعْتَوَلْتُنَّ"},
{"past_2fs", "اِعْتَوَلْتِ"},
{"past_2mp", "اِعْتَوَلْتُمْ"},
{"past_2ms", "اِعْتَوَلْتَ"},
{"past_3fd", "اِعْتَوَلَتَا"},
{"past_3fp", "اِعْتَوَلْنَ"},
{"past_3fs", "اِعْتَوَلَتْ"},
{"past_3md", "اِعْتَوَلَا"},
{"past_3mp", "اِعْتَوَلُوا"},
{"past_3ms", "اِعْتَوَلَ"},
},
},
{
label = "اِئْتَسَى (p368)", root = "أسي", wazn = "افتعل",
forms = {
{"imp_2d", "اِئْتَسِيَا"},
{"imp_2fp", "اِئْتَسِينَ"},
{"imp_2fs", "اِئْتَسِي"},
{"imp_2mp", "اِئْتَسُوا"},
{"imp_2ms", "اِئْتَسِ"},
{"ind_1p", "نَأْتَسِي"},
{"ind_1s", "أَأْتَسِي"},
{"ind_2d", "تَأْتَسِيَانِ"},
{"ind_2fp", "تَأْتَسِينَ"},
{"ind_2fs", "تَأْتَسِينَ"},
{"ind_2mp", "تَأْتَسُونَ"},
{"ind_2ms", "تَأْتَسِي"},
{"ind_3fd", "تَأْتَسِيَانِ"},
{"ind_3fp", "يَأْتَسِينَ"},
{"ind_3fs", "تَأْتَسِي"},
{"ind_3md", "يَأْتَسِيَانِ"},
{"ind_3mp", "يَأْتَسُونَ"},
{"ind_3ms", "يَأْتَسِي"},
{"past_1p", "اِئْتَسَيْنَا"},
{"past_1s", "اِئْتَسَيْتُ"},
{"past_2d", "اِئْتَسَيْتُمَا"},
{"past_2fp", "اِئْتَسَيْتُنَّ"},
{"past_2fs", "اِئْتَسَيْتِ"},
{"past_2mp", "اِئْتَسَيْتُمْ"},
{"past_2ms", "اِئْتَسَيْتَ"},
{"past_3fd", "اِئْتَسَتَا"},
{"past_3fp", "اِئْتَسَيْنَ"},
{"past_3fs", "اِئْتَسَتْ"},
{"past_3md", "اِئْتَسَيَا"},
{"past_3mp", "اِئْتَسَوْا"},
{"past_3ms", "اِئْتَسَى"},
},
},
{
label = "اِتَّقَى (p369)", root = "وقو", wazn = "افتعل",
forms = {
{"imp_2d", "اِتَّقِيَا"},
{"imp_2fp", "اِتَّقِينَ"},
{"imp_2fs", "اِتَّقِي"},
{"imp_2mp", "اِتَّقُوا"},
{"imp_2ms", "اِتَّقِ"},
{"ind_1p", "نَتَّقِي"},
{"ind_1s", "أَتَّقِي"},
{"ind_2d", "تَتَّقِيَانِ"},
{"ind_2fp", "تَتَّقِينَ"},
{"ind_2fs", "تَتَّقِينَ"},
{"ind_2mp", "تَتَّقُونَ"},
{"ind_2ms", "تَتَّقِي"},
{"ind_3fd", "تَتَّقِيَانِ"},
{"ind_3fp", "يَتَّقِينَ"},
{"ind_3fs", "تَتَّقِي"},
{"ind_3md", "يَتَّقِيَانِ"},
{"ind_3mp", "يَتَّقُونَ"},
{"ind_3ms", "يَتَّقِي"},
{"past_1p", "اِتَّقَيْنَا"},
{"past_1s", "اِتَّقَيْتُ"},
{"past_2d", "اِتَّقَيْتُمَا"},
{"past_2fp", "اِتَّقَيْتُنَّ"},
{"past_2fs", "اِتَّقَيْتِ"},
{"past_2mp", "اِتَّقَيْتُمْ"},
{"past_2ms", "اِتَّقَيْتَ"},
{"past_3fd", "اِتَّقَتَا"},
{"past_3fp", "اِتَّقَيْنَ"},
{"past_3fs", "اِتَّقَتْ"},
{"past_3md", "اِتَّقَيَا"},
{"past_3mp", "اِتَّقَوْا"},
{"past_3ms", "اِتَّقَى"},
},
},
{
label = "اِسْتَجْوَبَ (p385)", root = "جوب", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَجْوِبَا"},
{"imp_2fp", "اِسْتَجْوِبْنَ"},
{"imp_2fs", "اِسْتَجْوِبِي"},
{"imp_2mp", "اِسْتَجْوِبُوا"},
{"imp_2ms", "اِسْتَجْوِبْ"},
{"ind_1p", "نَسْتَجْوِبُ"},
{"ind_1s", "أَسْتَجْوِبُ"},
{"ind_2d", "تَسْتَجْوِبَانِ"},
{"ind_2fp", "تَسْتَجْوِبْنَ"},
{"ind_2fs", "تَسْتَجْوِبِينَ"},
{"ind_2mp", "تَسْتَجْوِبُونَ"},
{"ind_2ms", "تَسْتَجْوِبُ"},
{"ind_3fd", "تَسْتَجْوِبَانِ"},
{"ind_3fp", "يَسْتَجْوِبْنَ"},
{"ind_3fs", "تَسْتَجْوِبُ"},
{"ind_3md", "يَسْتَجْوِبَانِ"},
{"ind_3mp", "يَسْتَجْوِبُونَ"},
{"ind_3ms", "يَسْتَجْوِبُ"},
{"past_1p", "اِسْتَجْوَبْنَا"},
{"past_1s", "اِسْتَجْوَبْتُ"},
{"past_2d", "اِسْتَجْوَبْتُمَا"},
{"past_2fp", "اِسْتَجْوَبْتُنَّ"},
{"past_2fs", "اِسْتَجْوَبْتِ"},
{"past_2mp", "اِسْتَجْوَبْتُمْ"},
{"past_2ms", "اِسْتَجْوَبْتَ"},
{"past_3fd", "اِسْتَجْوَبَتَا"},
{"past_3fp", "اِسْتَجْوَبْنَ"},
{"past_3fs", "اِسْتَجْوَبَتْ"},
{"past_3md", "اِسْتَجْوَبَا"},
{"past_3mp", "اِسْتَجْوَبُوا"},
{"past_3ms", "اِسْتَجْوَبَ"},
},
},
{
label = "اِقْلَوَّدَ (p394)", root = "قلد", wazn = "افعوّل",
forms = {
{"imp_2d", "اِقْلَوِّدَا"},
{"imp_2fp", "اِقْلَوِّدْنَ"},
{"imp_2fs", "اِقْلَوِّدِي"},
{"imp_2mp", "اِقْلَوِّدُوا"},
{"imp_2ms", "اِقْلَوِّدْ"},
{"ind_1p", "نَقْلَوِّدُ"},
{"ind_1s", "أَقْلَوِّدُ"},
{"ind_2d", "تَقْلَوِّدَانِ"},
{"ind_2fp", "تَقْلَوِّدْنَ"},
{"ind_2fs", "تَقْلَوِّدِينَ"},
{"ind_2mp", "تَقْلَوِّدُونَ"},
{"ind_2ms", "تَقْلَوِّدُ"},
{"ind_3fd", "تَقْلَوِّدَانِ"},
{"ind_3fp", "يَقْلَوِّدْنَ"},
{"ind_3fs", "تَقْلَوِّدُ"},
{"ind_3md", "يَقْلَوِّدَانِ"},
{"ind_3mp", "يَقْلَوِّدُونَ"},
{"ind_3ms", "يَقْلَوِّدُ"},
{"past_1p", "اِقْلَوَّدْنَا"},
{"past_1s", "اِقْلَوَّدْتُ"},
{"past_2d", "اِقْلَوَّدْتُمَا"},
{"past_2fp", "اِقْلَوَّدْتُنَّ"},
{"past_2fs", "اِقْلَوَّدْتِ"},
{"past_2mp", "اِقْلَوَّدْتُمْ"},
{"past_2ms", "اِقْلَوَّدْتَ"},
{"past_3fd", "اِقْلَوَّدَتَا"},
{"past_3fp", "اِقْلَوَّدْنَ"},
{"past_3fs", "اِقْلَوَّدَتْ"},
{"past_3md", "اِقْلَوَّدَا"},
{"past_3mp", "اِقْلَوَّدُوا"},
{"past_3ms", "اِقْلَوَّدَ"},
},
},
{
label = "اِيراقَّ (p397)", root = "ورق", wazn = "افعالّ",
forms = {
{"imp_2d", "اِيرَاقَّا"},
{"imp_2fp", "اِيرَاقِقْنَ"},
{"imp_2fs", "اِيرَاقِّي"},
{"imp_2mp", "اِيرَاقُّوا"},
{"imp_2ms", "اِيرَاقِقْ"},
{"ind_1p", "نَوْرَاقُّ"},
{"ind_1s", "أَوْرَاقُّ"},
{"ind_2d", "تَوْرَاقَّانِ"},
{"ind_2fp", "تَوْرَاقِقْنَ"},
{"ind_2fs", "تَوْرَاقِّينَ"},
{"ind_2mp", "تَوْرَاقُّونَ"},
{"ind_2ms", "تَوْرَاقُّ"},
{"ind_3fd", "تَوْرَاقَّانِ"},
{"ind_3fp", "يَوْرَاقِقْنَ"},
{"ind_3fs", "تَوْرَاقُّ"},
{"ind_3md", "يَوْرَاقَّانِ"},
{"ind_3mp", "يَوْرَاقُّونَ"},
{"ind_3ms", "يَوْرَاقُّ"},
{"past_1p", "اِيرَاقَقْنَا"},
{"past_1s", "اِيرَاقَقْتُ"},
{"past_2d", "اِيرَاقَقْتُمَا"},
{"past_2fp", "اِيرَاقَقْتُنَّ"},
{"past_2fs", "اِيرَاقَقْتِ"},
{"past_2mp", "اِيرَاقَقْتُمْ"},
{"past_2ms", "اِيرَاقَقْتَ"},
{"past_3fd", "اِيرَاقَّتَا"},
{"past_3fp", "اِيرَاقَقْنَ"},
{"past_3fs", "اِيرَاقَّتْ"},
{"past_3md", "اِيرَاقَّا"},
{"past_3mp", "اِيرَاقُّوا"},
{"past_3ms", "اِيرَاقَّ"},
},
},
{
label = "اِيرادَّ (p397)", root = "ورد", wazn = "افعالّ",
forms = {
{"imp_2d", "اِيرَادَّا"},
{"imp_2fp", "اِيرَادِدْنَ"},
{"imp_2fs", "اِيرَادِّي"},
{"imp_2mp", "اِيرَادُّوا"},
{"imp_2ms", "اِيرَادِدْ"},
{"ind_1p", "نَوْرَادُّ"},
{"ind_1s", "أَوْرَادُّ"},
{"ind_2d", "تَوْرَادَّانِ"},
{"ind_2fp", "تَوْرَادِدْنَ"},
{"ind_2fs", "تَوْرَادِّينَ"},
{"ind_2mp", "تَوْرَادُّونَ"},
{"ind_2ms", "تَوْرَادُّ"},
{"ind_3fd", "تَوْرَادَّانِ"},
{"ind_3fp", "يَوْرَادِدْنَ"},
{"ind_3fs", "تَوْرَادُّ"},
{"ind_3md", "يَوْرَادَّانِ"},
{"ind_3mp", "يَوْرَادُّونَ"},
{"ind_3ms", "يَوْرَادُّ"},
{"past_1p", "اِيرَادَدْنَا"},
{"past_1s", "اِيرَادَدْتُ"},
{"past_2d", "اِيرَادَدْتُمَا"},
{"past_2fp", "اِيرَادَدْتُنَّ"},
{"past_2fs", "اِيرَادَدْتِ"},
{"past_2mp", "اِيرَادَدْتُمْ"},
{"past_2ms", "اِيرَادَدْتَ"},
{"past_3fd", "اِيرَادَّتَا"},
{"past_3fp", "اِيرَادَدْنَ"},
{"past_3fs", "اِيرَادَّتْ"},
{"past_3md", "اِيرَادَّا"},
{"past_3mp", "اِيرَادُّوا"},
{"past_3ms", "اِيرَادَّ"},
},
},
}
pwh2kgn60095tvtojao8dt2z65h8igc
1159098
1159053
2026-09-10T19:34:30Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159098
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 14 من 16.
return {
{
label = "آدَبَ (p278)", root = "أدب", wazn = "فاعل",
forms = {
{"imp_2d", "آدِبَا"},
{"imp_2fp", "آدِبْنَ"},
{"imp_2fs", "آدِبِي"},
{"imp_2mp", "آدِبُوا"},
{"imp_2ms", "آدِبْ"},
{"ind_1p", "نُؤَادِبُ"},
{"ind_1s", "أُؤَادِبُ"},
{"ind_2d", "تُؤَادِبَانِ"},
{"ind_2fp", "تُؤَادِبْنَ"},
{"ind_2fs", "تُؤَادِبِينَ"},
{"ind_2mp", "تُؤَادِبُونَ"},
{"ind_2ms", "تُؤَادِبُ"},
{"ind_3fd", "تُؤَادِبَانِ"},
{"ind_3fp", "يُؤَادِبْنَ"},
{"ind_3fs", "تُؤَادِبُ"},
{"ind_3md", "يُؤَادِبَانِ"},
{"ind_3mp", "يُؤَادِبُونَ"},
{"ind_3ms", "يُؤَادِبُ"},
{"past_1p", "آدَبْنَا"},
{"past_1s", "آدَبْتُ"},
{"past_2d", "آدَبْتُمَا"},
{"past_2fp", "آدَبْتُنَّ"},
{"past_2fs", "آدَبْتِ"},
{"past_2mp", "آدَبْتُمْ"},
{"past_2ms", "آدَبْتَ"},
{"past_3fd", "آدَبَتَا"},
{"past_3fp", "آدَبْنَ"},
{"past_3fs", "آدَبَتْ"},
{"past_3md", "آدَبَا"},
{"past_3mp", "آدَبُوا"},
{"past_3ms", "آدَبَ"},
},
},
{
label = "سَاءَلَ (p279)", root = "سأل", wazn = "فاعل",
forms = {
{"imp_2d", "سَائِلَا"},
{"imp_2fp", "سَائِلْنَ"},
{"imp_2fs", "سَائِلِي"},
{"imp_2mp", "سَائِلُوا"},
{"imp_2ms", "سَائِلْ"},
{"ind_1p", "نُسَائِلُ"},
{"ind_1s", "أُسَائِلُ"},
{"ind_2d", "تُسَائِلَانِ"},
{"ind_2fp", "تُسَائِلْنَ"},
{"ind_2fs", "تُسَائِلِينَ"},
{"ind_2mp", "تُسَائِلُونَ"},
{"ind_2ms", "تُسَائِلُ"},
{"ind_3fd", "تُسَائِلَانِ"},
{"ind_3fp", "يُسَائِلْنَ"},
{"ind_3fs", "تُسَائِلُ"},
{"ind_3md", "يُسَائِلَانِ"},
{"ind_3mp", "يُسَائِلُونَ"},
{"ind_3ms", "يُسَائِلُ"},
{"past_1p", "سَاءَلْنَا"},
{"past_1s", "سَاءَلْتُ"},
{"past_2d", "سَاءَلْتُمَا"},
{"past_2fp", "سَاءَلْتُنَّ"},
{"past_2fs", "سَاءَلْتِ"},
{"past_2mp", "سَاءَلْتُمْ"},
{"past_2ms", "سَاءَلْتَ"},
{"past_3fd", "سَاءَلَتَا"},
{"past_3fp", "سَاءَلْنَ"},
{"past_3fs", "سَاءَلَتْ"},
{"past_3md", "سَاءَلَا"},
{"past_3mp", "سَاءَلُوا"},
{"past_3ms", "سَاءَلَ"},
},
},
{
label = "لَاءَمَ (p279)", root = "لءم", wazn = "فاعل",
forms = {
{"imp_2d", "لَائِمَا"},
{"imp_2fp", "لَائِمْنَ"},
{"imp_2fs", "لَائِمِي"},
{"imp_2mp", "لَائِمُوا"},
{"imp_2ms", "لَائِمْ"},
{"ind_1p", "نُلَائِمُ"},
{"ind_1s", "أُلَائِمُ"},
{"ind_2d", "تُلَائِمَانِ"},
{"ind_2fp", "تُلَائِمْنَ"},
{"ind_2fs", "تُلَائِمِينَ"},
{"ind_2mp", "تُلَائِمُونَ"},
{"ind_2ms", "تُلَائِمُ"},
{"ind_3fd", "تُلَائِمَانِ"},
{"ind_3fp", "يُلَائِمْنَ"},
{"ind_3fs", "تُلَائِمُ"},
{"ind_3md", "يُلَائِمَانِ"},
{"ind_3mp", "يُلَائِمُونَ"},
{"ind_3ms", "يُلَائِمُ"},
{"past_1p", "لَاءَمْنَا"},
{"past_1s", "لَاءَمْتُ"},
{"past_2d", "لَاءَمْتُمَا"},
{"past_2fp", "لَاءَمْتُنَّ"},
{"past_2fs", "لَاءَمْتِ"},
{"past_2mp", "لَاءَمْتُمْ"},
{"past_2ms", "لَاءَمْتَ"},
{"past_3fd", "لَاءَمَتَا"},
{"past_3fp", "لَاءَمْنَ"},
{"past_3fs", "لَاءَمَتْ"},
{"past_3md", "لَاءَمَا"},
{"past_3mp", "لَاءَمُوا"},
{"past_3ms", "لَاءَمَ"},
},
},
{
label = "آوَى (p288)", root = "أوي", wazn = "فاعل",
forms = {
{"imp_2d", "آوِيَا"},
{"imp_2fp", "آوِينَ"},
{"imp_2fs", "آوِي"},
{"imp_2mp", "آوُوا"},
{"imp_2ms", "آوِ"},
{"ind_1p", "نُؤَاوِي"},
{"ind_1s", "أُؤَاوِي"},
{"ind_2d", "تُؤَاوِيَانِ"},
{"ind_2fp", "تُؤَاوِينَ"},
{"ind_2fs", "تُؤَاوِينَ"},
{"ind_2mp", "تُؤَاوُونَ"},
{"ind_2ms", "تُؤَاوِي"},
{"ind_3fd", "تُؤَاوِيَانِ"},
{"ind_3fp", "يُؤَاوِينَ"},
{"ind_3fs", "تُؤَاوِي"},
{"ind_3md", "يُؤَاوِيَانِ"},
{"ind_3mp", "يُؤَاوُونَ"},
{"ind_3ms", "يُؤَاوِي"},
{"past_1p", "آوَيْنَا"},
{"past_1s", "آوَيْتُ"},
{"past_2d", "آوَيْتُمَا"},
{"past_2fp", "آوَيْتُنَّ"},
{"past_2fs", "آوَيْتِ"},
{"past_2mp", "آوَيْتُمْ"},
{"past_2ms", "آوَيْتَ"},
{"past_3fd", "آوَتَا"},
{"past_3fp", "آوَيْنَ"},
{"past_3fs", "آوَتْ"},
{"past_3md", "آوَيَا"},
{"past_3mp", "آوَوْا"},
{"past_3ms", "آوَى"},
},
},
{
label = "آجَرَ (p292)", root = "أجر", wazn = "أفعل",
forms = {
{"imp_2d", "آجِرَا"},
{"imp_2fp", "آجِرْنَ"},
{"imp_2fs", "آجِرِي"},
{"imp_2mp", "آجِرُوا"},
{"imp_2ms", "آجِرْ"},
{"ind_1p", "نُؤْجِرُ"},
{"ind_1s", "أُوجِرُ"},
{"ind_2d", "تُؤْجِرَانِ"},
{"ind_2fp", "تُؤْجِرْنَ"},
{"ind_2fs", "تُؤْجِرِينَ"},
{"ind_2mp", "تُؤْجِرُونَ"},
{"ind_2ms", "تُؤْجِرُ"},
{"ind_3fd", "تُؤْجِرَانِ"},
{"ind_3fp", "يُؤْجِرْنَ"},
{"ind_3fs", "تُؤْجِرُ"},
{"ind_3md", "يُؤْجِرَانِ"},
{"ind_3mp", "يُؤْجِرُونَ"},
{"ind_3ms", "يُؤْجِرُ"},
{"past_1p", "آجَرْنَا"},
{"past_1s", "آجَرْتُ"},
{"past_2d", "آجَرْتُمَا"},
{"past_2fp", "آجَرْتُنَّ"},
{"past_2fs", "آجَرْتِ"},
{"past_2mp", "آجَرْتُمْ"},
{"past_2ms", "آجَرْتَ"},
{"past_3fd", "آجَرَتَا"},
{"past_3fp", "آجَرْنَ"},
{"past_3fs", "آجَرَتْ"},
{"past_3md", "آجَرَا"},
{"past_3mp", "آجَرُوا"},
{"past_3ms", "آجَرَ"},
},
},
{
label = "آذَنَ (p292)", root = "أذن", wazn = "أفعل",
forms = {
{"imp_2d", "آذِنَا"},
{"imp_2fp", "آذِنَّ"},
{"imp_2fs", "آذِنِي"},
{"imp_2mp", "آذِنُوا"},
{"imp_2ms", "آذِنْ"},
{"ind_1p", "نُؤْذِنُ"},
{"ind_1s", "أُوذِنُ"},
{"ind_2d", "تُؤْذِنَانِ"},
{"ind_2fp", "تُؤْذِنَّ"},
{"ind_2fs", "تُؤْذِنِينَ"},
{"ind_2mp", "تُؤْذِنُونَ"},
{"ind_2ms", "تُؤْذِنُ"},
{"ind_3fd", "تُؤْذِنَانِ"},
{"ind_3fp", "يُؤْذِنَّ"},
{"ind_3fs", "تُؤْذِنُ"},
{"ind_3md", "يُؤْذِنَانِ"},
{"ind_3mp", "يُؤْذِنُونَ"},
{"ind_3ms", "يُؤْذِنُ"},
{"past_1p", "آذَنَّا"},
{"past_1s", "آذَنْتُ"},
{"past_2d", "آذَنْتُمَا"},
{"past_2fp", "آذَنْتُنَّ"},
{"past_2fs", "آذَنْتِ"},
{"past_2mp", "آذَنْتُمْ"},
{"past_2ms", "آذَنْتَ"},
{"past_3fd", "آذَنَتَا"},
{"past_3fp", "آذَنَّ"},
{"past_3fs", "آذَنَتْ"},
{"past_3md", "آذَنَا"},
{"past_3mp", "آذَنُوا"},
{"past_3ms", "آذَنَ"},
},
},
{
label = "أَثْوَبَ (p297)", root = "ثوب", wazn = "أفعل",
forms = {
{"imp_2d", "أَثْوِبَا"},
{"imp_2fp", "أَثْوِبْنَ"},
{"imp_2fs", "أَثْوِبِي"},
{"imp_2mp", "أَثْوِبُوا"},
{"imp_2ms", "أَثْوِبْ"},
{"ind_1p", "نُثْوِبُ"},
{"ind_1s", "أُثْوِبُ"},
{"ind_2d", "تُثْوِبَانِ"},
{"ind_2fp", "تُثْوِبْنَ"},
{"ind_2fs", "تُثْوِبِينَ"},
{"ind_2mp", "تُثْوِبُونَ"},
{"ind_2ms", "تُثْوِبُ"},
{"ind_3fd", "تُثْوِبَانِ"},
{"ind_3fp", "يُثْوِبْنَ"},
{"ind_3fs", "تُثْوِبُ"},
{"ind_3md", "يُثْوِبَانِ"},
{"ind_3mp", "يُثْوِبُونَ"},
{"ind_3ms", "يُثْوِبُ"},
{"past_1p", "أَثْوَبْنَا"},
{"past_1s", "أَثْوَبْتُ"},
{"past_2d", "أَثْوَبْتُمَا"},
{"past_2fp", "أَثْوَبْتُنَّ"},
{"past_2fs", "أَثْوَبْتِ"},
{"past_2mp", "أَثْوَبْتُمْ"},
{"past_2ms", "أَثْوَبْتَ"},
{"past_3fd", "أَثْوَبَتَا"},
{"past_3fp", "أَثْوَبْنَ"},
{"past_3fs", "أَثْوَبَتْ"},
{"past_3md", "أَثْوَبَا"},
{"past_3mp", "أَثْوَبُوا"},
{"past_3ms", "أَثْوَبَ"},
},
},
{
label = "تَعاثَثَ (p324)", root = "عثث", wazn = "تفاعل",
forms = {
{"imp_2d", "تَعَاثَثَا"},
{"imp_2fp", "تَعَاثَثْنَ"},
{"imp_2fs", "تَعَاثَثِي"},
{"imp_2mp", "تَعَاثَثُوا"},
{"imp_2ms", "تَعَاثَثْ"},
{"ind_1p", "نَتَعَاثَثُ"},
{"ind_1s", "أَتَعَاثَثُ"},
{"ind_2d", "تَتَعَاثَثَانِ"},
{"ind_2fp", "تَتَعَاثَثْنَ"},
{"ind_2fs", "تَتَعَاثَثِينَ"},
{"ind_2mp", "تَتَعَاثَثُونَ"},
{"ind_2ms", "تَتَعَاثَثُ"},
{"ind_3fd", "تَتَعَاثَثَانِ"},
{"ind_3fp", "يَتَعَاثَثْنَ"},
{"ind_3fs", "تَتَعَاثَثُ"},
{"ind_3md", "يَتَعَاثَثَانِ"},
{"ind_3mp", "يَتَعَاثَثُونَ"},
{"ind_3ms", "يَتَعَاثَثُ"},
{"past_1p", "تَعَاثَثْنَا"},
{"past_1s", "تَعَاثَثْتُ"},
{"past_2d", "تَعَاثَثْتُمَا"},
{"past_2fp", "تَعَاثَثْتُنَّ"},
{"past_2fs", "تَعَاثَثْتِ"},
{"past_2mp", "تَعَاثَثْتُمْ"},
{"past_2ms", "تَعَاثَثْتَ"},
{"past_3fd", "تَعَاثَثَتَا"},
{"past_3fp", "تَعَاثَثْنَ"},
{"past_3fs", "تَعَاثَثَتْ"},
{"past_3md", "تَعَاثَثَا"},
{"past_3mp", "تَعَاثَثُوا"},
{"past_3ms", "تَعَاثَثَ"},
},
},
{
label = "تَغاضَضَ (p324)", root = "غضض", wazn = "تفاعل",
forms = {
{"imp_2d", "تَغَاضَضَا"},
{"imp_2fp", "تَغَاضَضْنَ"},
{"imp_2fs", "تَغَاضَضِي"},
{"imp_2mp", "تَغَاضَضُوا"},
{"imp_2ms", "تَغَاضَضْ"},
{"ind_1p", "نَتَغَاضَضُ"},
{"ind_1s", "أَتَغَاضَضُ"},
{"ind_2d", "تَتَغَاضَضَانِ"},
{"ind_2fp", "تَتَغَاضَضْنَ"},
{"ind_2fs", "تَتَغَاضَضِينَ"},
{"ind_2mp", "تَتَغَاضَضُونَ"},
{"ind_2ms", "تَتَغَاضَضُ"},
{"ind_3fd", "تَتَغَاضَضَانِ"},
{"ind_3fp", "يَتَغَاضَضْنَ"},
{"ind_3fs", "تَتَغَاضَضُ"},
{"ind_3md", "يَتَغَاضَضَانِ"},
{"ind_3mp", "يَتَغَاضَضُونَ"},
{"ind_3ms", "يَتَغَاضَضُ"},
{"past_1p", "تَغَاضَضْنَا"},
{"past_1s", "تَغَاضَضْتُ"},
{"past_2d", "تَغَاضَضْتُمَا"},
{"past_2fp", "تَغَاضَضْتُنَّ"},
{"past_2fs", "تَغَاضَضْتِ"},
{"past_2mp", "تَغَاضَضْتُمْ"},
{"past_2ms", "تَغَاضَضْتَ"},
{"past_3fd", "تَغَاضَضَتَا"},
{"past_3fp", "تَغَاضَضْنَ"},
{"past_3fs", "تَغَاضَضَتْ"},
{"past_3md", "تَغَاضَضَا"},
{"past_3mp", "تَغَاضَضُوا"},
{"past_3ms", "تَغَاضَضَ"},
},
},
{
label = "تَآمَرَ (p325)", root = "أمر", wazn = "تفاعل",
forms = {
{"imp_2d", "تَآمَرَا"},
{"imp_2fp", "تَآمَرْنَ"},
{"imp_2fs", "تَآمَرِي"},
{"imp_2mp", "تَآمَرُوا"},
{"imp_2ms", "تَآمَرْ"},
{"ind_1p", "نَتَآمَرُ"},
{"ind_1s", "أَتَآمَرُ"},
{"ind_2d", "تَتَآمَرَانِ"},
{"ind_2fp", "تَتَآمَرْنَ"},
{"ind_2fs", "تَتَآمَرِينَ"},
{"ind_2mp", "تَتَآمَرُونَ"},
{"ind_2ms", "تَتَآمَرُ"},
{"ind_3fd", "تَتَآمَرَانِ"},
{"ind_3fp", "يَتَآمَرْنَ"},
{"ind_3fs", "تَتَآمَرُ"},
{"ind_3md", "يَتَآمَرَانِ"},
{"ind_3mp", "يَتَآمَرُونَ"},
{"ind_3ms", "يَتَآمَرُ"},
{"past_1p", "تَآمَرْنَا"},
{"past_1s", "تَآمَرْتُ"},
{"past_2d", "تَآمَرْتُمَا"},
{"past_2fp", "تَآمَرْتُنَّ"},
{"past_2fs", "تَآمَرْتِ"},
{"past_2mp", "تَآمَرْتُمْ"},
{"past_2ms", "تَآمَرْتَ"},
{"past_3fd", "تَآمَرَتَا"},
{"past_3fp", "تَآمَرْنَ"},
{"past_3fs", "تَآمَرَتْ"},
{"past_3md", "تَآمَرَا"},
{"past_3mp", "تَآمَرُوا"},
{"past_3ms", "تَآمَرَ"},
},
},
{
label = "تَآلَفَ (p325)", root = "ألف", wazn = "تفاعل",
forms = {
{"imp_2d", "تَآلَفَا"},
{"imp_2fp", "تَآلَفْنَ"},
{"imp_2fs", "تَآلَفِي"},
{"imp_2mp", "تَآلَفُوا"},
{"imp_2ms", "تَآلَفْ"},
{"ind_1p", "نَتَآلَفُ"},
{"ind_1s", "أَتَآلَفُ"},
{"ind_2d", "تَتَآلَفَانِ"},
{"ind_2fp", "تَتَآلَفْنَ"},
{"ind_2fs", "تَتَآلَفِينَ"},
{"ind_2mp", "تَتَآلَفُونَ"},
{"ind_2ms", "تَتَآلَفُ"},
{"ind_3fd", "تَتَآلَفَانِ"},
{"ind_3fp", "يَتَآلَفْنَ"},
{"ind_3fs", "تَتَآلَفُ"},
{"ind_3md", "يَتَآلَفَانِ"},
{"ind_3mp", "يَتَآلَفُونَ"},
{"ind_3ms", "يَتَآلَفُ"},
{"past_1p", "تَآلَفْنَا"},
{"past_1s", "تَآلَفْتُ"},
{"past_2d", "تَآلَفْتُمَا"},
{"past_2fp", "تَآلَفْتُنَّ"},
{"past_2fs", "تَآلَفْتِ"},
{"past_2mp", "تَآلَفْتُمْ"},
{"past_2ms", "تَآلَفْتَ"},
{"past_3fd", "تَآلَفَتَا"},
{"past_3fp", "تَآلَفْنَ"},
{"past_3fs", "تَآلَفَتْ"},
{"past_3md", "تَآلَفَا"},
{"past_3mp", "تَآلَفُوا"},
{"past_3ms", "تَآلَفَ"},
},
},
{
label = "تَباوَأَ (p331)", root = "بوأ", wazn = "تفاعل",
forms = {
{"imp_2d", "تَبَاوَآ"},
{"imp_2fp", "تَبَاوَأْنَ"},
{"imp_2fs", "تَبَاوَئِي"},
{"imp_2mp", "تَبَاوَؤُوا"},
{"imp_2ms", "تَبَاوَأْ"},
{"ind_1p", "نَتَبَاوَأُ"},
{"ind_1s", "أَتَبَاوَأُ"},
{"ind_2d", "تَتَبَاوَآنِ"},
{"ind_2fp", "تَتَبَاوَأْنَ"},
{"ind_2fs", "تَتَبَاوَئِينَ"},
{"ind_2mp", "تَتَبَاوَؤُونَ"},
{"ind_2ms", "تَتَبَاوَأُ"},
{"ind_3fd", "تَتَبَاوَآنِ"},
{"ind_3fp", "يَتَبَاوَأْنَ"},
{"ind_3fs", "تَتَبَاوَأُ"},
{"ind_3md", "يَتَبَاوَآنِ"},
{"ind_3mp", "يَتَبَاوَؤُونَ"},
{"ind_3ms", "يَتَبَاوَأُ"},
{"past_1p", "تَبَاوَأْنَا"},
{"past_1s", "تَبَاوَأْتُ"},
{"past_2d", "تَبَاوَأْتُمَا"},
{"past_2fp", "تَبَاوَأْتُنَّ"},
{"past_2fs", "تَبَاوَأْتِ"},
{"past_2mp", "تَبَاوَأْتُمْ"},
{"past_2ms", "تَبَاوَأْتَ"},
{"past_3fd", "تَبَاوَأَتَا"},
{"past_3fp", "تَبَاوَأْنَ"},
{"past_3fs", "تَبَاوَأَتْ"},
{"past_3md", "تَبَاوَآ"},
{"past_3mp", "تَبَاوَؤُوا"},
{"past_3ms", "تَبَاوَأَ"},
},
},
{
label = "اِمَّدَحَ (p339)", root = "مدح", wazn = "انفعل",
reduced = true,
forms = {
{"imp_2d", "اِمَّدِحَا"},
{"imp_2fp", "اِمَّدِحْنَ"},
{"imp_2fs", "اِمَّدِحِي"},
{"imp_2mp", "اِمَّدِحُوا"},
{"imp_2ms", "اِمَّدِحْ"},
{"ind_1p", "نَمَّدِحُ"},
{"ind_1s", "أَمَّدِحُ"},
{"ind_2d", "تَمَّدِحَانِ"},
{"ind_2fp", "تَمَّدِحْنَ"},
{"ind_2fs", "تَمَّدِحِينَ"},
{"ind_2mp", "تَمَّدِحُونَ"},
{"ind_2ms", "تَمَّدِحُ"},
{"ind_3fd", "تَمَّدِحَانِ"},
{"ind_3fp", "يَمَّدِحْنَ"},
{"ind_3fs", "تَمَّدِحُ"},
{"ind_3md", "يَمَّدِحَانِ"},
{"ind_3mp", "يَمَّدِحُونَ"},
{"ind_3ms", "يَمَّدِحُ"},
{"past_1p", "اِمَّدَحْنَا"},
{"past_1s", "اِمَّدَحْتُ"},
{"past_2d", "اِمَّدَحْتُمَا"},
{"past_2fp", "اِمَّدَحْتُنَّ"},
{"past_2fs", "اِمَّدَحْتِ"},
{"past_2mp", "اِمَّدَحْتُمْ"},
{"past_2ms", "اِمَّدَحْتَ"},
{"past_3fd", "اِمَّدَحَتَا"},
{"past_3fp", "اِمَّدَحْنَ"},
{"past_3fs", "اِمَّدَحَتْ"},
{"past_3md", "اِمَّدَحَا"},
{"past_3mp", "اِمَّدَحُوا"},
{"past_3ms", "اِمَّدَحَ"},
},
},
{
label = "اِنَّمَسَ (p339)", root = "نمس", wazn = "انفعل",
forms = {
{"imp_2d", "اِنَّمِسَا"},
{"imp_2fp", "اِنَّمِسْنَ"},
{"imp_2fs", "اِنَّمِسِي"},
{"imp_2mp", "اِنَّمِسُوا"},
{"imp_2ms", "اِنَّمِسْ"},
{"ind_1p", "نَنَّمِسُ"},
{"ind_1s", "أَنَّمِسُ"},
{"ind_2d", "تَنَّمِسَانِ"},
{"ind_2fp", "تَنَّمِسْنَ"},
{"ind_2fs", "تَنَّمِسِينَ"},
{"ind_2mp", "تَنَّمِسُونَ"},
{"ind_2ms", "تَنَّمِسُ"},
{"ind_3fd", "تَنَّمِسَانِ"},
{"ind_3fp", "يَنَّمِسْنَ"},
{"ind_3fs", "تَنَّمِسُ"},
{"ind_3md", "يَنَّمِسَانِ"},
{"ind_3mp", "يَنَّمِسُونَ"},
{"ind_3ms", "يَنَّمِسُ"},
{"past_1p", "اِنَّمَسْنَا"},
{"past_1s", "اِنَّمَسْتُ"},
{"past_2d", "اِنَّمَسْتُمَا"},
{"past_2fp", "اِنَّمَسْتُنَّ"},
{"past_2fs", "اِنَّمَسْتِ"},
{"past_2mp", "اِنَّمَسْتُمْ"},
{"past_2ms", "اِنَّمَسْتَ"},
{"past_3fd", "اِنَّمَسَتَا"},
{"past_3fp", "اِنَّمَسْنَ"},
{"past_3fs", "اِنَّمَسَتْ"},
{"past_3md", "اِنَّمَسَا"},
{"past_3mp", "اِنَّمَسُوا"},
{"past_3ms", "اِنَّمَسَ"},
},
},
{
label = "اِنْسَيَأَ (p345)", root = "سيأ", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْسَيِئَا"},
{"imp_2fp", "اِنْسَيِئْنَ"},
{"imp_2fs", "اِنْسَيِئِي"},
{"imp_2mp", "اِنْسَيِئُوا"},
{"imp_2ms", "اِنْسَيِئْ"},
{"ind_1p", "نَنْسَيِئُ"},
{"ind_1s", "أَنْسَيِئُ"},
{"ind_2d", "تَنْسَيِئَانِ"},
{"ind_2fp", "تَنْسَيِئْنَ"},
{"ind_2fs", "تَنْسَيِئِينَ"},
{"ind_2mp", "تَنْسَيِئُونَ"},
{"ind_2ms", "تَنْسَيِئُ"},
{"ind_3fd", "تَنْسَيِئَانِ"},
{"ind_3fp", "يَنْسَيِئْنَ"},
{"ind_3fs", "تَنْسَيِئُ"},
{"ind_3md", "يَنْسَيِئَانِ"},
{"ind_3mp", "يَنْسَيِئُونَ"},
{"ind_3ms", "يَنْسَيِئُ"},
{"past_1p", "اِنْسَيَأْنَا"},
{"past_1s", "اِنْسَيَأْتُ"},
{"past_2d", "اِنْسَيَأْتُمَا"},
{"past_2fp", "اِنْسَيَأْتُنَّ"},
{"past_2fs", "اِنْسَيَأْتِ"},
{"past_2mp", "اِنْسَيَأْتُمْ"},
{"past_2ms", "اِنْسَيَأْتَ"},
{"past_3fd", "اِنْسَيَأَتَا"},
{"past_3fp", "اِنْسَيَأْنَ"},
{"past_3fs", "اِنْسَيَأَتْ"},
{"past_3md", "اِنْسَيَآ"},
{"past_3mp", "اِنْسَيَؤُوا"},
{"past_3ms", "اِنْسَيَأَ"},
},
},
{
label = "اِدَّعَمَ (p352)", root = "دعم", wazn = "افتعل",
forms = {
{"imp_2d", "اِدَّعِمَا"},
{"imp_2fp", "اِدَّعِمْنَ"},
{"imp_2fs", "اِدَّعِمِي"},
{"imp_2mp", "اِدَّعِمُوا"},
{"imp_2ms", "اِدَّعِمْ"},
{"ind_1p", "نَدَّعِمُ"},
{"ind_1s", "أَدَّعِمُ"},
{"ind_2d", "تَدَّعِمَانِ"},
{"ind_2fp", "تَدَّعِمْنَ"},
{"ind_2fs", "تَدَّعِمِينَ"},
{"ind_2mp", "تَدَّعِمُونَ"},
{"ind_2ms", "تَدَّعِمُ"},
{"ind_3fd", "تَدَّعِمَانِ"},
{"ind_3fp", "يَدَّعِمْنَ"},
{"ind_3fs", "تَدَّعِمُ"},
{"ind_3md", "يَدَّعِمَانِ"},
{"ind_3mp", "يَدَّعِمُونَ"},
{"ind_3ms", "يَدَّعِمُ"},
{"past_1p", "اِدَّعَمْنَا"},
{"past_1s", "اِدَّعَمْتُ"},
{"past_2d", "اِدَّعَمْتُمَا"},
{"past_2fp", "اِدَّعَمْتُنَّ"},
{"past_2fs", "اِدَّعَمْتِ"},
{"past_2mp", "اِدَّعَمْتُمْ"},
{"past_2ms", "اِدَّعَمْتَ"},
{"past_3fd", "اِدَّعَمَتَا"},
{"past_3fp", "اِدَّعَمْنَ"},
{"past_3fs", "اِدَّعَمَتْ"},
{"past_3md", "اِدَّعَمَا"},
{"past_3mp", "اِدَّعَمُوا"},
{"past_3ms", "اِدَّعَمَ"},
},
},
{
label = "اِطَّلَبَ (p352)", root = "طلب", wazn = "افتعل",
forms = {
{"imp_2d", "اِطَّلِبَا"},
{"imp_2fp", "اِطَّلِبْنَ"},
{"imp_2fs", "اِطَّلِبِي"},
{"imp_2mp", "اِطَّلِبُوا"},
{"imp_2ms", "اِطَّلِبْ"},
{"ind_1p", "نَطَّلِبُ"},
{"ind_1s", "أَطَّلِبُ"},
{"ind_2d", "تَطَّلِبَانِ"},
{"ind_2fp", "تَطَّلِبْنَ"},
{"ind_2fs", "تَطَّلِبِينَ"},
{"ind_2mp", "تَطَّلِبُونَ"},
{"ind_2ms", "تَطَّلِبُ"},
{"ind_3fd", "تَطَّلِبَانِ"},
{"ind_3fp", "يَطَّلِبْنَ"},
{"ind_3fs", "تَطَّلِبُ"},
{"ind_3md", "يَطَّلِبَانِ"},
{"ind_3mp", "يَطَّلِبُونَ"},
{"ind_3ms", "يَطَّلِبُ"},
{"past_1p", "اِطَّلَبْنَا"},
{"past_1s", "اِطَّلَبْتُ"},
{"past_2d", "اِطَّلَبْتُمَا"},
{"past_2fp", "اِطَّلَبْتُنَّ"},
{"past_2fs", "اِطَّلَبْتِ"},
{"past_2mp", "اِطَّلَبْتُمْ"},
{"past_2ms", "اِطَّلَبْتَ"},
{"past_3fd", "اِطَّلَبَتَا"},
{"past_3fp", "اِطَّلَبْنَ"},
{"past_3fs", "اِطَّلَبَتْ"},
{"past_3md", "اِطَّلَبَا"},
{"past_3mp", "اِطَّلَبُوا"},
{"past_3ms", "اِطَّلَبَ"},
},
},
{
label = "اِذَّكَرَ (p353)", root = "ذكر", wazn = "افتعل",
forms = {
{"imp_2d", "اِذَّكِرَا"},
{"imp_2fp", "اِذَّكِرْنَ"},
{"imp_2fs", "اِذَّكِرِي"},
{"imp_2mp", "اِذَّكِرُوا"},
{"imp_2ms", "اِذَّكِرْ"},
{"ind_1p", "نَذَّكِرُ"},
{"ind_1s", "أَذَّكِرُ"},
{"ind_2d", "تَذَّكِرَانِ"},
{"ind_2fp", "تَذَّكِرْنَ"},
{"ind_2fs", "تَذَّكِرِينَ"},
{"ind_2mp", "تَذَّكِرُونَ"},
{"ind_2ms", "تَذَّكِرُ"},
{"ind_3fd", "تَذَّكِرَانِ"},
{"ind_3fp", "يَذَّكِرْنَ"},
{"ind_3fs", "تَذَّكِرُ"},
{"ind_3md", "يَذَّكِرَانِ"},
{"ind_3mp", "يَذَّكِرُونَ"},
{"ind_3ms", "يَذَّكِرُ"},
{"past_1p", "اِذَّكَرْنَا"},
{"past_1s", "اِذَّكَرْتُ"},
{"past_2d", "اِذَّكَرْتُمَا"},
{"past_2fp", "اِذَّكَرْتُنَّ"},
{"past_2fs", "اِذَّكَرْتِ"},
{"past_2mp", "اِذَّكَرْتُمْ"},
{"past_2ms", "اِذَّكَرْتَ"},
{"past_3fd", "اِذَّكَرَتَا"},
{"past_3fp", "اِذَّكَرْنَ"},
{"past_3fs", "اِذَّكَرَتْ"},
{"past_3md", "اِذَّكَرَا"},
{"past_3mp", "اِذَّكَرُوا"},
{"past_3ms", "اِذَّكَرَ"},
},
},
{
label = "اِتَّحَدَ (p359)", root = "أحد", wazn = "افتعل",
reduced = true,
forms = {
{"imp_2d", "اِتَّحِدَا"},
{"imp_2fp", "اِتَّحِدْنَ"},
{"imp_2fs", "اِتَّحِدِي"},
{"imp_2mp", "اِتَّحِدُوا"},
{"imp_2ms", "اِتَّحِدْ"},
{"ind_1p", "نَتَّحِدُ"},
{"ind_1s", "أَتَّحِدُ"},
{"ind_2d", "تَتَّحِدَانِ"},
{"ind_2fp", "تَتَّحِدْنَ"},
{"ind_2fs", "تَتَّحِدِينَ"},
{"ind_2mp", "تَتَّحِدُونَ"},
{"ind_2ms", "تَتَّحِدُ"},
{"ind_3fd", "تَتَّحِدَانِ"},
{"ind_3fp", "يَتَّحِدْنَ"},
{"ind_3fs", "تَتَّحِدُ"},
{"ind_3md", "يَتَّحِدَانِ"},
{"ind_3mp", "يَتَّحِدُونَ"},
{"ind_3ms", "يَتَّحِدُ"},
{"past_1p", "اِتَّحَدْنَا"},
{"past_1s", "اِتَّحَدْتُ"},
{"past_2d", "اِتَّحَدْتُمَا"},
{"past_2fp", "اِتَّحَدْتُنَّ"},
{"past_2fs", "اِتَّحَدْتِ"},
{"past_2mp", "اِتَّحَدْتُمْ"},
{"past_2ms", "اِتَّحَدْتَ"},
{"past_3fd", "اِتَّحَدَتَا"},
{"past_3fp", "اِتَّحَدْنَ"},
{"past_3fs", "اِتَّحَدَتْ"},
{"past_3md", "اِتَّحَدَا"},
{"past_3mp", "اِتَّحَدُوا"},
{"past_3ms", "اِتَّحَدَ"},
},
},
{
label = "اِتَّزَرَ (p359)", root = "أزر", wazn = "افتعل",
reduced = true,
forms = {
{"imp_2d", "اِتَّزِرَا"},
{"imp_2fp", "اِتَّزِرْنَ"},
{"imp_2fs", "اِتَّزِرِي"},
{"imp_2mp", "اِتَّزِرُوا"},
{"imp_2ms", "اِتَّزِرْ"},
{"ind_1p", "نَتَّزِرُ"},
{"ind_1s", "أَتَّزِرُ"},
{"ind_2d", "تَتَّزِرَانِ"},
{"ind_2fp", "تَتَّزِرْنَ"},
{"ind_2fs", "تَتَّزِرِينَ"},
{"ind_2mp", "تَتَّزِرُونَ"},
{"ind_2ms", "تَتَّزِرُ"},
{"ind_3fd", "تَتَّزِرَانِ"},
{"ind_3fp", "يَتَّزِرْنَ"},
{"ind_3fs", "تَتَّزِرُ"},
{"ind_3md", "يَتَّزِرَانِ"},
{"ind_3mp", "يَتَّزِرُونَ"},
{"ind_3ms", "يَتَّزِرُ"},
{"past_1p", "اِتَّزَرْنَا"},
{"past_1s", "اِتَّزَرْتُ"},
{"past_2d", "اِتَّزَرْتُمَا"},
{"past_2fp", "اِتَّزَرْتُنَّ"},
{"past_2fs", "اِتَّزَرْتِ"},
{"past_2mp", "اِتَّزَرْتُمْ"},
{"past_2ms", "اِتَّزَرْتَ"},
{"past_3fd", "اِتَّزَرَتَا"},
{"past_3fp", "اِتَّزَرْنَ"},
{"past_3fs", "اِتَّزَرَتْ"},
{"past_3md", "اِتَّزَرَا"},
{"past_3mp", "اِتَّزَرُوا"},
{"past_3ms", "اِتَّزَرَ"},
},
},
{
label = "اِتَّأَمَ (p361)", root = "تأم", wazn = "افتعل",
forms = {
{"imp_2d", "اِتَّئِمَا"},
{"imp_2fp", "اِتَّئِمْنَ"},
{"imp_2fs", "اِتَّئِمِي"},
{"imp_2mp", "اِتَّئِمُوا"},
{"imp_2ms", "اِتَّئِمْ"},
{"ind_1p", "نَتَّئِمُ"},
{"ind_1s", "أَتَّئِمُ"},
{"ind_2d", "تَتَّئِمَانِ"},
{"ind_2fp", "تَتَّئِمْنَ"},
{"ind_2fs", "تَتَّئِمِينَ"},
{"ind_2mp", "تَتَّئِمُونَ"},
{"ind_2ms", "تَتَّئِمُ"},
{"ind_3fd", "تَتَّئِمَانِ"},
{"ind_3fp", "يَتَّئِمْنَ"},
{"ind_3fs", "تَتَّئِمُ"},
{"ind_3md", "يَتَّئِمَانِ"},
{"ind_3mp", "يَتَّئِمُونَ"},
{"ind_3ms", "يَتَّئِمُ"},
{"past_1p", "اِتَّأَمْنَا"},
{"past_1s", "اِتَّأَمْتُ"},
{"past_2d", "اِتَّأَمْتُمَا"},
{"past_2fp", "اِتَّأَمْتُنَّ"},
{"past_2fs", "اِتَّأَمْتِ"},
{"past_2mp", "اِتَّأَمْتُمْ"},
{"past_2ms", "اِتَّأَمْتَ"},
{"past_3fd", "اِتَّأَمَتَا"},
{"past_3fp", "اِتَّأَمْنَ"},
{"past_3fs", "اِتَّأَمَتْ"},
{"past_3md", "اِتَّأَمَا"},
{"past_3mp", "اِتَّأَمُوا"},
{"past_3ms", "اِتَّأَمَ"},
},
},
{
label = "اِتَّزَنَ (p363)", root = "وزن", wazn = "افتعل",
forms = {
{"imp_2d", "اِتَّزِنَا"},
{"imp_2fp", "اِتَّزِنَّ"},
{"imp_2fs", "اِتَّزِنِي"},
{"imp_2mp", "اِتَّزِنُوا"},
{"imp_2ms", "اِتَّزِنْ"},
{"ind_1p", "نَتَّزِنُ"},
{"ind_1s", "أَتَّزِنُ"},
{"ind_2d", "تَتَّزِنَانِ"},
{"ind_2fp", "تَتَّزِنَّ"},
{"ind_2fs", "تَتَّزِنِينَ"},
{"ind_2mp", "تَتَّزِنُونَ"},
{"ind_2ms", "تَتَّزِنُ"},
{"ind_3fd", "تَتَّزِنَانِ"},
{"ind_3fp", "يَتَّزِنَّ"},
{"ind_3fs", "تَتَّزِنُ"},
{"ind_3md", "يَتَّزِنَانِ"},
{"ind_3mp", "يَتَّزِنُونَ"},
{"ind_3ms", "يَتَّزِنُ"},
{"past_1p", "اِتَّزَنَّا"},
{"past_1s", "اِتَّزَنْتُ"},
{"past_2d", "اِتَّزَنْتُمَا"},
{"past_2fp", "اِتَّزَنْتُنَّ"},
{"past_2fs", "اِتَّزَنْتِ"},
{"past_2mp", "اِتَّزَنْتُمْ"},
{"past_2ms", "اِتَّزَنْتَ"},
{"past_3fd", "اِتَّزَنَتَا"},
{"past_3fp", "اِتَّزَنَّ"},
{"past_3fs", "اِتَّزَنَتْ"},
{"past_3md", "اِتَّزَنَا"},
{"past_3mp", "اِتَّزَنُوا"},
{"past_3ms", "اِتَّزَنَ"},
},
},
{
label = "اِتَّصَفَ (p363)", root = "وصف", wazn = "افتعل",
forms = {
{"imp_2d", "اِتَّصِفَا"},
{"imp_2fp", "اِتَّصِفْنَ"},
{"imp_2fs", "اِتَّصِفِي"},
{"imp_2mp", "اِتَّصِفُوا"},
{"imp_2ms", "اِتَّصِفْ"},
{"ind_1p", "نَتَّصِفُ"},
{"ind_1s", "أَتَّصِفُ"},
{"ind_2d", "تَتَّصِفَانِ"},
{"ind_2fp", "تَتَّصِفْنَ"},
{"ind_2fs", "تَتَّصِفِينَ"},
{"ind_2mp", "تَتَّصِفُونَ"},
{"ind_2ms", "تَتَّصِفُ"},
{"ind_3fd", "تَتَّصِفَانِ"},
{"ind_3fp", "يَتَّصِفْنَ"},
{"ind_3fs", "تَتَّصِفُ"},
{"ind_3md", "يَتَّصِفَانِ"},
{"ind_3mp", "يَتَّصِفُونَ"},
{"ind_3ms", "يَتَّصِفُ"},
{"past_1p", "اِتَّصَفْنَا"},
{"past_1s", "اِتَّصَفْتُ"},
{"past_2d", "اِتَّصَفْتُمَا"},
{"past_2fp", "اِتَّصَفْتُنَّ"},
{"past_2fs", "اِتَّصَفْتِ"},
{"past_2mp", "اِتَّصَفْتُمْ"},
{"past_2ms", "اِتَّصَفْتَ"},
{"past_3fd", "اِتَّصَفَتَا"},
{"past_3fp", "اِتَّصَفْنَ"},
{"past_3fs", "اِتَّصَفَتْ"},
{"past_3md", "اِتَّصَفَا"},
{"past_3mp", "اِتَّصَفُوا"},
{"past_3ms", "اِتَّصَفَ"},
},
},
{
label = "اِعْتَوَلَ (p364)", root = "عول", wazn = "افتعل",
forms = {
{"imp_2d", "اِعْتَوِلَا"},
{"imp_2fp", "اِعْتَوِلْنَ"},
{"imp_2fs", "اِعْتَوِلِي"},
{"imp_2mp", "اِعْتَوِلُوا"},
{"imp_2ms", "اِعْتَوِلْ"},
{"ind_1p", "نَعْتَوِلُ"},
{"ind_1s", "أَعْتَوِلُ"},
{"ind_2d", "تَعْتَوِلَانِ"},
{"ind_2fp", "تَعْتَوِلْنَ"},
{"ind_2fs", "تَعْتَوِلِينَ"},
{"ind_2mp", "تَعْتَوِلُونَ"},
{"ind_2ms", "تَعْتَوِلُ"},
{"ind_3fd", "تَعْتَوِلَانِ"},
{"ind_3fp", "يَعْتَوِلْنَ"},
{"ind_3fs", "تَعْتَوِلُ"},
{"ind_3md", "يَعْتَوِلَانِ"},
{"ind_3mp", "يَعْتَوِلُونَ"},
{"ind_3ms", "يَعْتَوِلُ"},
{"past_1p", "اِعْتَوَلْنَا"},
{"past_1s", "اِعْتَوَلْتُ"},
{"past_2d", "اِعْتَوَلْتُمَا"},
{"past_2fp", "اِعْتَوَلْتُنَّ"},
{"past_2fs", "اِعْتَوَلْتِ"},
{"past_2mp", "اِعْتَوَلْتُمْ"},
{"past_2ms", "اِعْتَوَلْتَ"},
{"past_3fd", "اِعْتَوَلَتَا"},
{"past_3fp", "اِعْتَوَلْنَ"},
{"past_3fs", "اِعْتَوَلَتْ"},
{"past_3md", "اِعْتَوَلَا"},
{"past_3mp", "اِعْتَوَلُوا"},
{"past_3ms", "اِعْتَوَلَ"},
},
},
{
label = "اِئْتَسَى (p368)", root = "أسي", wazn = "افتعل",
forms = {
{"imp_2d", "اِئْتَسِيَا"},
{"imp_2fp", "اِئْتَسِينَ"},
{"imp_2fs", "اِئْتَسِي"},
{"imp_2mp", "اِئْتَسُوا"},
{"imp_2ms", "اِئْتَسِ"},
{"ind_1p", "نَأْتَسِي"},
{"ind_1s", "أَأْتَسِي"},
{"ind_2d", "تَأْتَسِيَانِ"},
{"ind_2fp", "تَأْتَسِينَ"},
{"ind_2fs", "تَأْتَسِينَ"},
{"ind_2mp", "تَأْتَسُونَ"},
{"ind_2ms", "تَأْتَسِي"},
{"ind_3fd", "تَأْتَسِيَانِ"},
{"ind_3fp", "يَأْتَسِينَ"},
{"ind_3fs", "تَأْتَسِي"},
{"ind_3md", "يَأْتَسِيَانِ"},
{"ind_3mp", "يَأْتَسُونَ"},
{"ind_3ms", "يَأْتَسِي"},
{"past_1p", "اِئْتَسَيْنَا"},
{"past_1s", "اِئْتَسَيْتُ"},
{"past_2d", "اِئْتَسَيْتُمَا"},
{"past_2fp", "اِئْتَسَيْتُنَّ"},
{"past_2fs", "اِئْتَسَيْتِ"},
{"past_2mp", "اِئْتَسَيْتُمْ"},
{"past_2ms", "اِئْتَسَيْتَ"},
{"past_3fd", "اِئْتَسَتَا"},
{"past_3fp", "اِئْتَسَيْنَ"},
{"past_3fs", "اِئْتَسَتْ"},
{"past_3md", "اِئْتَسَيَا"},
{"past_3mp", "اِئْتَسَوْا"},
{"past_3ms", "اِئْتَسَى"},
},
},
{
label = "اِتَّقَى (p369)", root = "وقو", wazn = "افتعل",
forms = {
{"imp_2d", "اِتَّقِيَا"},
{"imp_2fp", "اِتَّقِينَ"},
{"imp_2fs", "اِتَّقِي"},
{"imp_2mp", "اِتَّقُوا"},
{"imp_2ms", "اِتَّقِ"},
{"ind_1p", "نَتَّقِي"},
{"ind_1s", "أَتَّقِي"},
{"ind_2d", "تَتَّقِيَانِ"},
{"ind_2fp", "تَتَّقِينَ"},
{"ind_2fs", "تَتَّقِينَ"},
{"ind_2mp", "تَتَّقُونَ"},
{"ind_2ms", "تَتَّقِي"},
{"ind_3fd", "تَتَّقِيَانِ"},
{"ind_3fp", "يَتَّقِينَ"},
{"ind_3fs", "تَتَّقِي"},
{"ind_3md", "يَتَّقِيَانِ"},
{"ind_3mp", "يَتَّقُونَ"},
{"ind_3ms", "يَتَّقِي"},
{"past_1p", "اِتَّقَيْنَا"},
{"past_1s", "اِتَّقَيْتُ"},
{"past_2d", "اِتَّقَيْتُمَا"},
{"past_2fp", "اِتَّقَيْتُنَّ"},
{"past_2fs", "اِتَّقَيْتِ"},
{"past_2mp", "اِتَّقَيْتُمْ"},
{"past_2ms", "اِتَّقَيْتَ"},
{"past_3fd", "اِتَّقَتَا"},
{"past_3fp", "اِتَّقَيْنَ"},
{"past_3fs", "اِتَّقَتْ"},
{"past_3md", "اِتَّقَيَا"},
{"past_3mp", "اِتَّقَوْا"},
{"past_3ms", "اِتَّقَى"},
},
},
{
label = "اِسْتَجْوَبَ (p385)", root = "جوب", wazn = "استفعل",
forms = {
{"imp_2d", "اِسْتَجْوِبَا"},
{"imp_2fp", "اِسْتَجْوِبْنَ"},
{"imp_2fs", "اِسْتَجْوِبِي"},
{"imp_2mp", "اِسْتَجْوِبُوا"},
{"imp_2ms", "اِسْتَجْوِبْ"},
{"ind_1p", "نَسْتَجْوِبُ"},
{"ind_1s", "أَسْتَجْوِبُ"},
{"ind_2d", "تَسْتَجْوِبَانِ"},
{"ind_2fp", "تَسْتَجْوِبْنَ"},
{"ind_2fs", "تَسْتَجْوِبِينَ"},
{"ind_2mp", "تَسْتَجْوِبُونَ"},
{"ind_2ms", "تَسْتَجْوِبُ"},
{"ind_3fd", "تَسْتَجْوِبَانِ"},
{"ind_3fp", "يَسْتَجْوِبْنَ"},
{"ind_3fs", "تَسْتَجْوِبُ"},
{"ind_3md", "يَسْتَجْوِبَانِ"},
{"ind_3mp", "يَسْتَجْوِبُونَ"},
{"ind_3ms", "يَسْتَجْوِبُ"},
{"past_1p", "اِسْتَجْوَبْنَا"},
{"past_1s", "اِسْتَجْوَبْتُ"},
{"past_2d", "اِسْتَجْوَبْتُمَا"},
{"past_2fp", "اِسْتَجْوَبْتُنَّ"},
{"past_2fs", "اِسْتَجْوَبْتِ"},
{"past_2mp", "اِسْتَجْوَبْتُمْ"},
{"past_2ms", "اِسْتَجْوَبْتَ"},
{"past_3fd", "اِسْتَجْوَبَتَا"},
{"past_3fp", "اِسْتَجْوَبْنَ"},
{"past_3fs", "اِسْتَجْوَبَتْ"},
{"past_3md", "اِسْتَجْوَبَا"},
{"past_3mp", "اِسْتَجْوَبُوا"},
{"past_3ms", "اِسْتَجْوَبَ"},
},
},
{
label = "اِقْلَوَّدَ (p394)", root = "قلد", wazn = "افعوّل",
forms = {
{"imp_2d", "اِقْلَوِّدَا"},
{"imp_2fp", "اِقْلَوِّدْنَ"},
{"imp_2fs", "اِقْلَوِّدِي"},
{"imp_2mp", "اِقْلَوِّدُوا"},
{"imp_2ms", "اِقْلَوِّدْ"},
{"ind_1p", "نَقْلَوِّدُ"},
{"ind_1s", "أَقْلَوِّدُ"},
{"ind_2d", "تَقْلَوِّدَانِ"},
{"ind_2fp", "تَقْلَوِّدْنَ"},
{"ind_2fs", "تَقْلَوِّدِينَ"},
{"ind_2mp", "تَقْلَوِّدُونَ"},
{"ind_2ms", "تَقْلَوِّدُ"},
{"ind_3fd", "تَقْلَوِّدَانِ"},
{"ind_3fp", "يَقْلَوِّدْنَ"},
{"ind_3fs", "تَقْلَوِّدُ"},
{"ind_3md", "يَقْلَوِّدَانِ"},
{"ind_3mp", "يَقْلَوِّدُونَ"},
{"ind_3ms", "يَقْلَوِّدُ"},
{"past_1p", "اِقْلَوَّدْنَا"},
{"past_1s", "اِقْلَوَّدْتُ"},
{"past_2d", "اِقْلَوَّدْتُمَا"},
{"past_2fp", "اِقْلَوَّدْتُنَّ"},
{"past_2fs", "اِقْلَوَّدْتِ"},
{"past_2mp", "اِقْلَوَّدْتُمْ"},
{"past_2ms", "اِقْلَوَّدْتَ"},
{"past_3fd", "اِقْلَوَّدَتَا"},
{"past_3fp", "اِقْلَوَّدْنَ"},
{"past_3fs", "اِقْلَوَّدَتْ"},
{"past_3md", "اِقْلَوَّدَا"},
{"past_3mp", "اِقْلَوَّدُوا"},
{"past_3ms", "اِقْلَوَّدَ"},
},
},
{
label = "اِيراقَّ (p397)", root = "ورق", wazn = "افعالّ",
forms = {
{"imp_2d", "اِيرَاقَّا"},
{"imp_2fp", "اِيرَاقِقْنَ"},
{"imp_2fs", "اِيرَاقِّي"},
{"imp_2mp", "اِيرَاقُّوا"},
{"imp_2ms", "اِيرَاقِقْ"},
{"ind_1p", "نَوْرَاقُّ"},
{"ind_1s", "أَوْرَاقُّ"},
{"ind_2d", "تَوْرَاقَّانِ"},
{"ind_2fp", "تَوْرَاقِقْنَ"},
{"ind_2fs", "تَوْرَاقِّينَ"},
{"ind_2mp", "تَوْرَاقُّونَ"},
{"ind_2ms", "تَوْرَاقُّ"},
{"ind_3fd", "تَوْرَاقَّانِ"},
{"ind_3fp", "يَوْرَاقِقْنَ"},
{"ind_3fs", "تَوْرَاقُّ"},
{"ind_3md", "يَوْرَاقَّانِ"},
{"ind_3mp", "يَوْرَاقُّونَ"},
{"ind_3ms", "يَوْرَاقُّ"},
{"past_1p", "اِيرَاقَقْنَا"},
{"past_1s", "اِيرَاقَقْتُ"},
{"past_2d", "اِيرَاقَقْتُمَا"},
{"past_2fp", "اِيرَاقَقْتُنَّ"},
{"past_2fs", "اِيرَاقَقْتِ"},
{"past_2mp", "اِيرَاقَقْتُمْ"},
{"past_2ms", "اِيرَاقَقْتَ"},
{"past_3fd", "اِيرَاقَّتَا"},
{"past_3fp", "اِيرَاقَقْنَ"},
{"past_3fs", "اِيرَاقَّتْ"},
{"past_3md", "اِيرَاقَّا"},
{"past_3mp", "اِيرَاقُّوا"},
{"past_3ms", "اِيرَاقَّ"},
},
},
{
label = "اِيرادَّ (p397)", root = "ورد", wazn = "افعالّ",
forms = {
{"imp_2d", "اِيرَادَّا"},
{"imp_2fp", "اِيرَادِدْنَ"},
{"imp_2fs", "اِيرَادِّي"},
{"imp_2mp", "اِيرَادُّوا"},
{"imp_2ms", "اِيرَادِدْ"},
{"ind_1p", "نَوْرَادُّ"},
{"ind_1s", "أَوْرَادُّ"},
{"ind_2d", "تَوْرَادَّانِ"},
{"ind_2fp", "تَوْرَادِدْنَ"},
{"ind_2fs", "تَوْرَادِّينَ"},
{"ind_2mp", "تَوْرَادُّونَ"},
{"ind_2ms", "تَوْرَادُّ"},
{"ind_3fd", "تَوْرَادَّانِ"},
{"ind_3fp", "يَوْرَادِدْنَ"},
{"ind_3fs", "تَوْرَادُّ"},
{"ind_3md", "يَوْرَادَّانِ"},
{"ind_3mp", "يَوْرَادُّونَ"},
{"ind_3ms", "يَوْرَادُّ"},
{"past_1p", "اِيرَادَدْنَا"},
{"past_1s", "اِيرَادَدْتُ"},
{"past_2d", "اِيرَادَدْتُمَا"},
{"past_2fp", "اِيرَادَدْتُنَّ"},
{"past_2fs", "اِيرَادَدْتِ"},
{"past_2mp", "اِيرَادَدْتُمْ"},
{"past_2ms", "اِيرَادَدْتَ"},
{"past_3fd", "اِيرَادَّتَا"},
{"past_3fp", "اِيرَادَدْنَ"},
{"past_3fs", "اِيرَادَّتْ"},
{"past_3md", "اِيرَادَّا"},
{"past_3mp", "اِيرَادُّوا"},
{"past_3ms", "اِيرَادَّ"},
},
},
}
awy77asc7sswidru1nme92srqhybqg5
وحدة:ar-verb/testcases/14
828
243472
1159041
2026-09-10T12:39:58Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159041
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 14 من 15. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/14")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_14()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
5q1lhpxip4xr13mb27smt1itb4vnp54
1159099
1159041
2026-09-10T19:34:31Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159099
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 14 من 16. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/14")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_14()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
kos26803ioug1cb9dqc6t55uhyofvtg
نقاش الوحدة:ar-verb/testcases/14
829
243473
1159042
2026-09-10T12:39:59Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159042
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/14|الجزء 14 من 15]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، [[نقاش الوحدة:ar-verb/testcases/1|1]]، [[نقاش الوحدة:ar-verb/testcases/2|2]]، [[نقاش الوحدة:ar-verb/testcases/3|3]]، [[نقاش الوحدة:ar-verb/testcases/4|4]]، [[نقاش الوحدة:ar-verb/testcases/5|5]]، [[نقاش الوحدة:ar-verb/testcases/6|6]]، [[نقاش الوحدة:ar-verb/testcases/7|7]]، [[نقاش الوحدة:ar-verb/testcases/8|8]]، [[نقاش الوحدة:ar-verb/testcases/9|9]]، [[نقاش الوحدة:ar-verb/testcases/10|10]]، [[نقاش الوحدة:ar-verb/testcases/11|11]]، [[نقاش الوحدة:ar-verb/testcases/12|12]]، [[نقاش الوحدة:ar-verb/testcases/13|13]]، 14، [[نقاش الوحدة:ar-verb/testcases/15|15]] — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/14|run_tests}}
7kni6stwnjwlawx1bewzq62g492eoui
1159100
1159042
2026-09-10T19:34:32Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159100
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/14|الجزء 14 من 16]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، [[نقاش الوحدة:ar-verb/testcases/1|1]]، [[نقاش الوحدة:ar-verb/testcases/2|2]]، [[نقاش الوحدة:ar-verb/testcases/3|3]]، [[نقاش الوحدة:ar-verb/testcases/4|4]]، [[نقاش الوحدة:ar-verb/testcases/5|5]]، [[نقاش الوحدة:ar-verb/testcases/6|6]]، [[نقاش الوحدة:ar-verb/testcases/7|7]]، [[نقاش الوحدة:ar-verb/testcases/8|8]]، [[نقاش الوحدة:ar-verb/testcases/9|9]]، [[نقاش الوحدة:ar-verb/testcases/10|10]]، [[نقاش الوحدة:ar-verb/testcases/11|11]]، [[نقاش الوحدة:ar-verb/testcases/12|12]]، [[نقاش الوحدة:ar-verb/testcases/13|13]]، 14، [[نقاش الوحدة:ar-verb/testcases/15|15]]، [[نقاش الوحدة:ar-verb/testcases/16|16]] — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/14|run_tests}}
8h0v8h7hrj0t2ksr5tp76weg39b8w2w
وحدة:ar-verb/testcases/بيانات/15
828
243474
1159043
2026-09-10T12:40:02Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159043
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 15 من 15.
return {
{
label = "اِحْوالَّ (p398)", root = "حول", wazn = "افعالّ",
forms = {
{"imp_2d", "اِحْوَالَّا"},
{"imp_2fp", "اِحْوَالِلْنَ"},
{"imp_2fs", "اِحْوَالِّي"},
{"imp_2mp", "اِحْوَالُّوا"},
{"imp_2ms", "اِحْوَالِلْ"},
{"ind_1p", "نَحْوَالُّ"},
{"ind_1s", "أَحْوَالُّ"},
{"ind_2d", "تَحْوَالَّانِ"},
{"ind_2fp", "تَحْوَالِلْنَ"},
{"ind_2fs", "تَحْوَالِّينَ"},
{"ind_2mp", "تَحْوَالُّونَ"},
{"ind_2ms", "تَحْوَالُّ"},
{"ind_3fd", "تَحْوَالَّانِ"},
{"ind_3fp", "يَحْوَالِلْنَ"},
{"ind_3fs", "تَحْوَالُّ"},
{"ind_3md", "يَحْوَالَّانِ"},
{"ind_3mp", "يَحْوَالُّونَ"},
{"ind_3ms", "يَحْوَالُّ"},
{"past_1p", "اِحْوَالَلْنَا"},
{"past_1s", "اِحْوَالَلْتُ"},
{"past_2d", "اِحْوَالَلْتُمَا"},
{"past_2fp", "اِحْوَالَلْتُنَّ"},
{"past_2fs", "اِحْوَالَلْتِ"},
{"past_2mp", "اِحْوَالَلْتُمْ"},
{"past_2ms", "اِحْوَالَلْتَ"},
{"past_3fd", "اِحْوَالَّتَا"},
{"past_3fp", "اِحْوَالَلْنَ"},
{"past_3fs", "اِحْوَالَّتْ"},
{"past_3md", "اِحْوَالَّا"},
{"past_3mp", "اِحْوَالُّوا"},
{"past_3ms", "اِحْوَالَّ"},
},
},
{
label = "اِزْيانَّ (p398)", root = "زين", wazn = "افعالّ",
forms = {
{"imp_2d", "اِزْيَانَّا"},
{"imp_2fp", "اِزْيَانِنَّ"},
{"imp_2fs", "اِزْيَانِّي"},
{"imp_2mp", "اِزْيَانُّوا"},
{"imp_2ms", "اِزْيَانِنْ"},
{"ind_1p", "نَزْيَانُّ"},
{"ind_1s", "أَزْيَانُّ"},
{"ind_2d", "تَزْيَانَّانِ"},
{"ind_2fp", "تَزْيَانِنَّ"},
{"ind_2fs", "تَزْيَانِّينَ"},
{"ind_2mp", "تَزْيَانُّونَ"},
{"ind_2ms", "تَزْيَانُّ"},
{"ind_3fd", "تَزْيَانَّانِ"},
{"ind_3fp", "يَزْيَانِنَّ"},
{"ind_3fs", "تَزْيَانُّ"},
{"ind_3md", "يَزْيَانَّانِ"},
{"ind_3mp", "يَزْيَانُّونَ"},
{"ind_3ms", "يَزْيَانُّ"},
{"past_1p", "اِزْيَانَنَّا"},
{"past_1s", "اِزْيَانَنْتُ"},
{"past_2d", "اِزْيَانَنْتُمَا"},
{"past_2fp", "اِزْيَانَنْتُنَّ"},
{"past_2fs", "اِزْيَانَنْتِ"},
{"past_2mp", "اِزْيَانَنْتُمْ"},
{"past_2ms", "اِزْيَانَنْتَ"},
{"past_3fd", "اِزْيَانَّتَا"},
{"past_3fp", "اِزْيَانَنَّ"},
{"past_3fs", "اِزْيَانَّتْ"},
{"past_3md", "اِزْيَانَّا"},
{"past_3mp", "اِزْيَانُّوا"},
{"past_3ms", "اِزْيَانَّ"},
},
},
{
label = "اِشْرَوْرَى (p399)", root = "شرو", wazn = "افعوعل",
forms = {
{"imp_2d", "اِشْرَوْرِيَا"},
{"imp_2fp", "اِشْرَوْرِينَ"},
{"imp_2fs", "اِشْرَوْرِي"},
{"imp_2mp", "اِشْرَوْرُوا"},
{"imp_2ms", "اِشْرَوْرِ"},
{"ind_1p", "نَشْرَوْرِي"},
{"ind_1s", "أَشْرَوْرِي"},
{"ind_2d", "تَشْرَوْرِيَانِ"},
{"ind_2fp", "تَشْرَوْرِينَ"},
{"ind_2fs", "تَشْرَوْرِينَ"},
{"ind_2mp", "تَشْرَوْرُونَ"},
{"ind_2ms", "تَشْرَوْرِي"},
{"ind_3fd", "تَشْرَوْرِيَانِ"},
{"ind_3fp", "يَشْرَوْرِينَ"},
{"ind_3fs", "تَشْرَوْرِي"},
{"ind_3md", "يَشْرَوْرِيَانِ"},
{"ind_3mp", "يَشْرَوْرُونَ"},
{"ind_3ms", "يَشْرَوْرِي"},
{"past_1p", "اِشْرَوْرَيْنَا"},
{"past_1s", "اِشْرَوْرَيْتُ"},
{"past_2d", "اِشْرَوْرَيْتُمَا"},
{"past_2fp", "اِشْرَوْرَيْتُنَّ"},
{"past_2fs", "اِشْرَوْرَيْتِ"},
{"past_2mp", "اِشْرَوْرَيْتُمْ"},
{"past_2ms", "اِشْرَوْرَيْتَ"},
{"past_3fd", "اِشْرَوْرَتَا"},
{"past_3fp", "اِشْرَوْرَيْنَ"},
{"past_3fs", "اِشْرَوْرَتْ"},
{"past_3md", "اِشْرَوْرَيَا"},
{"past_3mp", "اِشْرَوْرَوْا"},
{"past_3ms", "اِشْرَوْرَى"},
},
},
{
label = "سَيْطَرَ (p408)", root = "سيطر", wazn = "فعلل",
forms = {
{"imp_2d", "سَيْطِرَا"},
{"imp_2fp", "سَيْطِرْنَ"},
{"imp_2fs", "سَيْطِرِي"},
{"imp_2mp", "سَيْطِرُوا"},
{"imp_2ms", "سَيْطِرْ"},
{"ind_1p", "نُسَيْطِرُ"},
{"ind_1s", "أُسَيْطِرُ"},
{"ind_2d", "تُسَيْطِرَانِ"},
{"ind_2fp", "تُسَيْطِرْنَ"},
{"ind_2fs", "تُسَيْطِرِينَ"},
{"ind_2mp", "تُسَيْطِرُونَ"},
{"ind_2ms", "تُسَيْطِرُ"},
{"ind_3fd", "تُسَيْطِرَانِ"},
{"ind_3fp", "يُسَيْطِرْنَ"},
{"ind_3fs", "تُسَيْطِرُ"},
{"ind_3md", "يُسَيْطِرَانِ"},
{"ind_3mp", "يُسَيْطِرُونَ"},
{"ind_3ms", "يُسَيْطِرُ"},
{"past_1p", "سَيْطَرْنَا"},
{"past_1s", "سَيْطَرْتُ"},
{"past_2d", "سَيْطَرْتُمَا"},
{"past_2fp", "سَيْطَرْتُنَّ"},
{"past_2fs", "سَيْطَرْتِ"},
{"past_2mp", "سَيْطَرْتُمْ"},
{"past_2ms", "سَيْطَرْتَ"},
{"past_3fd", "سَيْطَرَتَا"},
{"past_3fp", "سَيْطَرْنَ"},
{"past_3fs", "سَيْطَرَتْ"},
{"past_3md", "سَيْطَرَا"},
{"past_3mp", "سَيْطَرُوا"},
{"past_3ms", "سَيْطَرَ"},
},
},
{
label = "تَفَيْلَقَ (p422)", root = "فيلق", wazn = "تفعلل",
forms = {
{"imp_2d", "تَفَيْلَقَا"},
{"imp_2fp", "تَفَيْلَقْنَ"},
{"imp_2fs", "تَفَيْلَقِي"},
{"imp_2mp", "تَفَيْلَقُوا"},
{"imp_2ms", "تَفَيْلَقْ"},
{"ind_1p", "نَتَفَيْلَقُ"},
{"ind_1s", "أَتَفَيْلَقُ"},
{"ind_2d", "تَتَفَيْلَقَانِ"},
{"ind_2fp", "تَتَفَيْلَقْنَ"},
{"ind_2fs", "تَتَفَيْلَقِينَ"},
{"ind_2mp", "تَتَفَيْلَقُونَ"},
{"ind_2ms", "تَتَفَيْلَقُ"},
{"ind_3fd", "تَتَفَيْلَقَانِ"},
{"ind_3fp", "يَتَفَيْلَقْنَ"},
{"ind_3fs", "تَتَفَيْلَقُ"},
{"ind_3md", "يَتَفَيْلَقَانِ"},
{"ind_3mp", "يَتَفَيْلَقُونَ"},
{"ind_3ms", "يَتَفَيْلَقُ"},
{"past_1p", "تَفَيْلَقْنَا"},
{"past_1s", "تَفَيْلَقْتُ"},
{"past_2d", "تَفَيْلَقْتُمَا"},
{"past_2fp", "تَفَيْلَقْتُنَّ"},
{"past_2fs", "تَفَيْلَقْتِ"},
{"past_2mp", "تَفَيْلَقْتُمْ"},
{"past_2ms", "تَفَيْلَقْتَ"},
{"past_3fd", "تَفَيْلَقَتَا"},
{"past_3fp", "تَفَيْلَقْنَ"},
{"past_3fs", "تَفَيْلَقَتْ"},
{"past_3md", "تَفَيْلَقَا"},
{"past_3mp", "تَفَيْلَقُوا"},
{"past_3ms", "تَفَيْلَقَ"},
},
},
{
label = "تَوَحْوَحَ (p424)", root = "وحوح", wazn = "تفعلل",
forms = {
{"imp_2d", "تَوَحْوَحَا"},
{"imp_2fp", "تَوَحْوَحْنَ"},
{"imp_2fs", "تَوَحْوَحِي"},
{"imp_2mp", "تَوَحْوَحُوا"},
{"imp_2ms", "تَوَحْوَحْ"},
{"ind_1p", "نَتَوَحْوَحُ"},
{"ind_1s", "أَتَوَحْوَحُ"},
{"ind_2d", "تَتَوَحْوَحَانِ"},
{"ind_2fp", "تَتَوَحْوَحْنَ"},
{"ind_2fs", "تَتَوَحْوَحِينَ"},
{"ind_2mp", "تَتَوَحْوَحُونَ"},
{"ind_2ms", "تَتَوَحْوَحُ"},
{"ind_3fd", "تَتَوَحْوَحَانِ"},
{"ind_3fp", "يَتَوَحْوَحْنَ"},
{"ind_3fs", "تَتَوَحْوَحُ"},
{"ind_3md", "يَتَوَحْوَحَانِ"},
{"ind_3mp", "يَتَوَحْوَحُونَ"},
{"ind_3ms", "يَتَوَحْوَحُ"},
{"past_1p", "تَوَحْوَحْنَا"},
{"past_1s", "تَوَحْوَحْتُ"},
{"past_2d", "تَوَحْوَحْتُمَا"},
{"past_2fp", "تَوَحْوَحْتُنَّ"},
{"past_2fs", "تَوَحْوَحْتِ"},
{"past_2mp", "تَوَحْوَحْتُمْ"},
{"past_2ms", "تَوَحْوَحْتَ"},
{"past_3fd", "تَوَحْوَحَتَا"},
{"past_3fp", "تَوَحْوَحْنَ"},
{"past_3fs", "تَوَحْوَحَتْ"},
{"past_3md", "تَوَحْوَحَا"},
{"past_3mp", "تَوَحْوَحُوا"},
{"past_3ms", "تَوَحْوَحَ"},
},
},
{
label = "تَوَلْوَلَ (p424)", root = "ولول", wazn = "تفعلل",
forms = {
{"imp_2d", "تَوَلْوَلَا"},
{"imp_2fp", "تَوَلْوَلْنَ"},
{"imp_2fs", "تَوَلْوَلِي"},
{"imp_2mp", "تَوَلْوَلُوا"},
{"imp_2ms", "تَوَلْوَلْ"},
{"ind_1p", "نَتَوَلْوَلُ"},
{"ind_1s", "أَتَوَلْوَلُ"},
{"ind_2d", "تَتَوَلْوَلَانِ"},
{"ind_2fp", "تَتَوَلْوَلْنَ"},
{"ind_2fs", "تَتَوَلْوَلِينَ"},
{"ind_2mp", "تَتَوَلْوَلُونَ"},
{"ind_2ms", "تَتَوَلْوَلُ"},
{"ind_3fd", "تَتَوَلْوَلَانِ"},
{"ind_3fp", "يَتَوَلْوَلْنَ"},
{"ind_3fs", "تَتَوَلْوَلُ"},
{"ind_3md", "يَتَوَلْوَلَانِ"},
{"ind_3mp", "يَتَوَلْوَلُونَ"},
{"ind_3ms", "يَتَوَلْوَلُ"},
{"past_1p", "تَوَلْوَلْنَا"},
{"past_1s", "تَوَلْوَلْتُ"},
{"past_2d", "تَوَلْوَلْتُمَا"},
{"past_2fp", "تَوَلْوَلْتُنَّ"},
{"past_2fs", "تَوَلْوَلْتِ"},
{"past_2mp", "تَوَلْوَلْتُمْ"},
{"past_2ms", "تَوَلْوَلْتَ"},
{"past_3fd", "تَوَلْوَلَتَا"},
{"past_3fp", "تَوَلْوَلْنَ"},
{"past_3fs", "تَوَلْوَلَتْ"},
{"past_3md", "تَوَلْوَلَا"},
{"past_3mp", "تَوَلْوَلُوا"},
{"past_3ms", "تَوَلْوَلَ"},
},
},
}
th0czcyxlhg7c9e2j624t8yji9sqi2k
1159101
1159043
2026-09-10T19:34:34Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159101
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 15 من 16.
return {
{
label = "اِحْوالَّ (p398)", root = "حول", wazn = "افعالّ",
forms = {
{"imp_2d", "اِحْوَالَّا"},
{"imp_2fp", "اِحْوَالِلْنَ"},
{"imp_2fs", "اِحْوَالِّي"},
{"imp_2mp", "اِحْوَالُّوا"},
{"imp_2ms", "اِحْوَالِلْ"},
{"ind_1p", "نَحْوَالُّ"},
{"ind_1s", "أَحْوَالُّ"},
{"ind_2d", "تَحْوَالَّانِ"},
{"ind_2fp", "تَحْوَالِلْنَ"},
{"ind_2fs", "تَحْوَالِّينَ"},
{"ind_2mp", "تَحْوَالُّونَ"},
{"ind_2ms", "تَحْوَالُّ"},
{"ind_3fd", "تَحْوَالَّانِ"},
{"ind_3fp", "يَحْوَالِلْنَ"},
{"ind_3fs", "تَحْوَالُّ"},
{"ind_3md", "يَحْوَالَّانِ"},
{"ind_3mp", "يَحْوَالُّونَ"},
{"ind_3ms", "يَحْوَالُّ"},
{"past_1p", "اِحْوَالَلْنَا"},
{"past_1s", "اِحْوَالَلْتُ"},
{"past_2d", "اِحْوَالَلْتُمَا"},
{"past_2fp", "اِحْوَالَلْتُنَّ"},
{"past_2fs", "اِحْوَالَلْتِ"},
{"past_2mp", "اِحْوَالَلْتُمْ"},
{"past_2ms", "اِحْوَالَلْتَ"},
{"past_3fd", "اِحْوَالَّتَا"},
{"past_3fp", "اِحْوَالَلْنَ"},
{"past_3fs", "اِحْوَالَّتْ"},
{"past_3md", "اِحْوَالَّا"},
{"past_3mp", "اِحْوَالُّوا"},
{"past_3ms", "اِحْوَالَّ"},
},
},
{
label = "اِزْيانَّ (p398)", root = "زين", wazn = "افعالّ",
forms = {
{"imp_2d", "اِزْيَانَّا"},
{"imp_2fp", "اِزْيَانِنَّ"},
{"imp_2fs", "اِزْيَانِّي"},
{"imp_2mp", "اِزْيَانُّوا"},
{"imp_2ms", "اِزْيَانِنْ"},
{"ind_1p", "نَزْيَانُّ"},
{"ind_1s", "أَزْيَانُّ"},
{"ind_2d", "تَزْيَانَّانِ"},
{"ind_2fp", "تَزْيَانِنَّ"},
{"ind_2fs", "تَزْيَانِّينَ"},
{"ind_2mp", "تَزْيَانُّونَ"},
{"ind_2ms", "تَزْيَانُّ"},
{"ind_3fd", "تَزْيَانَّانِ"},
{"ind_3fp", "يَزْيَانِنَّ"},
{"ind_3fs", "تَزْيَانُّ"},
{"ind_3md", "يَزْيَانَّانِ"},
{"ind_3mp", "يَزْيَانُّونَ"},
{"ind_3ms", "يَزْيَانُّ"},
{"past_1p", "اِزْيَانَنَّا"},
{"past_1s", "اِزْيَانَنْتُ"},
{"past_2d", "اِزْيَانَنْتُمَا"},
{"past_2fp", "اِزْيَانَنْتُنَّ"},
{"past_2fs", "اِزْيَانَنْتِ"},
{"past_2mp", "اِزْيَانَنْتُمْ"},
{"past_2ms", "اِزْيَانَنْتَ"},
{"past_3fd", "اِزْيَانَّتَا"},
{"past_3fp", "اِزْيَانَنَّ"},
{"past_3fs", "اِزْيَانَّتْ"},
{"past_3md", "اِزْيَانَّا"},
{"past_3mp", "اِزْيَانُّوا"},
{"past_3ms", "اِزْيَانَّ"},
},
},
{
label = "اِشْرَوْرَى (p399)", root = "شرو", wazn = "افعوعل",
forms = {
{"imp_2d", "اِشْرَوْرِيَا"},
{"imp_2fp", "اِشْرَوْرِينَ"},
{"imp_2fs", "اِشْرَوْرِي"},
{"imp_2mp", "اِشْرَوْرُوا"},
{"imp_2ms", "اِشْرَوْرِ"},
{"ind_1p", "نَشْرَوْرِي"},
{"ind_1s", "أَشْرَوْرِي"},
{"ind_2d", "تَشْرَوْرِيَانِ"},
{"ind_2fp", "تَشْرَوْرِينَ"},
{"ind_2fs", "تَشْرَوْرِينَ"},
{"ind_2mp", "تَشْرَوْرُونَ"},
{"ind_2ms", "تَشْرَوْرِي"},
{"ind_3fd", "تَشْرَوْرِيَانِ"},
{"ind_3fp", "يَشْرَوْرِينَ"},
{"ind_3fs", "تَشْرَوْرِي"},
{"ind_3md", "يَشْرَوْرِيَانِ"},
{"ind_3mp", "يَشْرَوْرُونَ"},
{"ind_3ms", "يَشْرَوْرِي"},
{"past_1p", "اِشْرَوْرَيْنَا"},
{"past_1s", "اِشْرَوْرَيْتُ"},
{"past_2d", "اِشْرَوْرَيْتُمَا"},
{"past_2fp", "اِشْرَوْرَيْتُنَّ"},
{"past_2fs", "اِشْرَوْرَيْتِ"},
{"past_2mp", "اِشْرَوْرَيْتُمْ"},
{"past_2ms", "اِشْرَوْرَيْتَ"},
{"past_3fd", "اِشْرَوْرَتَا"},
{"past_3fp", "اِشْرَوْرَيْنَ"},
{"past_3fs", "اِشْرَوْرَتْ"},
{"past_3md", "اِشْرَوْرَيَا"},
{"past_3mp", "اِشْرَوْرَوْا"},
{"past_3ms", "اِشْرَوْرَى"},
},
},
{
label = "سَيْطَرَ (p408)", root = "سيطر", wazn = "فعلل",
forms = {
{"imp_2d", "سَيْطِرَا"},
{"imp_2fp", "سَيْطِرْنَ"},
{"imp_2fs", "سَيْطِرِي"},
{"imp_2mp", "سَيْطِرُوا"},
{"imp_2ms", "سَيْطِرْ"},
{"ind_1p", "نُسَيْطِرُ"},
{"ind_1s", "أُسَيْطِرُ"},
{"ind_2d", "تُسَيْطِرَانِ"},
{"ind_2fp", "تُسَيْطِرْنَ"},
{"ind_2fs", "تُسَيْطِرِينَ"},
{"ind_2mp", "تُسَيْطِرُونَ"},
{"ind_2ms", "تُسَيْطِرُ"},
{"ind_3fd", "تُسَيْطِرَانِ"},
{"ind_3fp", "يُسَيْطِرْنَ"},
{"ind_3fs", "تُسَيْطِرُ"},
{"ind_3md", "يُسَيْطِرَانِ"},
{"ind_3mp", "يُسَيْطِرُونَ"},
{"ind_3ms", "يُسَيْطِرُ"},
{"past_1p", "سَيْطَرْنَا"},
{"past_1s", "سَيْطَرْتُ"},
{"past_2d", "سَيْطَرْتُمَا"},
{"past_2fp", "سَيْطَرْتُنَّ"},
{"past_2fs", "سَيْطَرْتِ"},
{"past_2mp", "سَيْطَرْتُمْ"},
{"past_2ms", "سَيْطَرْتَ"},
{"past_3fd", "سَيْطَرَتَا"},
{"past_3fp", "سَيْطَرْنَ"},
{"past_3fs", "سَيْطَرَتْ"},
{"past_3md", "سَيْطَرَا"},
{"past_3mp", "سَيْطَرُوا"},
{"past_3ms", "سَيْطَرَ"},
},
},
{
label = "تَفَيْلَقَ (p422)", root = "فيلق", wazn = "تفعلل",
forms = {
{"imp_2d", "تَفَيْلَقَا"},
{"imp_2fp", "تَفَيْلَقْنَ"},
{"imp_2fs", "تَفَيْلَقِي"},
{"imp_2mp", "تَفَيْلَقُوا"},
{"imp_2ms", "تَفَيْلَقْ"},
{"ind_1p", "نَتَفَيْلَقُ"},
{"ind_1s", "أَتَفَيْلَقُ"},
{"ind_2d", "تَتَفَيْلَقَانِ"},
{"ind_2fp", "تَتَفَيْلَقْنَ"},
{"ind_2fs", "تَتَفَيْلَقِينَ"},
{"ind_2mp", "تَتَفَيْلَقُونَ"},
{"ind_2ms", "تَتَفَيْلَقُ"},
{"ind_3fd", "تَتَفَيْلَقَانِ"},
{"ind_3fp", "يَتَفَيْلَقْنَ"},
{"ind_3fs", "تَتَفَيْلَقُ"},
{"ind_3md", "يَتَفَيْلَقَانِ"},
{"ind_3mp", "يَتَفَيْلَقُونَ"},
{"ind_3ms", "يَتَفَيْلَقُ"},
{"past_1p", "تَفَيْلَقْنَا"},
{"past_1s", "تَفَيْلَقْتُ"},
{"past_2d", "تَفَيْلَقْتُمَا"},
{"past_2fp", "تَفَيْلَقْتُنَّ"},
{"past_2fs", "تَفَيْلَقْتِ"},
{"past_2mp", "تَفَيْلَقْتُمْ"},
{"past_2ms", "تَفَيْلَقْتَ"},
{"past_3fd", "تَفَيْلَقَتَا"},
{"past_3fp", "تَفَيْلَقْنَ"},
{"past_3fs", "تَفَيْلَقَتْ"},
{"past_3md", "تَفَيْلَقَا"},
{"past_3mp", "تَفَيْلَقُوا"},
{"past_3ms", "تَفَيْلَقَ"},
},
},
{
label = "تَوَحْوَحَ (p424)", root = "وحوح", wazn = "تفعلل",
forms = {
{"imp_2d", "تَوَحْوَحَا"},
{"imp_2fp", "تَوَحْوَحْنَ"},
{"imp_2fs", "تَوَحْوَحِي"},
{"imp_2mp", "تَوَحْوَحُوا"},
{"imp_2ms", "تَوَحْوَحْ"},
{"ind_1p", "نَتَوَحْوَحُ"},
{"ind_1s", "أَتَوَحْوَحُ"},
{"ind_2d", "تَتَوَحْوَحَانِ"},
{"ind_2fp", "تَتَوَحْوَحْنَ"},
{"ind_2fs", "تَتَوَحْوَحِينَ"},
{"ind_2mp", "تَتَوَحْوَحُونَ"},
{"ind_2ms", "تَتَوَحْوَحُ"},
{"ind_3fd", "تَتَوَحْوَحَانِ"},
{"ind_3fp", "يَتَوَحْوَحْنَ"},
{"ind_3fs", "تَتَوَحْوَحُ"},
{"ind_3md", "يَتَوَحْوَحَانِ"},
{"ind_3mp", "يَتَوَحْوَحُونَ"},
{"ind_3ms", "يَتَوَحْوَحُ"},
{"past_1p", "تَوَحْوَحْنَا"},
{"past_1s", "تَوَحْوَحْتُ"},
{"past_2d", "تَوَحْوَحْتُمَا"},
{"past_2fp", "تَوَحْوَحْتُنَّ"},
{"past_2fs", "تَوَحْوَحْتِ"},
{"past_2mp", "تَوَحْوَحْتُمْ"},
{"past_2ms", "تَوَحْوَحْتَ"},
{"past_3fd", "تَوَحْوَحَتَا"},
{"past_3fp", "تَوَحْوَحْنَ"},
{"past_3fs", "تَوَحْوَحَتْ"},
{"past_3md", "تَوَحْوَحَا"},
{"past_3mp", "تَوَحْوَحُوا"},
{"past_3ms", "تَوَحْوَحَ"},
},
},
{
label = "تَوَلْوَلَ (p424)", root = "ولول", wazn = "تفعلل",
forms = {
{"imp_2d", "تَوَلْوَلَا"},
{"imp_2fp", "تَوَلْوَلْنَ"},
{"imp_2fs", "تَوَلْوَلِي"},
{"imp_2mp", "تَوَلْوَلُوا"},
{"imp_2ms", "تَوَلْوَلْ"},
{"ind_1p", "نَتَوَلْوَلُ"},
{"ind_1s", "أَتَوَلْوَلُ"},
{"ind_2d", "تَتَوَلْوَلَانِ"},
{"ind_2fp", "تَتَوَلْوَلْنَ"},
{"ind_2fs", "تَتَوَلْوَلِينَ"},
{"ind_2mp", "تَتَوَلْوَلُونَ"},
{"ind_2ms", "تَتَوَلْوَلُ"},
{"ind_3fd", "تَتَوَلْوَلَانِ"},
{"ind_3fp", "يَتَوَلْوَلْنَ"},
{"ind_3fs", "تَتَوَلْوَلُ"},
{"ind_3md", "يَتَوَلْوَلَانِ"},
{"ind_3mp", "يَتَوَلْوَلُونَ"},
{"ind_3ms", "يَتَوَلْوَلُ"},
{"past_1p", "تَوَلْوَلْنَا"},
{"past_1s", "تَوَلْوَلْتُ"},
{"past_2d", "تَوَلْوَلْتُمَا"},
{"past_2fp", "تَوَلْوَلْتُنَّ"},
{"past_2fs", "تَوَلْوَلْتِ"},
{"past_2mp", "تَوَلْوَلْتُمْ"},
{"past_2ms", "تَوَلْوَلْتَ"},
{"past_3fd", "تَوَلْوَلَتَا"},
{"past_3fp", "تَوَلْوَلْنَ"},
{"past_3fs", "تَوَلْوَلَتْ"},
{"past_3md", "تَوَلْوَلَا"},
{"past_3mp", "تَوَلْوَلُوا"},
{"past_3ms", "تَوَلْوَلَ"},
},
},
{
label = "آلَ (p157)", root = "أول", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "أُولَا"},
{"imp_2fp", "أُلْنَ"},
{"imp_2fs", "أُولِي"},
{"imp_2mp", "أُولُوا"},
{"imp_2ms", "أُلْ"},
{"ind_1p", "نَؤُولُ"},
{"ind_1s", "أَؤُولُ"},
{"ind_2d", "تَؤُولَانِ"},
{"ind_2fp", "تَؤُلْنَ"},
{"ind_2fs", "تَؤُولِينَ"},
{"ind_2mp", "تَؤُولُونَ"},
{"ind_2ms", "تَؤُولُ"},
{"ind_3fd", "تَؤُولَانِ"},
{"ind_3fp", "يَؤُلْنَ"},
{"ind_3fs", "تَؤُولُ"},
{"ind_3md", "يَؤُولَانِ"},
{"ind_3mp", "يَؤُولُونَ"},
{"ind_3ms", "يَؤُولُ"},
{"past_1p", "أُلْنَا"},
{"past_1s", "أُلْتُ"},
{"past_2d", "أُلْتُمَا"},
{"past_2fp", "أُلْتُنَّ"},
{"past_2fs", "أُلْتِ"},
{"past_2mp", "أُلْتُمْ"},
{"past_2ms", "أُلْتَ"},
{"past_3fd", "آلَتَا"},
{"past_3fp", "أُلْنَ"},
{"past_3fs", "آلَتْ"},
{"past_3md", "آلَا"},
{"past_3mp", "آلُوا"},
{"past_3ms", "آلَ"},
},
},
{
label = "أَبَتَ (p169)", root = "أبت", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِئْبِتَا"},
{"imp_2fp", "اِئْبِتْنَ"},
{"imp_2fs", "اِئْبِتِي"},
{"imp_2mp", "اِئْبِتُوا"},
{"imp_2ms", "اِئْبِتْ"},
{"ind_1p", "نَأْبِتُ"},
{"ind_1s", "آبِتُ"},
{"ind_2d", "تَأْبِتَانِ"},
{"ind_2fp", "تَأْبِتْنَ"},
{"ind_2fs", "تَأْبِتِينَ"},
{"ind_2mp", "تَأْبِتُونَ"},
{"ind_2ms", "تَأْبِتُ"},
{"ind_3fd", "تَأْبِتَانِ"},
{"ind_3fp", "يَأْبِتْنَ"},
{"ind_3fs", "تَأْبِتُ"},
{"ind_3md", "يَأْبِتَانِ"},
{"ind_3mp", "يَأْبِتُونَ"},
{"ind_3ms", "يَأْبِتُ"},
{"past_1p", "أَبَتْنَا"},
{"past_1s", "أَبَتُّ"},
{"past_2d", "أَبَتُّمَا"},
{"past_2fp", "أَبَتُّنَّ"},
{"past_2fs", "أَبَتِّ"},
{"past_2mp", "أَبَتُّمْ"},
{"past_2ms", "أَبَتَّ"},
{"past_3fp", "أَبَتْنَ"},
{"past_3fs", "أَبَتَتْ"},
{"past_3md", "أَبَتَا"},
{"past_3mp", "أَبَتُوا"},
{"past_3ms", "أَبَتَ"},
},
},
{
label = "يَتَمَ (p174)", root = "يتم", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِيتِمَا"},
{"imp_2fp", "اِيتِمْنَ"},
{"imp_2fs", "اِيتِمِي"},
{"imp_2mp", "اِيتِمُوا"},
{"imp_2ms", "اِيتِمْ"},
{"ind_1p", "نَيْتِمُ"},
{"ind_1s", "أَيْتِمُ"},
{"ind_2d", "تَيْتِمَانِ"},
{"ind_2fp", "تَيْتِمْنَ"},
{"ind_2fs", "تَيْتِمِينَ"},
{"ind_2mp", "تَيْتِمُونَ"},
{"ind_2ms", "تَيْتِمُ"},
{"ind_3fd", "تَيْتِمَانِ"},
{"ind_3fp", "يَيْتِمْنَ"},
{"ind_3fs", "تَيْتِمُ"},
{"ind_3md", "يَيْتِمَانِ"},
{"ind_3mp", "يَيْتِمُونَ"},
{"ind_3ms", "يَيْتِمُ"},
{"past_1p", "يَتَمْنَا"},
{"past_1s", "يَتَمْتُ"},
{"past_2d", "يَتَمْتُمَا"},
{"past_2fp", "يَتَمْتُنَّ"},
{"past_2fs", "يَتَمْتِ"},
{"past_2mp", "يَتَمْتُمْ"},
{"past_2ms", "يَتَمْتَ"},
{"past_3fd", "يَتَمَتَا"},
{"past_3fp", "يَتَمْنَ"},
{"past_3fs", "يَتَمَتْ"},
{"past_3md", "يَتَمَا"},
{"past_3mp", "يَتَمُوا"},
{"past_3ms", "يَتَمَ"},
},
},
{
label = "جاءَ (p176)", root = "جيأ", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "جِيئَا"},
{"imp_2fp", "جِئْنَ"},
{"imp_2fs", "جِيئِي"},
{"imp_2mp", "جِيئُوا"},
{"imp_2ms", "جِئْ"},
{"ind_1p", "نَجِيءُ"},
{"ind_1s", "أَجِيءُ"},
{"ind_2d", "تَجِيئَانِ"},
{"ind_2fp", "تَجِئْنَ"},
{"ind_2fs", "تَجِيئِينَ"},
{"ind_2mp", "تَجِيئُونَ"},
{"ind_2ms", "تَجِيءُ"},
{"ind_3fd", "تَجِيئَانِ"},
{"ind_3fp", "يَجِئْنَ"},
{"ind_3fs", "تَجِيءُ"},
{"ind_3ms", "يَجِيءُ"},
{"past_1p", "جِئْنَا"},
{"past_1s", "جِئْتُ"},
{"past_2d", "جِئْتُمَا"},
{"past_2fp", "جِئْتُنَّ"},
{"past_2fs", "جِئْتِ"},
{"past_2mp", "جِئْتُمْ"},
{"past_2ms", "جِئْتَ"},
{"past_3fd", "جَاءَتَا"},
{"past_3fp", "جِئْنَ"},
{"past_3fs", "جَاءَتْ"},
{"past_3md", "جَاءَا"},
{"past_3mp", "جَاؤُوا"},
{"past_3ms", "جَاءَ"},
},
},
{
label = "مَأَنَ (p194)", root = "مأن", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "اِمْأَنَا"},
{"imp_2fp", "اِمْأَنَّ"},
{"imp_2fs", "اِمْأَنِي"},
{"imp_2mp", "اِمْأَنُوا"},
{"imp_2ms", "اِمْأَنْ"},
{"ind_1p", "نَمْأَنُ"},
{"ind_1s", "أَمْأَنُ"},
{"ind_2d", "تَمْأَنَانِ"},
{"ind_2fp", "تَمْأَنَّ"},
{"ind_2fs", "تَمْأَنِينَ"},
{"ind_2mp", "تَمْأَنُونَ"},
{"ind_2ms", "تَمْأَنُ"},
{"ind_3fd", "تَمْأَنَانِ"},
{"ind_3fp", "يَمْأَنَّ"},
{"ind_3fs", "تَمْأَنُ"},
{"ind_3md", "يَمْأَنَانِ"},
{"ind_3mp", "يَمْأَنُونَ"},
{"ind_3ms", "يَمْأَنُ"},
{"past_1p", "مَأَنَّا"},
{"past_1s", "مَأَنْتُ"},
{"past_2d", "مَأَنْتُمَا"},
{"past_2fp", "مَأَنْتُنَّ"},
{"past_2fs", "مَأَنْتِ"},
{"past_2mp", "مَأَنْتُمْ"},
{"past_2ms", "مَأَنْتَ"},
{"past_3fd", "مَأَنَتَا"},
{"past_3fp", "مَأَنَّ"},
{"past_3fs", "مَأَنَتْ"},
{"past_3md", "مَأَنَا"},
{"past_3mp", "مَأَنُوا"},
{"past_3ms", "مَأَنَ"},
},
},
{
label = "سالَ (p202)", root = "سول", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "سَالَا"},
{"imp_2fp", "سَلْنَ"},
{"imp_2fs", "سَالِي"},
{"imp_2mp", "سَالُوا"},
{"imp_2ms", "سَلْ"},
{"ind_1p", "نَسَالُ"},
{"ind_1s", "أَسَالُ"},
{"ind_2d", "تَسَالَانِ"},
{"ind_2fp", "تَسَلْنَ"},
{"ind_2fs", "تَسَالِينَ"},
{"ind_2mp", "تَسَالُونَ"},
{"ind_2ms", "تَسَالُ"},
{"ind_3fd", "تَسَالَانِ"},
{"ind_3fp", "يَسَلْنَ"},
{"ind_3fs", "تَسَالُ"},
{"ind_3md", "يَسَالَانِ"},
{"ind_3mp", "يَسَالُونَ"},
{"ind_3ms", "يَسَالُ"},
{"past_3fd", "سَالَتَا"},
{"past_3fs", "سَالَتْ"},
{"past_3md", "سَالَا"},
{"past_3mp", "سَالُوا"},
{"past_3ms", "سَالَ"},
},
},
{
label = "عَشَّ (p210)", root = "عشش", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "عُشَّا"},
{"imp_2fp", "اُعْشُشْنَ"},
{"imp_2fs", "عُشِّي"},
{"imp_2mp", "عُشُّوا"},
{"imp_2ms", "عُشَّ"},
{"ind_1p", "نَعُشُّ"},
{"ind_1s", "أَعُشُّ"},
{"ind_2d", "تَعُشَّانِ"},
{"ind_2fp", "تَعْشُشْنَ"},
{"ind_2fs", "تَعُشِّينَ"},
{"ind_2mp", "تَعُشُّونَ"},
{"ind_2ms", "تَعُشُّ"},
{"ind_3fd", "تَعُشَّانِ"},
{"ind_3fp", "يَعْشُشْنَ"},
{"ind_3fs", "تَعُشُّ"},
{"ind_3md", "يَعُشَّانِ"},
{"ind_3mp", "يَعُشُّونَ"},
{"ind_3ms", "يَعُشُّ"},
{"past_1p", "عَشُشْنَا"},
{"past_1s", "عَشُشْتُ"},
{"past_2d", "عَشُشْتُمَا"},
{"past_2fp", "عَشُشْتُنَّ"},
{"past_2fs", "عَشُشْتِ"},
{"past_2mp", "عَشُشْتُمْ"},
{"past_2ms", "عَشُشْتَ"},
{"past_3fd", "عَشَّتَا"},
{"past_3fp", "عَشُشْنَ"},
{"past_3fs", "عَشَّتْ"},
{"past_3md", "عَشَّا"},
{"past_3mp", "عَشُّوا"},
{"past_3ms", "عَشَّ"},
},
},
{
label = "فَكَّ (p210)", root = "فكك", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "فُكَّا"},
{"imp_2fp", "اُفْكُكْنَ"},
{"imp_2fs", "فُكِّي"},
{"imp_2mp", "فُكُّوا"},
{"imp_2ms", "فُكَّ"},
{"ind_1p", "نَفُكُّ"},
{"ind_1s", "أَفُكُّ"},
{"ind_2d", "تَفُكَّانِ"},
{"ind_2fp", "تَفْكُكْنَ"},
{"ind_2fs", "تَفُكِّينَ"},
{"ind_2mp", "تَفُكُّونَ"},
{"ind_2ms", "تَفُكُّ"},
{"ind_3fd", "تَفُكَّانِ"},
{"ind_3fp", "يَفْكُكْنَ"},
{"ind_3fs", "تَفُكُّ"},
{"ind_3md", "يَفُكَّانِ"},
{"ind_3mp", "يَفُكُّونَ"},
{"ind_3ms", "يَفُكُّ"},
{"past_1p", "فَكُكْنَا"},
{"past_1s", "فَكُكْتُ"},
{"past_2d", "فَكُكْتُمَا"},
{"past_2fp", "فَكُكْتُنَّ"},
{"past_2fs", "فَكُكْتِ"},
{"past_2mp", "فَكُكْتُمْ"},
{"past_2ms", "فَكُكْتَ"},
{"past_3fd", "فَكَّتَا"},
{"past_3fp", "فَكُكْنَ"},
{"past_3fs", "فَكَّتْ"},
{"past_3md", "فَكَّا"},
{"past_3mp", "فَكُّوا"},
{"past_3ms", "فَكَّ"},
},
},
{
label = "شَئِزَ (p235)", root = "شئز", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِشْأَزَا"},
{"imp_2fp", "اِشْأَزْنَ"},
{"imp_2fs", "اِشْأَزِي"},
{"imp_2mp", "اِشْأَزُوا"},
{"imp_2ms", "اِشْأَزْ"},
{"ind_1p", "نَشْأَزُ"},
{"ind_1s", "أَشْأَزُ"},
{"ind_2d", "تَشْأَزَانِ"},
{"ind_2fp", "تَشْأَزْنَ"},
{"ind_2fs", "تَشْأَزِينَ"},
{"ind_2mp", "تَشْأَزُونَ"},
{"ind_2ms", "تَشْأَزُ"},
{"ind_3fd", "تَشْأَزَانِ"},
{"ind_3fp", "يَشْأَزْنَ"},
{"ind_3fs", "تَشْأَزُ"},
{"ind_3md", "يَشْأَزَانِ"},
{"ind_3mp", "يَشْأَزُونَ"},
{"ind_3ms", "يَشْأَزُ"},
{"past_1p", "شَئِزْنَا"},
{"past_1s", "شَئِزْتُ"},
{"past_2d", "شَئِزْتُمَا"},
{"past_2fp", "شَئِزْتُنَّ"},
{"past_2fs", "شَئِزْتِ"},
{"past_2mp", "شَئِزْتُمْ"},
{"past_2ms", "شَئِزْتَ"},
{"past_3fd", "شَئِزَتَا"},
{"past_3fp", "شَئِزْنَ"},
{"past_3fs", "شَئِزَتْ"},
{"past_3md", "شَئِزَا"},
{"past_3mp", "شَئِزُوا"},
{"past_3ms", "شَئِزَ"},
},
},
{
label = "وَطِئَ (p240)", root = "وطئ", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "طَآ"},
{"imp_2fp", "طَأْنَ"},
{"imp_2fs", "طَئِي"},
{"imp_2mp", "طَؤُوا"},
{"imp_2ms", "طَأْ"},
{"ind_1p", "نَطَأُ"},
{"ind_1s", "أَطَأُ"},
{"ind_2d", "تَطَآنِ"},
{"ind_2fp", "تَطَأْنَ"},
{"ind_2fs", "تَطَئِينَ"},
{"ind_2mp", "تَطَؤُونَ"},
{"ind_2ms", "تَطَأُ"},
{"ind_3fd", "تَطَآنِ"},
{"ind_3fp", "يَطَأْنَ"},
{"ind_3fs", "تَطَأُ"},
{"ind_3md", "يَطَآنِ"},
{"ind_3mp", "يَطَؤُونَ"},
{"ind_3ms", "يَطَأُ"},
{"past_1p", "وَطِئْنَا"},
{"past_1s", "وَطِئْتُ"},
{"past_2d", "وَطِئْتُمَا"},
{"past_2fp", "وَطِئْتُنَّ"},
{"past_2fs", "وَطِئْتِ"},
{"past_2mp", "وَطِئْتُمْ"},
{"past_2ms", "وَطِئْتَ"},
{"past_3fd", "وَطِئَتَا"},
{"past_3fp", "وَطِئْنَ"},
{"past_3fs", "وَطِئَتْ"},
{"past_3md", "وَطِئَا"},
{"past_3mp", "وَطِئُوا"},
{"past_3ms", "وَطِئَ"},
},
},
{
label = "أَوَّلَ (p268)", root = "أول", wazn = "فعّل",
forms = {
{"imp_2d", "أَوِّلَا"},
{"imp_2fp", "أَوِّلْنَ"},
{"imp_2fs", "أَوِّلِي"},
{"imp_2mp", "أَوِّلُوا"},
{"imp_2ms", "أَوِّلْ"},
{"ind_1p", "نُؤَوِّلُ"},
{"ind_1s", "أُؤَوِّلُ"},
{"ind_2d", "تُؤَوِّلَانِ"},
{"ind_2fp", "تُؤَوِّلْنَ"},
{"ind_2fs", "تُؤَوِّلِينَ"},
{"ind_2mp", "تُؤَوِّلُونَ"},
{"ind_2ms", "تُؤَوِّلُ"},
{"ind_3fd", "تُؤَوِّلَانِ"},
{"ind_3fp", "يُؤَوِّلْنَ"},
{"ind_3fs", "تُؤَوِّلُ"},
{"ind_3md", "يُؤَوِّلَانِ"},
{"ind_3mp", "يُؤَوِّلُونَ"},
{"ind_3ms", "يُؤَوِّلُ"},
{"past_1p", "أَوَّلْنَا"},
{"past_1s", "أَوَّلْتُ"},
{"past_2d", "أَوَّلْتُمَا"},
{"past_2fp", "أَوَّلْتُنَّ"},
{"past_2fs", "أَوَّلْتِ"},
{"past_2mp", "أَوَّلْتُمْ"},
{"past_2ms", "أَوَّلْتَ"},
{"past_3fd", "أَوَّلَتَا"},
{"past_3fp", "أَوَّلْنَ"},
{"past_3fs", "أَوَّلَتْ"},
{"past_3md", "أَوَّلَا"},
{"past_3mp", "أَوَّلُوا"},
{"past_3ms", "أَوَّلَ"},
},
},
{
label = "ضَوَّأَ (p269)", root = "ضوء", wazn = "فعّل",
forms = {
{"imp_2d", "ضَوِّئَا"},
{"imp_2fp", "ضَوِّئْنَ"},
{"imp_2fs", "ضَوِّئِي"},
{"imp_2mp", "ضَوِّئُوا"},
{"imp_2ms", "ضَوِّئْ"},
{"ind_1p", "نُضَوِّئُ"},
{"ind_1s", "أُضَوِّئُ"},
{"ind_2d", "تُضَوِّئَانِ"},
{"ind_2fp", "تُضَوِّئْنَ"},
{"ind_2fs", "تُضَوِّئِينَ"},
{"ind_2mp", "تُضَوِّئُونَ"},
{"ind_2ms", "تُضَوِّئُ"},
{"ind_3fd", "تُضَوِّئَانِ"},
{"ind_3fp", "يُضَوِّئْنَ"},
{"ind_3fs", "تُضَوِّئُ"},
{"ind_3md", "يُضَوِّئَانِ"},
{"ind_3mp", "يُضَوِّئُونَ"},
{"ind_3ms", "يُضَوِّئُ"},
{"past_1p", "ضَوَّأْنَا"},
{"past_1s", "ضَوَّأْتُ"},
{"past_2d", "ضَوَّأْتُمَا"},
{"past_2fp", "ضَوَّأْتُنَّ"},
{"past_2fs", "ضَوَّأْتِ"},
{"past_2mp", "ضَوَّأْتُمْ"},
{"past_2ms", "ضَوَّأْتَ"},
{"past_3fd", "ضَوَّأَتَا"},
{"past_3fp", "ضَوَّأْنَ"},
{"past_3fs", "ضَوَّأَتْ"},
{"past_3md", "ضَوَّآ"},
{"past_3mp", "ضَوَّؤُوا"},
{"past_3ms", "ضَوَّأَ"},
},
},
{
label = "عالَلَ (p277)", root = "علل", wazn = "فاعل",
forms = {
{"imp_2d", "عَالِلَا"},
{"imp_2fp", "عَالِلْنَ"},
{"imp_2fs", "عَالِلِي"},
{"imp_2mp", "عَالِلُوا"},
{"imp_2ms", "عَالِلْ"},
{"ind_1p", "نُعَالِلُ"},
{"ind_1s", "أُعَالِلُ"},
{"ind_2d", "تُعَالِلَانِ"},
{"ind_2fp", "تُعَالِلْنَ"},
{"ind_2fs", "تُعَالِلِينَ"},
{"ind_2mp", "تُعَالِلُونَ"},
{"ind_2ms", "تُعَالِلُ"},
{"ind_3fd", "تُعَالِلَانِ"},
{"ind_3fp", "يُعَالِلْنَ"},
{"ind_3fs", "تُعَالِلُ"},
{"ind_3md", "يُعَالِلَانِ"},
{"ind_3mp", "يُعَالِلُونَ"},
{"ind_3ms", "يُعَالِلُ"},
{"past_1p", "عَالَلْنَا"},
{"past_1s", "عَالَلْتُ"},
{"past_2d", "عَالَلْتُمَا"},
{"past_2fp", "عَالَلْتُنَّ"},
{"past_2fs", "عَالَلْتِ"},
{"past_2mp", "عَالَلْتُمْ"},
{"past_2ms", "عَالَلْتَ"},
{"past_3fd", "عَالَلَتَا"},
{"past_3fp", "عَالَلْنَ"},
{"past_3fs", "عَالَلَتْ"},
{"past_3md", "عَالَلَا"},
{"past_3mp", "عَالَلُوا"},
{"past_3ms", "عَالَلَ"},
},
},
{
label = "ناوَأَ (p283)", root = "نوأ", wazn = "فاعل",
forms = {
{"imp_2d", "نَاوِئَا"},
{"imp_2fp", "نَاوِئْنَ"},
{"imp_2fs", "نَاوِئِي"},
{"imp_2mp", "نَاوِئُوا"},
{"imp_2ms", "نَاوِئْ"},
{"ind_1p", "نُنَاوِئُ"},
{"ind_1s", "أُنَاوِئُ"},
{"ind_2d", "تُنَاوِئَانِ"},
{"ind_2fp", "تُنَاوِئْنَ"},
{"ind_2fs", "تُنَاوِئِينَ"},
{"ind_2mp", "تُنَاوِئُونَ"},
{"ind_2ms", "تُنَاوِئُ"},
{"ind_3fd", "تُنَاوِئَانِ"},
{"ind_3fp", "يُنَاوِئْنَ"},
{"ind_3fs", "تُنَاوِئُ"},
{"ind_3md", "يُنَاوِئَانِ"},
{"ind_3mp", "يُنَاوِئُونَ"},
{"ind_3ms", "يُنَاوِئُ"},
{"past_1p", "نَاوَأْنَا"},
{"past_1s", "نَاوَأْتُ"},
{"past_2d", "نَاوَأْتُمَا"},
{"past_2fp", "نَاوَأْتُنَّ"},
{"past_2fs", "نَاوَأْتِ"},
{"past_2mp", "نَاوَأْتُمْ"},
{"past_2ms", "نَاوَأْتَ"},
{"past_3fd", "نَاوَأَتَا"},
{"past_3fp", "نَاوَأْنَ"},
{"past_3fs", "نَاوَأَتْ"},
{"past_3md", "نَاوَآ"},
{"past_3mp", "نَاوَؤُوا"},
{"past_3ms", "نَاوَأَ"},
},
},
{
label = "واخَى (p286)", root = "وخي", wazn = "فاعل",
forms = {
{"imp_2d", "وَاخِيَا"},
{"imp_2fp", "وَاخِينَ"},
{"imp_2fs", "وَاخِي"},
{"imp_2mp", "وَاخُوا"},
{"imp_2ms", "وَاخِ"},
{"ind_1p", "نُوَاخِي"},
{"ind_1s", "أُوَاخِي"},
{"ind_2d", "تُوَاخِيَانِ"},
{"ind_2fp", "تُوَاخِينَ"},
{"ind_2fs", "تُوَاخِينَ"},
{"ind_2mp", "تُوَاخُونَ"},
{"ind_2ms", "تُوَاخِي"},
{"ind_3fd", "تُوَاخِيَانِ"},
{"ind_3fp", "يُوَاخِينَ"},
{"ind_3fs", "تُوَاخِي"},
{"ind_3md", "يُوَاخِيَانِ"},
{"ind_3mp", "يُوَاخُونَ"},
{"ind_3ms", "يُوَاخِي"},
{"past_1p", "وَاخَيْنَا"},
{"past_1s", "وَاخَيْتُ"},
{"past_2d", "وَاخَيْتُمَا"},
{"past_2fp", "وَاخَيْتُنَّ"},
{"past_2fs", "وَاخَيْتِ"},
{"past_2mp", "وَاخَيْتُمْ"},
{"past_2ms", "وَاخَيْتَ"},
{"past_3fd", "وَاخَتَا"},
{"past_3fp", "وَاخَيْنَ"},
{"past_3fs", "وَاخَتْ"},
{"past_3md", "وَاخَيَا"},
{"past_3mp", "وَاخَوْا"},
{"past_3ms", "وَاخَى"},
},
},
{
label = "أَثْأَرَ (p293)", root = "ثأر", wazn = "أفعل",
forms = {
{"imp_2d", "أَثْئِرَا"},
{"imp_2fp", "أَثْئِرْنَ"},
{"imp_2fs", "أَثْئِرِي"},
{"imp_2mp", "أَثْئِرُوا"},
{"imp_2ms", "أَثْئِرْ"},
{"ind_1p", "نُثْئِرُ"},
{"ind_1s", "أُثْئِرُ"},
{"ind_2d", "تُثْئِرَانِ"},
{"ind_2fp", "تُثْئِرْنَ"},
{"ind_2fs", "تُثْئِرِينَ"},
{"ind_2mp", "تُثْئِرُونَ"},
{"ind_2ms", "تُثْئِرُ"},
{"ind_3fd", "تُثْئِرَانِ"},
{"ind_3fp", "يُثْئِرْنَ"},
{"ind_3fs", "تُثْئِرُ"},
{"ind_3md", "يُثْئِرَانِ"},
{"ind_3mp", "يُثْئِرُونَ"},
{"ind_3ms", "يُثْئِرُ"},
{"past_1p", "أَثْأَرْنَا"},
{"past_1s", "أَثْأَرْتُ"},
{"past_2d", "أَثْأَرْتُمَا"},
{"past_2fp", "أَثْأَرْتُنَّ"},
{"past_2fs", "أَثْأَرْتِ"},
{"past_2mp", "أَثْأَرْتُمْ"},
{"past_2ms", "أَثْأَرْتَ"},
{"past_3fd", "أَثْأَرَتَا"},
{"past_3fp", "أَثْأَرْنَ"},
{"past_3fs", "أَثْأَرَتْ"},
{"past_3md", "أَثْأَرَا"},
{"past_3mp", "أَثْأَرُوا"},
{"past_3ms", "أَثْأَرَ"},
},
},
{
label = "أَنْيَأَ (p298)", root = "نيأ", wazn = "أفعل",
forms = {
{"imp_2d", "أَنْيِئَا"},
{"imp_2fp", "أَنْيِئْنَ"},
{"imp_2fs", "أَنْيِئِي"},
{"imp_2mp", "أَنْيِئُوا"},
{"imp_2ms", "أَنْيِئْ"},
{"ind_1p", "نُنْيِئُ"},
{"ind_1s", "أُنْيِئُ"},
{"ind_2d", "تُنْيِئَانِ"},
{"ind_2fp", "تُنْيِئْنَ"},
{"ind_2fs", "تُنْيِئِينَ"},
{"ind_2mp", "تُنْيِئُونَ"},
{"ind_2ms", "تُنْيِئُ"},
{"ind_3fd", "تُنْيِئَانِ"},
{"ind_3fp", "يُنْيِئْنَ"},
{"ind_3fs", "تُنْيِئُ"},
{"ind_3md", "يُنْيِئَانِ"},
{"ind_3mp", "يُنْيِئُونَ"},
{"ind_3ms", "يُنْيِئُ"},
{"past_1p", "أَنْيَأْنَا"},
{"past_1s", "أَنْيَأْتُ"},
{"past_2d", "أَنْيَأْتُمَا"},
{"past_2fp", "أَنْيَأْتُنَّ"},
{"past_2fs", "أَنْيَأْتِ"},
{"past_2mp", "أَنْيَأْتُمْ"},
{"past_2ms", "أَنْيَأْتَ"},
{"past_3fd", "أَنْيَأَتَا"},
{"past_3fp", "أَنْيَأْنَ"},
{"past_3fs", "أَنْيَأَتْ"},
{"past_3md", "أَنْيَآ"},
{"past_3mp", "أَنْيَؤُوا"},
{"past_3ms", "أَنْيَأَ"},
},
},
{
label = "أَرَى ، أَرْأَى (p300)", root = "رأو", wazn = "أفعل",
forms = {
{"imp_2d", "أَرِيَا"},
{"imp_2fp", "أَرِينَ"},
{"imp_2fs", "أَرِي"},
{"imp_2mp", "أَرُوا"},
{"imp_2ms", "أَرِ"},
{"ind_1p", "نُرِي"},
{"ind_1s", "أُرِي"},
{"ind_2d", "تُرِيَانِ"},
{"ind_2fp", "تُرِينَ"},
{"ind_2fs", "تُرِينَ"},
{"ind_2mp", "تُرُونَ"},
{"ind_2ms", "تُرِي"},
{"ind_3fd", "تُرِيَانِ"},
{"ind_3fp", "يُرِينَ"},
{"ind_3fs", "تُرِي"},
{"ind_3md", "يُرِيَانِ"},
{"ind_3mp", "يُرُونَ"},
{"ind_3ms", "يُرِي"},
{"past_1p", "أَرَيْنَا"},
{"past_1s", "أَرَيْتُ"},
{"past_2d", "أَرَيْتُمَا"},
{"past_2fp", "أَرَيْتُنَّ"},
{"past_2fs", "أَرَيْتِ"},
{"past_2mp", "أَرَيْتُمْ"},
{"past_2ms", "أَرَيْتَ"},
{"past_3fd", "أَرَتَا"},
{"past_3fp", "أَرَيْنَ"},
{"past_3fs", "أَرَتْ"},
{"past_3md", "أَرَيَا"},
{"past_3mp", "أَرَوْا"},
{"past_3ms", "أَرَى"},
},
},
{
label = "أَوْدَى (p301)", root = "ودي", wazn = "أفعل",
forms = {
{"imp_2d", "أَوْدِيَا"},
{"imp_2fp", "أَوْدِينَ"},
{"imp_2fs", "أَوْدِي"},
{"imp_2mp", "أَوْدُوا"},
{"imp_2ms", "أَوْدِ"},
{"ind_1p", "نُودِي"},
{"ind_1s", "أُودِي"},
{"ind_2d", "تُودِيَانِ"},
{"ind_2fp", "تُودِينَ"},
{"ind_2fs", "تُودِينَ"},
{"ind_2mp", "تُودُونَ"},
{"ind_2ms", "تُودِي"},
{"ind_3fd", "تُودِيَانِ"},
{"ind_3fp", "يُودِينَ"},
{"ind_3fs", "تُودِي"},
{"ind_3md", "يُودِيَانِ"},
{"ind_3mp", "يُودُونَ"},
{"ind_3ms", "يُودِي"},
{"past_1p", "أَوْدَيْنَا"},
{"past_1s", "أَوْدَيْتُ"},
{"past_2d", "أَوْدَيْتُمَا"},
{"past_2fp", "أَوْدَيْتُنَّ"},
{"past_2fs", "أَوْدَيْتِ"},
{"past_2mp", "أَوْدَيْتُمْ"},
{"past_2ms", "أَوْدَيْتَ"},
{"past_3fd", "أَوْدَتَا"},
{"past_3fp", "أَوْدَيْنَ"},
{"past_3fs", "أَوْدَتْ"},
{"past_3md", "أَوْدَيَا"},
{"past_3mp", "أَوْدَوْا"},
{"past_3ms", "أَوْدَى"},
},
},
{
label = "تَآدَى (p331)", root = "أدي", wazn = "تفاعل",
forms = {
{"imp_2d", "تَآدَيَا"},
{"imp_2fp", "تَآدَيْنَ"},
{"imp_2fs", "تَآدَيْ"},
{"imp_2mp", "تَآدَوْا"},
{"imp_2ms", "تَآدَ"},
{"ind_1p", "نَتَآدَى"},
{"ind_1s", "أَتَآدَى"},
{"ind_2d", "تَتَآدَيَانِ"},
{"ind_2fp", "تَتَآدَيْنَ"},
{"ind_2fs", "تَتَآدَيْنَ"},
{"ind_2mp", "تَتَآدَوْنَ"},
{"ind_2ms", "تَتَآدَى"},
{"ind_3fd", "تَتَآدَيَانِ"},
{"ind_3fp", "يَتَآدَيْنَ"},
{"ind_3fs", "تَتَآدَى"},
{"ind_3md", "يَتَآدَيَانِ"},
{"ind_3mp", "يَتَآدَوْنَ"},
{"ind_3ms", "يَتَآدَى"},
{"past_1p", "تَآدَيْنَا"},
{"past_1s", "تَآدَيْتُ"},
{"past_2d", "تَآدَيْتُمَا"},
{"past_2fp", "تَآدَيْتُنَّ"},
{"past_2fs", "تَآدَيْتِ"},
{"past_2mp", "تَآدَيْتُمْ"},
{"past_2ms", "تَآدَيْتَ"},
{"past_3fd", "تَآدَتَا"},
{"past_3fp", "تَآدَيْنَ"},
{"past_3fs", "تَآدَتْ"},
{"past_3md", "تَآدَيَا"},
{"past_3mp", "تَآدَوْا"},
{"past_3ms", "تَآدَى"},
},
},
{
label = "تَراءَى (p334)", root = "رأو", wazn = "تفاعل",
forms = {
{"imp_2d", "تَرَاءَيَا"},
{"imp_2fp", "تَرَاءَيْنَ"},
{"imp_2fs", "تَرَاءَيْ"},
{"imp_2mp", "تَرَاءَوْا"},
{"imp_2ms", "تَرَاءَ"},
{"ind_1p", "نَتَرَاءَى"},
{"ind_1s", "أَتَرَاءَى"},
{"ind_2d", "تَتَرَاءَيَانِ"},
{"ind_2fp", "تَتَرَاءَيْنَ"},
{"ind_2fs", "تَتَرَاءَيْنَ"},
{"ind_2mp", "تَتَرَاءَوْنَ"},
{"ind_2ms", "تَتَرَاءَى"},
{"ind_3fd", "تَتَرَاءَيَانِ"},
{"ind_3fp", "يَتَرَاءَيْنَ"},
{"ind_3fs", "تَتَرَاءَى"},
{"ind_3md", "يَتَرَاءَيَانِ"},
{"ind_3mp", "يَتَرَاءَوْنَ"},
{"ind_3ms", "يَتَرَاءَى"},
{"past_1p", "تَرَاءَيْنَا"},
{"past_1s", "تَرَاءَيْتُ"},
{"past_2d", "تَرَاءَيْتُمَا"},
{"past_2fp", "تَرَاءَيْتُنَّ"},
{"past_2fs", "تَرَاءَيْتِ"},
{"past_2mp", "تَرَاءَيْتُمْ"},
{"past_2ms", "تَرَاءَيْتَ"},
{"past_3fd", "تَرَاءَتَا"},
{"past_3fp", "تَرَاءَيْنَ"},
{"past_3fs", "تَرَاءَتْ"},
{"past_3md", "تَرَاءَيَا"},
{"past_3mp", "تَرَاءَوْا"},
{"past_3ms", "تَرَاءَى"},
},
},
{
label = "تَشاءَى (p334)", root = "شأو", wazn = "تفاعل",
forms = {
{"imp_2d", "تَشَاءَيَا"},
{"imp_2fp", "تَشَاءَيْنَ"},
{"imp_2fs", "تَشَاءَيْ"},
{"imp_2mp", "تَشَاءَوْا"},
{"imp_2ms", "تَشَاءَ"},
{"ind_1p", "نَتَشَاءَى"},
{"ind_1s", "أَتَشَاءَى"},
{"ind_2d", "تَتَشَاءَيَانِ"},
{"ind_2fp", "تَتَشَاءَيْنَ"},
{"ind_2fs", "تَتَشَاءَيْنَ"},
{"ind_2mp", "تَتَشَاءَوْنَ"},
{"ind_2ms", "تَتَشَاءَى"},
{"ind_3fd", "تَتَشَاءَيَانِ"},
{"ind_3fp", "يَتَشَاءَيْنَ"},
{"ind_3fs", "تَتَشَاءَى"},
{"ind_3md", "يَتَشَاءَيَانِ"},
{"ind_3mp", "يَتَشَاءَوْنَ"},
{"ind_3ms", "يَتَشَاءَى"},
{"past_1p", "تَشَاءَيْنَا"},
{"past_1s", "تَشَاءَيْتُ"},
{"past_2d", "تَشَاءَيْتُمَا"},
{"past_2fp", "تَشَاءَيْتُنَّ"},
{"past_2fs", "تَشَاءَيْتِ"},
{"past_2mp", "تَشَاءَيْتُمْ"},
{"past_2ms", "تَشَاءَيْتَ"},
{"past_3fd", "تَشَاءَتَا"},
{"past_3fp", "تَشَاءَيْنَ"},
{"past_3fs", "تَشَاءَتْ"},
{"past_3md", "تَشَاءَيَا"},
{"past_3mp", "تَشَاءَوْا"},
{"past_3ms", "تَشَاءَى"},
},
},
{
label = "تَوَايَلَ (p336)", root = "ويل", wazn = "تفاعل",
forms = {
{"imp_2d", "تَوَايَلَا"},
{"imp_2fp", "تَوَايَلْنَ"},
{"imp_2fs", "تَوَايَلِي"},
{"imp_2mp", "تَوَايَلُوا"},
{"imp_2ms", "تَوَايَلْ"},
{"ind_1p", "نَتَوَايَلُ"},
{"ind_1s", "أَتَوَايَلُ"},
{"ind_2d", "تَتَوَايَلَانِ"},
{"ind_2fp", "تَتَوَايَلْنَ"},
{"ind_2fs", "تَتَوَايَلِينَ"},
{"ind_2mp", "تَتَوَايَلُونَ"},
{"ind_2ms", "تَتَوَايَلُ"},
{"ind_3fd", "تَتَوَايَلَانِ"},
{"ind_3fp", "يَتَوَايَلْنَ"},
{"ind_3fs", "تَتَوَايَلُ"},
{"ind_3md", "يَتَوَايَلَانِ"},
{"ind_3mp", "يَتَوَايَلُونَ"},
{"ind_3ms", "يَتَوَايَلُ"},
{"past_1p", "تَوَايَلْنَا"},
{"past_1s", "تَوَايَلْتُ"},
{"past_2d", "تَوَايَلْتُمَا"},
{"past_2fp", "تَوَايَلْتُنَّ"},
{"past_2fs", "تَوَايَلْتِ"},
{"past_2mp", "تَوَايَلْتُمْ"},
{"past_2ms", "تَوَايَلْتَ"},
{"past_3fd", "تَوَايَلَتَا"},
{"past_3fp", "تَوَايَلْنَ"},
{"past_3fs", "تَوَايَلَتْ"},
{"past_3md", "تَوَايَلَا"},
{"past_3mp", "تَوَايَلُوا"},
{"past_3ms", "تَوَايَلَ"},
},
},
}
mrutdlj1tmyxzvodzsmo2qd7kfgdum5
1159109
1159101
2026-09-10T20:49:10Z
ForzaGreen
28665
إغلاق الاكتشاف ١٩: سالَ (نموذج ١٣٦) — صيغة الماضي المختصرة بالفتح إلى جانب الكسر، وفق حاشية الصفحة ٢٠٢
1159109
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 15 من 16.
return {
{
label = "اِحْوالَّ (p398)", root = "حول", wazn = "افعالّ",
forms = {
{"imp_2d", "اِحْوَالَّا"},
{"imp_2fp", "اِحْوَالِلْنَ"},
{"imp_2fs", "اِحْوَالِّي"},
{"imp_2mp", "اِحْوَالُّوا"},
{"imp_2ms", "اِحْوَالِلْ"},
{"ind_1p", "نَحْوَالُّ"},
{"ind_1s", "أَحْوَالُّ"},
{"ind_2d", "تَحْوَالَّانِ"},
{"ind_2fp", "تَحْوَالِلْنَ"},
{"ind_2fs", "تَحْوَالِّينَ"},
{"ind_2mp", "تَحْوَالُّونَ"},
{"ind_2ms", "تَحْوَالُّ"},
{"ind_3fd", "تَحْوَالَّانِ"},
{"ind_3fp", "يَحْوَالِلْنَ"},
{"ind_3fs", "تَحْوَالُّ"},
{"ind_3md", "يَحْوَالَّانِ"},
{"ind_3mp", "يَحْوَالُّونَ"},
{"ind_3ms", "يَحْوَالُّ"},
{"past_1p", "اِحْوَالَلْنَا"},
{"past_1s", "اِحْوَالَلْتُ"},
{"past_2d", "اِحْوَالَلْتُمَا"},
{"past_2fp", "اِحْوَالَلْتُنَّ"},
{"past_2fs", "اِحْوَالَلْتِ"},
{"past_2mp", "اِحْوَالَلْتُمْ"},
{"past_2ms", "اِحْوَالَلْتَ"},
{"past_3fd", "اِحْوَالَّتَا"},
{"past_3fp", "اِحْوَالَلْنَ"},
{"past_3fs", "اِحْوَالَّتْ"},
{"past_3md", "اِحْوَالَّا"},
{"past_3mp", "اِحْوَالُّوا"},
{"past_3ms", "اِحْوَالَّ"},
},
},
{
label = "اِزْيانَّ (p398)", root = "زين", wazn = "افعالّ",
forms = {
{"imp_2d", "اِزْيَانَّا"},
{"imp_2fp", "اِزْيَانِنَّ"},
{"imp_2fs", "اِزْيَانِّي"},
{"imp_2mp", "اِزْيَانُّوا"},
{"imp_2ms", "اِزْيَانِنْ"},
{"ind_1p", "نَزْيَانُّ"},
{"ind_1s", "أَزْيَانُّ"},
{"ind_2d", "تَزْيَانَّانِ"},
{"ind_2fp", "تَزْيَانِنَّ"},
{"ind_2fs", "تَزْيَانِّينَ"},
{"ind_2mp", "تَزْيَانُّونَ"},
{"ind_2ms", "تَزْيَانُّ"},
{"ind_3fd", "تَزْيَانَّانِ"},
{"ind_3fp", "يَزْيَانِنَّ"},
{"ind_3fs", "تَزْيَانُّ"},
{"ind_3md", "يَزْيَانَّانِ"},
{"ind_3mp", "يَزْيَانُّونَ"},
{"ind_3ms", "يَزْيَانُّ"},
{"past_1p", "اِزْيَانَنَّا"},
{"past_1s", "اِزْيَانَنْتُ"},
{"past_2d", "اِزْيَانَنْتُمَا"},
{"past_2fp", "اِزْيَانَنْتُنَّ"},
{"past_2fs", "اِزْيَانَنْتِ"},
{"past_2mp", "اِزْيَانَنْتُمْ"},
{"past_2ms", "اِزْيَانَنْتَ"},
{"past_3fd", "اِزْيَانَّتَا"},
{"past_3fp", "اِزْيَانَنَّ"},
{"past_3fs", "اِزْيَانَّتْ"},
{"past_3md", "اِزْيَانَّا"},
{"past_3mp", "اِزْيَانُّوا"},
{"past_3ms", "اِزْيَانَّ"},
},
},
{
label = "اِشْرَوْرَى (p399)", root = "شرو", wazn = "افعوعل",
forms = {
{"imp_2d", "اِشْرَوْرِيَا"},
{"imp_2fp", "اِشْرَوْرِينَ"},
{"imp_2fs", "اِشْرَوْرِي"},
{"imp_2mp", "اِشْرَوْرُوا"},
{"imp_2ms", "اِشْرَوْرِ"},
{"ind_1p", "نَشْرَوْرِي"},
{"ind_1s", "أَشْرَوْرِي"},
{"ind_2d", "تَشْرَوْرِيَانِ"},
{"ind_2fp", "تَشْرَوْرِينَ"},
{"ind_2fs", "تَشْرَوْرِينَ"},
{"ind_2mp", "تَشْرَوْرُونَ"},
{"ind_2ms", "تَشْرَوْرِي"},
{"ind_3fd", "تَشْرَوْرِيَانِ"},
{"ind_3fp", "يَشْرَوْرِينَ"},
{"ind_3fs", "تَشْرَوْرِي"},
{"ind_3md", "يَشْرَوْرِيَانِ"},
{"ind_3mp", "يَشْرَوْرُونَ"},
{"ind_3ms", "يَشْرَوْرِي"},
{"past_1p", "اِشْرَوْرَيْنَا"},
{"past_1s", "اِشْرَوْرَيْتُ"},
{"past_2d", "اِشْرَوْرَيْتُمَا"},
{"past_2fp", "اِشْرَوْرَيْتُنَّ"},
{"past_2fs", "اِشْرَوْرَيْتِ"},
{"past_2mp", "اِشْرَوْرَيْتُمْ"},
{"past_2ms", "اِشْرَوْرَيْتَ"},
{"past_3fd", "اِشْرَوْرَتَا"},
{"past_3fp", "اِشْرَوْرَيْنَ"},
{"past_3fs", "اِشْرَوْرَتْ"},
{"past_3md", "اِشْرَوْرَيَا"},
{"past_3mp", "اِشْرَوْرَوْا"},
{"past_3ms", "اِشْرَوْرَى"},
},
},
{
label = "سَيْطَرَ (p408)", root = "سيطر", wazn = "فعلل",
forms = {
{"imp_2d", "سَيْطِرَا"},
{"imp_2fp", "سَيْطِرْنَ"},
{"imp_2fs", "سَيْطِرِي"},
{"imp_2mp", "سَيْطِرُوا"},
{"imp_2ms", "سَيْطِرْ"},
{"ind_1p", "نُسَيْطِرُ"},
{"ind_1s", "أُسَيْطِرُ"},
{"ind_2d", "تُسَيْطِرَانِ"},
{"ind_2fp", "تُسَيْطِرْنَ"},
{"ind_2fs", "تُسَيْطِرِينَ"},
{"ind_2mp", "تُسَيْطِرُونَ"},
{"ind_2ms", "تُسَيْطِرُ"},
{"ind_3fd", "تُسَيْطِرَانِ"},
{"ind_3fp", "يُسَيْطِرْنَ"},
{"ind_3fs", "تُسَيْطِرُ"},
{"ind_3md", "يُسَيْطِرَانِ"},
{"ind_3mp", "يُسَيْطِرُونَ"},
{"ind_3ms", "يُسَيْطِرُ"},
{"past_1p", "سَيْطَرْنَا"},
{"past_1s", "سَيْطَرْتُ"},
{"past_2d", "سَيْطَرْتُمَا"},
{"past_2fp", "سَيْطَرْتُنَّ"},
{"past_2fs", "سَيْطَرْتِ"},
{"past_2mp", "سَيْطَرْتُمْ"},
{"past_2ms", "سَيْطَرْتَ"},
{"past_3fd", "سَيْطَرَتَا"},
{"past_3fp", "سَيْطَرْنَ"},
{"past_3fs", "سَيْطَرَتْ"},
{"past_3md", "سَيْطَرَا"},
{"past_3mp", "سَيْطَرُوا"},
{"past_3ms", "سَيْطَرَ"},
},
},
{
label = "تَفَيْلَقَ (p422)", root = "فيلق", wazn = "تفعلل",
forms = {
{"imp_2d", "تَفَيْلَقَا"},
{"imp_2fp", "تَفَيْلَقْنَ"},
{"imp_2fs", "تَفَيْلَقِي"},
{"imp_2mp", "تَفَيْلَقُوا"},
{"imp_2ms", "تَفَيْلَقْ"},
{"ind_1p", "نَتَفَيْلَقُ"},
{"ind_1s", "أَتَفَيْلَقُ"},
{"ind_2d", "تَتَفَيْلَقَانِ"},
{"ind_2fp", "تَتَفَيْلَقْنَ"},
{"ind_2fs", "تَتَفَيْلَقِينَ"},
{"ind_2mp", "تَتَفَيْلَقُونَ"},
{"ind_2ms", "تَتَفَيْلَقُ"},
{"ind_3fd", "تَتَفَيْلَقَانِ"},
{"ind_3fp", "يَتَفَيْلَقْنَ"},
{"ind_3fs", "تَتَفَيْلَقُ"},
{"ind_3md", "يَتَفَيْلَقَانِ"},
{"ind_3mp", "يَتَفَيْلَقُونَ"},
{"ind_3ms", "يَتَفَيْلَقُ"},
{"past_1p", "تَفَيْلَقْنَا"},
{"past_1s", "تَفَيْلَقْتُ"},
{"past_2d", "تَفَيْلَقْتُمَا"},
{"past_2fp", "تَفَيْلَقْتُنَّ"},
{"past_2fs", "تَفَيْلَقْتِ"},
{"past_2mp", "تَفَيْلَقْتُمْ"},
{"past_2ms", "تَفَيْلَقْتَ"},
{"past_3fd", "تَفَيْلَقَتَا"},
{"past_3fp", "تَفَيْلَقْنَ"},
{"past_3fs", "تَفَيْلَقَتْ"},
{"past_3md", "تَفَيْلَقَا"},
{"past_3mp", "تَفَيْلَقُوا"},
{"past_3ms", "تَفَيْلَقَ"},
},
},
{
label = "تَوَحْوَحَ (p424)", root = "وحوح", wazn = "تفعلل",
forms = {
{"imp_2d", "تَوَحْوَحَا"},
{"imp_2fp", "تَوَحْوَحْنَ"},
{"imp_2fs", "تَوَحْوَحِي"},
{"imp_2mp", "تَوَحْوَحُوا"},
{"imp_2ms", "تَوَحْوَحْ"},
{"ind_1p", "نَتَوَحْوَحُ"},
{"ind_1s", "أَتَوَحْوَحُ"},
{"ind_2d", "تَتَوَحْوَحَانِ"},
{"ind_2fp", "تَتَوَحْوَحْنَ"},
{"ind_2fs", "تَتَوَحْوَحِينَ"},
{"ind_2mp", "تَتَوَحْوَحُونَ"},
{"ind_2ms", "تَتَوَحْوَحُ"},
{"ind_3fd", "تَتَوَحْوَحَانِ"},
{"ind_3fp", "يَتَوَحْوَحْنَ"},
{"ind_3fs", "تَتَوَحْوَحُ"},
{"ind_3md", "يَتَوَحْوَحَانِ"},
{"ind_3mp", "يَتَوَحْوَحُونَ"},
{"ind_3ms", "يَتَوَحْوَحُ"},
{"past_1p", "تَوَحْوَحْنَا"},
{"past_1s", "تَوَحْوَحْتُ"},
{"past_2d", "تَوَحْوَحْتُمَا"},
{"past_2fp", "تَوَحْوَحْتُنَّ"},
{"past_2fs", "تَوَحْوَحْتِ"},
{"past_2mp", "تَوَحْوَحْتُمْ"},
{"past_2ms", "تَوَحْوَحْتَ"},
{"past_3fd", "تَوَحْوَحَتَا"},
{"past_3fp", "تَوَحْوَحْنَ"},
{"past_3fs", "تَوَحْوَحَتْ"},
{"past_3md", "تَوَحْوَحَا"},
{"past_3mp", "تَوَحْوَحُوا"},
{"past_3ms", "تَوَحْوَحَ"},
},
},
{
label = "تَوَلْوَلَ (p424)", root = "ولول", wazn = "تفعلل",
forms = {
{"imp_2d", "تَوَلْوَلَا"},
{"imp_2fp", "تَوَلْوَلْنَ"},
{"imp_2fs", "تَوَلْوَلِي"},
{"imp_2mp", "تَوَلْوَلُوا"},
{"imp_2ms", "تَوَلْوَلْ"},
{"ind_1p", "نَتَوَلْوَلُ"},
{"ind_1s", "أَتَوَلْوَلُ"},
{"ind_2d", "تَتَوَلْوَلَانِ"},
{"ind_2fp", "تَتَوَلْوَلْنَ"},
{"ind_2fs", "تَتَوَلْوَلِينَ"},
{"ind_2mp", "تَتَوَلْوَلُونَ"},
{"ind_2ms", "تَتَوَلْوَلُ"},
{"ind_3fd", "تَتَوَلْوَلَانِ"},
{"ind_3fp", "يَتَوَلْوَلْنَ"},
{"ind_3fs", "تَتَوَلْوَلُ"},
{"ind_3md", "يَتَوَلْوَلَانِ"},
{"ind_3mp", "يَتَوَلْوَلُونَ"},
{"ind_3ms", "يَتَوَلْوَلُ"},
{"past_1p", "تَوَلْوَلْنَا"},
{"past_1s", "تَوَلْوَلْتُ"},
{"past_2d", "تَوَلْوَلْتُمَا"},
{"past_2fp", "تَوَلْوَلْتُنَّ"},
{"past_2fs", "تَوَلْوَلْتِ"},
{"past_2mp", "تَوَلْوَلْتُمْ"},
{"past_2ms", "تَوَلْوَلْتَ"},
{"past_3fd", "تَوَلْوَلَتَا"},
{"past_3fp", "تَوَلْوَلْنَ"},
{"past_3fs", "تَوَلْوَلَتْ"},
{"past_3md", "تَوَلْوَلَا"},
{"past_3mp", "تَوَلْوَلُوا"},
{"past_3ms", "تَوَلْوَلَ"},
},
},
{
label = "آلَ (p157)", root = "أول", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "أُولَا"},
{"imp_2fp", "أُلْنَ"},
{"imp_2fs", "أُولِي"},
{"imp_2mp", "أُولُوا"},
{"imp_2ms", "أُلْ"},
{"ind_1p", "نَؤُولُ"},
{"ind_1s", "أَؤُولُ"},
{"ind_2d", "تَؤُولَانِ"},
{"ind_2fp", "تَؤُلْنَ"},
{"ind_2fs", "تَؤُولِينَ"},
{"ind_2mp", "تَؤُولُونَ"},
{"ind_2ms", "تَؤُولُ"},
{"ind_3fd", "تَؤُولَانِ"},
{"ind_3fp", "يَؤُلْنَ"},
{"ind_3fs", "تَؤُولُ"},
{"ind_3md", "يَؤُولَانِ"},
{"ind_3mp", "يَؤُولُونَ"},
{"ind_3ms", "يَؤُولُ"},
{"past_1p", "أُلْنَا"},
{"past_1s", "أُلْتُ"},
{"past_2d", "أُلْتُمَا"},
{"past_2fp", "أُلْتُنَّ"},
{"past_2fs", "أُلْتِ"},
{"past_2mp", "أُلْتُمْ"},
{"past_2ms", "أُلْتَ"},
{"past_3fd", "آلَتَا"},
{"past_3fp", "أُلْنَ"},
{"past_3fs", "آلَتْ"},
{"past_3md", "آلَا"},
{"past_3mp", "آلُوا"},
{"past_3ms", "آلَ"},
},
},
{
label = "أَبَتَ (p169)", root = "أبت", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِئْبِتَا"},
{"imp_2fp", "اِئْبِتْنَ"},
{"imp_2fs", "اِئْبِتِي"},
{"imp_2mp", "اِئْبِتُوا"},
{"imp_2ms", "اِئْبِتْ"},
{"ind_1p", "نَأْبِتُ"},
{"ind_1s", "آبِتُ"},
{"ind_2d", "تَأْبِتَانِ"},
{"ind_2fp", "تَأْبِتْنَ"},
{"ind_2fs", "تَأْبِتِينَ"},
{"ind_2mp", "تَأْبِتُونَ"},
{"ind_2ms", "تَأْبِتُ"},
{"ind_3fd", "تَأْبِتَانِ"},
{"ind_3fp", "يَأْبِتْنَ"},
{"ind_3fs", "تَأْبِتُ"},
{"ind_3md", "يَأْبِتَانِ"},
{"ind_3mp", "يَأْبِتُونَ"},
{"ind_3ms", "يَأْبِتُ"},
{"past_1p", "أَبَتْنَا"},
{"past_1s", "أَبَتُّ"},
{"past_2d", "أَبَتُّمَا"},
{"past_2fp", "أَبَتُّنَّ"},
{"past_2fs", "أَبَتِّ"},
{"past_2mp", "أَبَتُّمْ"},
{"past_2ms", "أَبَتَّ"},
{"past_3fp", "أَبَتْنَ"},
{"past_3fs", "أَبَتَتْ"},
{"past_3md", "أَبَتَا"},
{"past_3mp", "أَبَتُوا"},
{"past_3ms", "أَبَتَ"},
},
},
{
label = "يَتَمَ (p174)", root = "يتم", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "اِيتِمَا"},
{"imp_2fp", "اِيتِمْنَ"},
{"imp_2fs", "اِيتِمِي"},
{"imp_2mp", "اِيتِمُوا"},
{"imp_2ms", "اِيتِمْ"},
{"ind_1p", "نَيْتِمُ"},
{"ind_1s", "أَيْتِمُ"},
{"ind_2d", "تَيْتِمَانِ"},
{"ind_2fp", "تَيْتِمْنَ"},
{"ind_2fs", "تَيْتِمِينَ"},
{"ind_2mp", "تَيْتِمُونَ"},
{"ind_2ms", "تَيْتِمُ"},
{"ind_3fd", "تَيْتِمَانِ"},
{"ind_3fp", "يَيْتِمْنَ"},
{"ind_3fs", "تَيْتِمُ"},
{"ind_3md", "يَيْتِمَانِ"},
{"ind_3mp", "يَيْتِمُونَ"},
{"ind_3ms", "يَيْتِمُ"},
{"past_1p", "يَتَمْنَا"},
{"past_1s", "يَتَمْتُ"},
{"past_2d", "يَتَمْتُمَا"},
{"past_2fp", "يَتَمْتُنَّ"},
{"past_2fs", "يَتَمْتِ"},
{"past_2mp", "يَتَمْتُمْ"},
{"past_2ms", "يَتَمْتَ"},
{"past_3fd", "يَتَمَتَا"},
{"past_3fp", "يَتَمْنَ"},
{"past_3fs", "يَتَمَتْ"},
{"past_3md", "يَتَمَا"},
{"past_3mp", "يَتَمُوا"},
{"past_3ms", "يَتَمَ"},
},
},
{
label = "جاءَ (p176)", root = "جيأ", wazn = "فعَل يفعِل",
forms = {
{"imp_2d", "جِيئَا"},
{"imp_2fp", "جِئْنَ"},
{"imp_2fs", "جِيئِي"},
{"imp_2mp", "جِيئُوا"},
{"imp_2ms", "جِئْ"},
{"ind_1p", "نَجِيءُ"},
{"ind_1s", "أَجِيءُ"},
{"ind_2d", "تَجِيئَانِ"},
{"ind_2fp", "تَجِئْنَ"},
{"ind_2fs", "تَجِيئِينَ"},
{"ind_2mp", "تَجِيئُونَ"},
{"ind_2ms", "تَجِيءُ"},
{"ind_3fd", "تَجِيئَانِ"},
{"ind_3fp", "يَجِئْنَ"},
{"ind_3fs", "تَجِيءُ"},
{"ind_3ms", "يَجِيءُ"},
{"past_1p", "جِئْنَا"},
{"past_1s", "جِئْتُ"},
{"past_2d", "جِئْتُمَا"},
{"past_2fp", "جِئْتُنَّ"},
{"past_2fs", "جِئْتِ"},
{"past_2mp", "جِئْتُمْ"},
{"past_2ms", "جِئْتَ"},
{"past_3fd", "جَاءَتَا"},
{"past_3fp", "جِئْنَ"},
{"past_3fs", "جَاءَتْ"},
{"past_3md", "جَاءَا"},
{"past_3mp", "جَاؤُوا"},
{"past_3ms", "جَاءَ"},
},
},
{
label = "مَأَنَ (p194)", root = "مأن", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "اِمْأَنَا"},
{"imp_2fp", "اِمْأَنَّ"},
{"imp_2fs", "اِمْأَنِي"},
{"imp_2mp", "اِمْأَنُوا"},
{"imp_2ms", "اِمْأَنْ"},
{"ind_1p", "نَمْأَنُ"},
{"ind_1s", "أَمْأَنُ"},
{"ind_2d", "تَمْأَنَانِ"},
{"ind_2fp", "تَمْأَنَّ"},
{"ind_2fs", "تَمْأَنِينَ"},
{"ind_2mp", "تَمْأَنُونَ"},
{"ind_2ms", "تَمْأَنُ"},
{"ind_3fd", "تَمْأَنَانِ"},
{"ind_3fp", "يَمْأَنَّ"},
{"ind_3fs", "تَمْأَنُ"},
{"ind_3md", "يَمْأَنَانِ"},
{"ind_3mp", "يَمْأَنُونَ"},
{"ind_3ms", "يَمْأَنُ"},
{"past_1p", "مَأَنَّا"},
{"past_1s", "مَأَنْتُ"},
{"past_2d", "مَأَنْتُمَا"},
{"past_2fp", "مَأَنْتُنَّ"},
{"past_2fs", "مَأَنْتِ"},
{"past_2mp", "مَأَنْتُمْ"},
{"past_2ms", "مَأَنْتَ"},
{"past_3fd", "مَأَنَتَا"},
{"past_3fp", "مَأَنَّ"},
{"past_3fs", "مَأَنَتْ"},
{"past_3md", "مَأَنَا"},
{"past_3mp", "مَأَنُوا"},
{"past_3ms", "مَأَنَ"},
},
},
{
label = "سالَ (p202)", root = "سول", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "سَالَا"},
{"imp_2fp", "سَلْنَ"},
{"imp_2fs", "سَالِي"},
{"imp_2mp", "سَالُوا"},
{"imp_2ms", "سَلْ"},
{"ind_1p", "نَسَالُ"},
{"ind_1s", "أَسَالُ"},
{"ind_2d", "تَسَالَانِ"},
{"ind_2fp", "تَسَلْنَ"},
{"ind_2fs", "تَسَالِينَ"},
{"ind_2mp", "تَسَالُونَ"},
{"ind_2ms", "تَسَالُ"},
{"ind_3fd", "تَسَالَانِ"},
{"ind_3fp", "يَسَلْنَ"},
{"ind_3fs", "تَسَالُ"},
{"ind_3md", "يَسَالَانِ"},
{"ind_3mp", "يَسَالُونَ"},
{"ind_3ms", "يَسَالُ"},
{"past_1p", "سَلْنَا"},
{"past_1s", "سَلْتُ"},
{"past_2d", "سَلْتُمَا"},
{"past_2fp", "سَلْتُنَّ"},
{"past_2fs", "سَلْتِ"},
{"past_2mp", "سَلْتُمْ"},
{"past_2ms", "سَلْتَ"},
{"past_3fd", "سَالَتَا"},
{"past_3fp", "سَلْنَ"},
{"past_3fs", "سَالَتْ"},
{"past_3md", "سَالَا"},
{"past_3mp", "سَالُوا"},
{"past_3ms", "سَالَ"},
},
},
{
label = "عَشَّ (p210)", root = "عشش", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "عُشَّا"},
{"imp_2fp", "اُعْشُشْنَ"},
{"imp_2fs", "عُشِّي"},
{"imp_2mp", "عُشُّوا"},
{"imp_2ms", "عُشَّ"},
{"ind_1p", "نَعُشُّ"},
{"ind_1s", "أَعُشُّ"},
{"ind_2d", "تَعُشَّانِ"},
{"ind_2fp", "تَعْشُشْنَ"},
{"ind_2fs", "تَعُشِّينَ"},
{"ind_2mp", "تَعُشُّونَ"},
{"ind_2ms", "تَعُشُّ"},
{"ind_3fd", "تَعُشَّانِ"},
{"ind_3fp", "يَعْشُشْنَ"},
{"ind_3fs", "تَعُشُّ"},
{"ind_3md", "يَعُشَّانِ"},
{"ind_3mp", "يَعُشُّونَ"},
{"ind_3ms", "يَعُشُّ"},
{"past_1p", "عَشُشْنَا"},
{"past_1s", "عَشُشْتُ"},
{"past_2d", "عَشُشْتُمَا"},
{"past_2fp", "عَشُشْتُنَّ"},
{"past_2fs", "عَشُشْتِ"},
{"past_2mp", "عَشُشْتُمْ"},
{"past_2ms", "عَشُشْتَ"},
{"past_3fd", "عَشَّتَا"},
{"past_3fp", "عَشُشْنَ"},
{"past_3fs", "عَشَّتْ"},
{"past_3md", "عَشَّا"},
{"past_3mp", "عَشُّوا"},
{"past_3ms", "عَشَّ"},
},
},
{
label = "فَكَّ (p210)", root = "فكك", wazn = "فعَل يفعُل",
forms = {
{"imp_2d", "فُكَّا"},
{"imp_2fp", "اُفْكُكْنَ"},
{"imp_2fs", "فُكِّي"},
{"imp_2mp", "فُكُّوا"},
{"imp_2ms", "فُكَّ"},
{"ind_1p", "نَفُكُّ"},
{"ind_1s", "أَفُكُّ"},
{"ind_2d", "تَفُكَّانِ"},
{"ind_2fp", "تَفْكُكْنَ"},
{"ind_2fs", "تَفُكِّينَ"},
{"ind_2mp", "تَفُكُّونَ"},
{"ind_2ms", "تَفُكُّ"},
{"ind_3fd", "تَفُكَّانِ"},
{"ind_3fp", "يَفْكُكْنَ"},
{"ind_3fs", "تَفُكُّ"},
{"ind_3md", "يَفُكَّانِ"},
{"ind_3mp", "يَفُكُّونَ"},
{"ind_3ms", "يَفُكُّ"},
{"past_1p", "فَكُكْنَا"},
{"past_1s", "فَكُكْتُ"},
{"past_2d", "فَكُكْتُمَا"},
{"past_2fp", "فَكُكْتُنَّ"},
{"past_2fs", "فَكُكْتِ"},
{"past_2mp", "فَكُكْتُمْ"},
{"past_2ms", "فَكُكْتَ"},
{"past_3fd", "فَكَّتَا"},
{"past_3fp", "فَكُكْنَ"},
{"past_3fs", "فَكَّتْ"},
{"past_3md", "فَكَّا"},
{"past_3mp", "فَكُّوا"},
{"past_3ms", "فَكَّ"},
},
},
{
label = "شَئِزَ (p235)", root = "شئز", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "اِشْأَزَا"},
{"imp_2fp", "اِشْأَزْنَ"},
{"imp_2fs", "اِشْأَزِي"},
{"imp_2mp", "اِشْأَزُوا"},
{"imp_2ms", "اِشْأَزْ"},
{"ind_1p", "نَشْأَزُ"},
{"ind_1s", "أَشْأَزُ"},
{"ind_2d", "تَشْأَزَانِ"},
{"ind_2fp", "تَشْأَزْنَ"},
{"ind_2fs", "تَشْأَزِينَ"},
{"ind_2mp", "تَشْأَزُونَ"},
{"ind_2ms", "تَشْأَزُ"},
{"ind_3fd", "تَشْأَزَانِ"},
{"ind_3fp", "يَشْأَزْنَ"},
{"ind_3fs", "تَشْأَزُ"},
{"ind_3md", "يَشْأَزَانِ"},
{"ind_3mp", "يَشْأَزُونَ"},
{"ind_3ms", "يَشْأَزُ"},
{"past_1p", "شَئِزْنَا"},
{"past_1s", "شَئِزْتُ"},
{"past_2d", "شَئِزْتُمَا"},
{"past_2fp", "شَئِزْتُنَّ"},
{"past_2fs", "شَئِزْتِ"},
{"past_2mp", "شَئِزْتُمْ"},
{"past_2ms", "شَئِزْتَ"},
{"past_3fd", "شَئِزَتَا"},
{"past_3fp", "شَئِزْنَ"},
{"past_3fs", "شَئِزَتْ"},
{"past_3md", "شَئِزَا"},
{"past_3mp", "شَئِزُوا"},
{"past_3ms", "شَئِزَ"},
},
},
{
label = "وَطِئَ (p240)", root = "وطئ", wazn = "فعِل يفعَل",
forms = {
{"imp_2d", "طَآ"},
{"imp_2fp", "طَأْنَ"},
{"imp_2fs", "طَئِي"},
{"imp_2mp", "طَؤُوا"},
{"imp_2ms", "طَأْ"},
{"ind_1p", "نَطَأُ"},
{"ind_1s", "أَطَأُ"},
{"ind_2d", "تَطَآنِ"},
{"ind_2fp", "تَطَأْنَ"},
{"ind_2fs", "تَطَئِينَ"},
{"ind_2mp", "تَطَؤُونَ"},
{"ind_2ms", "تَطَأُ"},
{"ind_3fd", "تَطَآنِ"},
{"ind_3fp", "يَطَأْنَ"},
{"ind_3fs", "تَطَأُ"},
{"ind_3md", "يَطَآنِ"},
{"ind_3mp", "يَطَؤُونَ"},
{"ind_3ms", "يَطَأُ"},
{"past_1p", "وَطِئْنَا"},
{"past_1s", "وَطِئْتُ"},
{"past_2d", "وَطِئْتُمَا"},
{"past_2fp", "وَطِئْتُنَّ"},
{"past_2fs", "وَطِئْتِ"},
{"past_2mp", "وَطِئْتُمْ"},
{"past_2ms", "وَطِئْتَ"},
{"past_3fd", "وَطِئَتَا"},
{"past_3fp", "وَطِئْنَ"},
{"past_3fs", "وَطِئَتْ"},
{"past_3md", "وَطِئَا"},
{"past_3mp", "وَطِئُوا"},
{"past_3ms", "وَطِئَ"},
},
},
{
label = "أَوَّلَ (p268)", root = "أول", wazn = "فعّل",
forms = {
{"imp_2d", "أَوِّلَا"},
{"imp_2fp", "أَوِّلْنَ"},
{"imp_2fs", "أَوِّلِي"},
{"imp_2mp", "أَوِّلُوا"},
{"imp_2ms", "أَوِّلْ"},
{"ind_1p", "نُؤَوِّلُ"},
{"ind_1s", "أُؤَوِّلُ"},
{"ind_2d", "تُؤَوِّلَانِ"},
{"ind_2fp", "تُؤَوِّلْنَ"},
{"ind_2fs", "تُؤَوِّلِينَ"},
{"ind_2mp", "تُؤَوِّلُونَ"},
{"ind_2ms", "تُؤَوِّلُ"},
{"ind_3fd", "تُؤَوِّلَانِ"},
{"ind_3fp", "يُؤَوِّلْنَ"},
{"ind_3fs", "تُؤَوِّلُ"},
{"ind_3md", "يُؤَوِّلَانِ"},
{"ind_3mp", "يُؤَوِّلُونَ"},
{"ind_3ms", "يُؤَوِّلُ"},
{"past_1p", "أَوَّلْنَا"},
{"past_1s", "أَوَّلْتُ"},
{"past_2d", "أَوَّلْتُمَا"},
{"past_2fp", "أَوَّلْتُنَّ"},
{"past_2fs", "أَوَّلْتِ"},
{"past_2mp", "أَوَّلْتُمْ"},
{"past_2ms", "أَوَّلْتَ"},
{"past_3fd", "أَوَّلَتَا"},
{"past_3fp", "أَوَّلْنَ"},
{"past_3fs", "أَوَّلَتْ"},
{"past_3md", "أَوَّلَا"},
{"past_3mp", "أَوَّلُوا"},
{"past_3ms", "أَوَّلَ"},
},
},
{
label = "ضَوَّأَ (p269)", root = "ضوء", wazn = "فعّل",
forms = {
{"imp_2d", "ضَوِّئَا"},
{"imp_2fp", "ضَوِّئْنَ"},
{"imp_2fs", "ضَوِّئِي"},
{"imp_2mp", "ضَوِّئُوا"},
{"imp_2ms", "ضَوِّئْ"},
{"ind_1p", "نُضَوِّئُ"},
{"ind_1s", "أُضَوِّئُ"},
{"ind_2d", "تُضَوِّئَانِ"},
{"ind_2fp", "تُضَوِّئْنَ"},
{"ind_2fs", "تُضَوِّئِينَ"},
{"ind_2mp", "تُضَوِّئُونَ"},
{"ind_2ms", "تُضَوِّئُ"},
{"ind_3fd", "تُضَوِّئَانِ"},
{"ind_3fp", "يُضَوِّئْنَ"},
{"ind_3fs", "تُضَوِّئُ"},
{"ind_3md", "يُضَوِّئَانِ"},
{"ind_3mp", "يُضَوِّئُونَ"},
{"ind_3ms", "يُضَوِّئُ"},
{"past_1p", "ضَوَّأْنَا"},
{"past_1s", "ضَوَّأْتُ"},
{"past_2d", "ضَوَّأْتُمَا"},
{"past_2fp", "ضَوَّأْتُنَّ"},
{"past_2fs", "ضَوَّأْتِ"},
{"past_2mp", "ضَوَّأْتُمْ"},
{"past_2ms", "ضَوَّأْتَ"},
{"past_3fd", "ضَوَّأَتَا"},
{"past_3fp", "ضَوَّأْنَ"},
{"past_3fs", "ضَوَّأَتْ"},
{"past_3md", "ضَوَّآ"},
{"past_3mp", "ضَوَّؤُوا"},
{"past_3ms", "ضَوَّأَ"},
},
},
{
label = "عالَلَ (p277)", root = "علل", wazn = "فاعل",
forms = {
{"imp_2d", "عَالِلَا"},
{"imp_2fp", "عَالِلْنَ"},
{"imp_2fs", "عَالِلِي"},
{"imp_2mp", "عَالِلُوا"},
{"imp_2ms", "عَالِلْ"},
{"ind_1p", "نُعَالِلُ"},
{"ind_1s", "أُعَالِلُ"},
{"ind_2d", "تُعَالِلَانِ"},
{"ind_2fp", "تُعَالِلْنَ"},
{"ind_2fs", "تُعَالِلِينَ"},
{"ind_2mp", "تُعَالِلُونَ"},
{"ind_2ms", "تُعَالِلُ"},
{"ind_3fd", "تُعَالِلَانِ"},
{"ind_3fp", "يُعَالِلْنَ"},
{"ind_3fs", "تُعَالِلُ"},
{"ind_3md", "يُعَالِلَانِ"},
{"ind_3mp", "يُعَالِلُونَ"},
{"ind_3ms", "يُعَالِلُ"},
{"past_1p", "عَالَلْنَا"},
{"past_1s", "عَالَلْتُ"},
{"past_2d", "عَالَلْتُمَا"},
{"past_2fp", "عَالَلْتُنَّ"},
{"past_2fs", "عَالَلْتِ"},
{"past_2mp", "عَالَلْتُمْ"},
{"past_2ms", "عَالَلْتَ"},
{"past_3fd", "عَالَلَتَا"},
{"past_3fp", "عَالَلْنَ"},
{"past_3fs", "عَالَلَتْ"},
{"past_3md", "عَالَلَا"},
{"past_3mp", "عَالَلُوا"},
{"past_3ms", "عَالَلَ"},
},
},
{
label = "ناوَأَ (p283)", root = "نوأ", wazn = "فاعل",
forms = {
{"imp_2d", "نَاوِئَا"},
{"imp_2fp", "نَاوِئْنَ"},
{"imp_2fs", "نَاوِئِي"},
{"imp_2mp", "نَاوِئُوا"},
{"imp_2ms", "نَاوِئْ"},
{"ind_1p", "نُنَاوِئُ"},
{"ind_1s", "أُنَاوِئُ"},
{"ind_2d", "تُنَاوِئَانِ"},
{"ind_2fp", "تُنَاوِئْنَ"},
{"ind_2fs", "تُنَاوِئِينَ"},
{"ind_2mp", "تُنَاوِئُونَ"},
{"ind_2ms", "تُنَاوِئُ"},
{"ind_3fd", "تُنَاوِئَانِ"},
{"ind_3fp", "يُنَاوِئْنَ"},
{"ind_3fs", "تُنَاوِئُ"},
{"ind_3md", "يُنَاوِئَانِ"},
{"ind_3mp", "يُنَاوِئُونَ"},
{"ind_3ms", "يُنَاوِئُ"},
{"past_1p", "نَاوَأْنَا"},
{"past_1s", "نَاوَأْتُ"},
{"past_2d", "نَاوَأْتُمَا"},
{"past_2fp", "نَاوَأْتُنَّ"},
{"past_2fs", "نَاوَأْتِ"},
{"past_2mp", "نَاوَأْتُمْ"},
{"past_2ms", "نَاوَأْتَ"},
{"past_3fd", "نَاوَأَتَا"},
{"past_3fp", "نَاوَأْنَ"},
{"past_3fs", "نَاوَأَتْ"},
{"past_3md", "نَاوَآ"},
{"past_3mp", "نَاوَؤُوا"},
{"past_3ms", "نَاوَأَ"},
},
},
{
label = "واخَى (p286)", root = "وخي", wazn = "فاعل",
forms = {
{"imp_2d", "وَاخِيَا"},
{"imp_2fp", "وَاخِينَ"},
{"imp_2fs", "وَاخِي"},
{"imp_2mp", "وَاخُوا"},
{"imp_2ms", "وَاخِ"},
{"ind_1p", "نُوَاخِي"},
{"ind_1s", "أُوَاخِي"},
{"ind_2d", "تُوَاخِيَانِ"},
{"ind_2fp", "تُوَاخِينَ"},
{"ind_2fs", "تُوَاخِينَ"},
{"ind_2mp", "تُوَاخُونَ"},
{"ind_2ms", "تُوَاخِي"},
{"ind_3fd", "تُوَاخِيَانِ"},
{"ind_3fp", "يُوَاخِينَ"},
{"ind_3fs", "تُوَاخِي"},
{"ind_3md", "يُوَاخِيَانِ"},
{"ind_3mp", "يُوَاخُونَ"},
{"ind_3ms", "يُوَاخِي"},
{"past_1p", "وَاخَيْنَا"},
{"past_1s", "وَاخَيْتُ"},
{"past_2d", "وَاخَيْتُمَا"},
{"past_2fp", "وَاخَيْتُنَّ"},
{"past_2fs", "وَاخَيْتِ"},
{"past_2mp", "وَاخَيْتُمْ"},
{"past_2ms", "وَاخَيْتَ"},
{"past_3fd", "وَاخَتَا"},
{"past_3fp", "وَاخَيْنَ"},
{"past_3fs", "وَاخَتْ"},
{"past_3md", "وَاخَيَا"},
{"past_3mp", "وَاخَوْا"},
{"past_3ms", "وَاخَى"},
},
},
{
label = "أَثْأَرَ (p293)", root = "ثأر", wazn = "أفعل",
forms = {
{"imp_2d", "أَثْئِرَا"},
{"imp_2fp", "أَثْئِرْنَ"},
{"imp_2fs", "أَثْئِرِي"},
{"imp_2mp", "أَثْئِرُوا"},
{"imp_2ms", "أَثْئِرْ"},
{"ind_1p", "نُثْئِرُ"},
{"ind_1s", "أُثْئِرُ"},
{"ind_2d", "تُثْئِرَانِ"},
{"ind_2fp", "تُثْئِرْنَ"},
{"ind_2fs", "تُثْئِرِينَ"},
{"ind_2mp", "تُثْئِرُونَ"},
{"ind_2ms", "تُثْئِرُ"},
{"ind_3fd", "تُثْئِرَانِ"},
{"ind_3fp", "يُثْئِرْنَ"},
{"ind_3fs", "تُثْئِرُ"},
{"ind_3md", "يُثْئِرَانِ"},
{"ind_3mp", "يُثْئِرُونَ"},
{"ind_3ms", "يُثْئِرُ"},
{"past_1p", "أَثْأَرْنَا"},
{"past_1s", "أَثْأَرْتُ"},
{"past_2d", "أَثْأَرْتُمَا"},
{"past_2fp", "أَثْأَرْتُنَّ"},
{"past_2fs", "أَثْأَرْتِ"},
{"past_2mp", "أَثْأَرْتُمْ"},
{"past_2ms", "أَثْأَرْتَ"},
{"past_3fd", "أَثْأَرَتَا"},
{"past_3fp", "أَثْأَرْنَ"},
{"past_3fs", "أَثْأَرَتْ"},
{"past_3md", "أَثْأَرَا"},
{"past_3mp", "أَثْأَرُوا"},
{"past_3ms", "أَثْأَرَ"},
},
},
{
label = "أَنْيَأَ (p298)", root = "نيأ", wazn = "أفعل",
forms = {
{"imp_2d", "أَنْيِئَا"},
{"imp_2fp", "أَنْيِئْنَ"},
{"imp_2fs", "أَنْيِئِي"},
{"imp_2mp", "أَنْيِئُوا"},
{"imp_2ms", "أَنْيِئْ"},
{"ind_1p", "نُنْيِئُ"},
{"ind_1s", "أُنْيِئُ"},
{"ind_2d", "تُنْيِئَانِ"},
{"ind_2fp", "تُنْيِئْنَ"},
{"ind_2fs", "تُنْيِئِينَ"},
{"ind_2mp", "تُنْيِئُونَ"},
{"ind_2ms", "تُنْيِئُ"},
{"ind_3fd", "تُنْيِئَانِ"},
{"ind_3fp", "يُنْيِئْنَ"},
{"ind_3fs", "تُنْيِئُ"},
{"ind_3md", "يُنْيِئَانِ"},
{"ind_3mp", "يُنْيِئُونَ"},
{"ind_3ms", "يُنْيِئُ"},
{"past_1p", "أَنْيَأْنَا"},
{"past_1s", "أَنْيَأْتُ"},
{"past_2d", "أَنْيَأْتُمَا"},
{"past_2fp", "أَنْيَأْتُنَّ"},
{"past_2fs", "أَنْيَأْتِ"},
{"past_2mp", "أَنْيَأْتُمْ"},
{"past_2ms", "أَنْيَأْتَ"},
{"past_3fd", "أَنْيَأَتَا"},
{"past_3fp", "أَنْيَأْنَ"},
{"past_3fs", "أَنْيَأَتْ"},
{"past_3md", "أَنْيَآ"},
{"past_3mp", "أَنْيَؤُوا"},
{"past_3ms", "أَنْيَأَ"},
},
},
{
label = "أَرَى ، أَرْأَى (p300)", root = "رأو", wazn = "أفعل",
forms = {
{"imp_2d", "أَرِيَا"},
{"imp_2fp", "أَرِينَ"},
{"imp_2fs", "أَرِي"},
{"imp_2mp", "أَرُوا"},
{"imp_2ms", "أَرِ"},
{"ind_1p", "نُرِي"},
{"ind_1s", "أُرِي"},
{"ind_2d", "تُرِيَانِ"},
{"ind_2fp", "تُرِينَ"},
{"ind_2fs", "تُرِينَ"},
{"ind_2mp", "تُرُونَ"},
{"ind_2ms", "تُرِي"},
{"ind_3fd", "تُرِيَانِ"},
{"ind_3fp", "يُرِينَ"},
{"ind_3fs", "تُرِي"},
{"ind_3md", "يُرِيَانِ"},
{"ind_3mp", "يُرُونَ"},
{"ind_3ms", "يُرِي"},
{"past_1p", "أَرَيْنَا"},
{"past_1s", "أَرَيْتُ"},
{"past_2d", "أَرَيْتُمَا"},
{"past_2fp", "أَرَيْتُنَّ"},
{"past_2fs", "أَرَيْتِ"},
{"past_2mp", "أَرَيْتُمْ"},
{"past_2ms", "أَرَيْتَ"},
{"past_3fd", "أَرَتَا"},
{"past_3fp", "أَرَيْنَ"},
{"past_3fs", "أَرَتْ"},
{"past_3md", "أَرَيَا"},
{"past_3mp", "أَرَوْا"},
{"past_3ms", "أَرَى"},
},
},
{
label = "أَوْدَى (p301)", root = "ودي", wazn = "أفعل",
forms = {
{"imp_2d", "أَوْدِيَا"},
{"imp_2fp", "أَوْدِينَ"},
{"imp_2fs", "أَوْدِي"},
{"imp_2mp", "أَوْدُوا"},
{"imp_2ms", "أَوْدِ"},
{"ind_1p", "نُودِي"},
{"ind_1s", "أُودِي"},
{"ind_2d", "تُودِيَانِ"},
{"ind_2fp", "تُودِينَ"},
{"ind_2fs", "تُودِينَ"},
{"ind_2mp", "تُودُونَ"},
{"ind_2ms", "تُودِي"},
{"ind_3fd", "تُودِيَانِ"},
{"ind_3fp", "يُودِينَ"},
{"ind_3fs", "تُودِي"},
{"ind_3md", "يُودِيَانِ"},
{"ind_3mp", "يُودُونَ"},
{"ind_3ms", "يُودِي"},
{"past_1p", "أَوْدَيْنَا"},
{"past_1s", "أَوْدَيْتُ"},
{"past_2d", "أَوْدَيْتُمَا"},
{"past_2fp", "أَوْدَيْتُنَّ"},
{"past_2fs", "أَوْدَيْتِ"},
{"past_2mp", "أَوْدَيْتُمْ"},
{"past_2ms", "أَوْدَيْتَ"},
{"past_3fd", "أَوْدَتَا"},
{"past_3fp", "أَوْدَيْنَ"},
{"past_3fs", "أَوْدَتْ"},
{"past_3md", "أَوْدَيَا"},
{"past_3mp", "أَوْدَوْا"},
{"past_3ms", "أَوْدَى"},
},
},
{
label = "تَآدَى (p331)", root = "أدي", wazn = "تفاعل",
forms = {
{"imp_2d", "تَآدَيَا"},
{"imp_2fp", "تَآدَيْنَ"},
{"imp_2fs", "تَآدَيْ"},
{"imp_2mp", "تَآدَوْا"},
{"imp_2ms", "تَآدَ"},
{"ind_1p", "نَتَآدَى"},
{"ind_1s", "أَتَآدَى"},
{"ind_2d", "تَتَآدَيَانِ"},
{"ind_2fp", "تَتَآدَيْنَ"},
{"ind_2fs", "تَتَآدَيْنَ"},
{"ind_2mp", "تَتَآدَوْنَ"},
{"ind_2ms", "تَتَآدَى"},
{"ind_3fd", "تَتَآدَيَانِ"},
{"ind_3fp", "يَتَآدَيْنَ"},
{"ind_3fs", "تَتَآدَى"},
{"ind_3md", "يَتَآدَيَانِ"},
{"ind_3mp", "يَتَآدَوْنَ"},
{"ind_3ms", "يَتَآدَى"},
{"past_1p", "تَآدَيْنَا"},
{"past_1s", "تَآدَيْتُ"},
{"past_2d", "تَآدَيْتُمَا"},
{"past_2fp", "تَآدَيْتُنَّ"},
{"past_2fs", "تَآدَيْتِ"},
{"past_2mp", "تَآدَيْتُمْ"},
{"past_2ms", "تَآدَيْتَ"},
{"past_3fd", "تَآدَتَا"},
{"past_3fp", "تَآدَيْنَ"},
{"past_3fs", "تَآدَتْ"},
{"past_3md", "تَآدَيَا"},
{"past_3mp", "تَآدَوْا"},
{"past_3ms", "تَآدَى"},
},
},
{
label = "تَراءَى (p334)", root = "رأو", wazn = "تفاعل",
forms = {
{"imp_2d", "تَرَاءَيَا"},
{"imp_2fp", "تَرَاءَيْنَ"},
{"imp_2fs", "تَرَاءَيْ"},
{"imp_2mp", "تَرَاءَوْا"},
{"imp_2ms", "تَرَاءَ"},
{"ind_1p", "نَتَرَاءَى"},
{"ind_1s", "أَتَرَاءَى"},
{"ind_2d", "تَتَرَاءَيَانِ"},
{"ind_2fp", "تَتَرَاءَيْنَ"},
{"ind_2fs", "تَتَرَاءَيْنَ"},
{"ind_2mp", "تَتَرَاءَوْنَ"},
{"ind_2ms", "تَتَرَاءَى"},
{"ind_3fd", "تَتَرَاءَيَانِ"},
{"ind_3fp", "يَتَرَاءَيْنَ"},
{"ind_3fs", "تَتَرَاءَى"},
{"ind_3md", "يَتَرَاءَيَانِ"},
{"ind_3mp", "يَتَرَاءَوْنَ"},
{"ind_3ms", "يَتَرَاءَى"},
{"past_1p", "تَرَاءَيْنَا"},
{"past_1s", "تَرَاءَيْتُ"},
{"past_2d", "تَرَاءَيْتُمَا"},
{"past_2fp", "تَرَاءَيْتُنَّ"},
{"past_2fs", "تَرَاءَيْتِ"},
{"past_2mp", "تَرَاءَيْتُمْ"},
{"past_2ms", "تَرَاءَيْتَ"},
{"past_3fd", "تَرَاءَتَا"},
{"past_3fp", "تَرَاءَيْنَ"},
{"past_3fs", "تَرَاءَتْ"},
{"past_3md", "تَرَاءَيَا"},
{"past_3mp", "تَرَاءَوْا"},
{"past_3ms", "تَرَاءَى"},
},
},
{
label = "تَشاءَى (p334)", root = "شأو", wazn = "تفاعل",
forms = {
{"imp_2d", "تَشَاءَيَا"},
{"imp_2fp", "تَشَاءَيْنَ"},
{"imp_2fs", "تَشَاءَيْ"},
{"imp_2mp", "تَشَاءَوْا"},
{"imp_2ms", "تَشَاءَ"},
{"ind_1p", "نَتَشَاءَى"},
{"ind_1s", "أَتَشَاءَى"},
{"ind_2d", "تَتَشَاءَيَانِ"},
{"ind_2fp", "تَتَشَاءَيْنَ"},
{"ind_2fs", "تَتَشَاءَيْنَ"},
{"ind_2mp", "تَتَشَاءَوْنَ"},
{"ind_2ms", "تَتَشَاءَى"},
{"ind_3fd", "تَتَشَاءَيَانِ"},
{"ind_3fp", "يَتَشَاءَيْنَ"},
{"ind_3fs", "تَتَشَاءَى"},
{"ind_3md", "يَتَشَاءَيَانِ"},
{"ind_3mp", "يَتَشَاءَوْنَ"},
{"ind_3ms", "يَتَشَاءَى"},
{"past_1p", "تَشَاءَيْنَا"},
{"past_1s", "تَشَاءَيْتُ"},
{"past_2d", "تَشَاءَيْتُمَا"},
{"past_2fp", "تَشَاءَيْتُنَّ"},
{"past_2fs", "تَشَاءَيْتِ"},
{"past_2mp", "تَشَاءَيْتُمْ"},
{"past_2ms", "تَشَاءَيْتَ"},
{"past_3fd", "تَشَاءَتَا"},
{"past_3fp", "تَشَاءَيْنَ"},
{"past_3fs", "تَشَاءَتْ"},
{"past_3md", "تَشَاءَيَا"},
{"past_3mp", "تَشَاءَوْا"},
{"past_3ms", "تَشَاءَى"},
},
},
{
label = "تَوَايَلَ (p336)", root = "ويل", wazn = "تفاعل",
forms = {
{"imp_2d", "تَوَايَلَا"},
{"imp_2fp", "تَوَايَلْنَ"},
{"imp_2fs", "تَوَايَلِي"},
{"imp_2mp", "تَوَايَلُوا"},
{"imp_2ms", "تَوَايَلْ"},
{"ind_1p", "نَتَوَايَلُ"},
{"ind_1s", "أَتَوَايَلُ"},
{"ind_2d", "تَتَوَايَلَانِ"},
{"ind_2fp", "تَتَوَايَلْنَ"},
{"ind_2fs", "تَتَوَايَلِينَ"},
{"ind_2mp", "تَتَوَايَلُونَ"},
{"ind_2ms", "تَتَوَايَلُ"},
{"ind_3fd", "تَتَوَايَلَانِ"},
{"ind_3fp", "يَتَوَايَلْنَ"},
{"ind_3fs", "تَتَوَايَلُ"},
{"ind_3md", "يَتَوَايَلَانِ"},
{"ind_3mp", "يَتَوَايَلُونَ"},
{"ind_3ms", "يَتَوَايَلُ"},
{"past_1p", "تَوَايَلْنَا"},
{"past_1s", "تَوَايَلْتُ"},
{"past_2d", "تَوَايَلْتُمَا"},
{"past_2fp", "تَوَايَلْتُنَّ"},
{"past_2fs", "تَوَايَلْتِ"},
{"past_2mp", "تَوَايَلْتُمْ"},
{"past_2ms", "تَوَايَلْتَ"},
{"past_3fd", "تَوَايَلَتَا"},
{"past_3fp", "تَوَايَلْنَ"},
{"past_3fs", "تَوَايَلَتْ"},
{"past_3md", "تَوَايَلَا"},
{"past_3mp", "تَوَايَلُوا"},
{"past_3ms", "تَوَايَلَ"},
},
},
}
2r9dc1uexaysnjywqur337zf1pf74l2
وحدة:ar-verb/testcases/15
828
243475
1159044
2026-09-10T12:40:03Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159044
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 15 من 15. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/15")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_15()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
huoebxv72v1vh1p6otpca8wpvocv547
1159102
1159044
2026-09-10T19:34:35Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159102
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 15 من 16. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/15")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_15()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
1ccja2zn7i6lzx0h8xs1prmbu2q87rl
نقاش الوحدة:ar-verb/testcases/15
829
243476
1159045
2026-09-10T12:40:04Z
ForzaGreen
28665
checkpoint 5: 427 نموذجًا، إصلاح استخراج الجذور
1159045
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/15|الجزء 15 من 15]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، [[نقاش الوحدة:ar-verb/testcases/1|1]]، [[نقاش الوحدة:ar-verb/testcases/2|2]]، [[نقاش الوحدة:ar-verb/testcases/3|3]]، [[نقاش الوحدة:ar-verb/testcases/4|4]]، [[نقاش الوحدة:ar-verb/testcases/5|5]]، [[نقاش الوحدة:ar-verb/testcases/6|6]]، [[نقاش الوحدة:ar-verb/testcases/7|7]]، [[نقاش الوحدة:ar-verb/testcases/8|8]]، [[نقاش الوحدة:ar-verb/testcases/9|9]]، [[نقاش الوحدة:ar-verb/testcases/10|10]]، [[نقاش الوحدة:ar-verb/testcases/11|11]]، [[نقاش الوحدة:ar-verb/testcases/12|12]]، [[نقاش الوحدة:ar-verb/testcases/13|13]]، [[نقاش الوحدة:ar-verb/testcases/14|14]]، 15 — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/15|run_tests}}
rxm1t9b0rootcg6tnmflur9sqs31xhm
1159103
1159045
2026-09-10T19:34:36Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159103
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/15|الجزء 15 من 16]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، [[نقاش الوحدة:ar-verb/testcases/1|1]]، [[نقاش الوحدة:ar-verb/testcases/2|2]]، [[نقاش الوحدة:ar-verb/testcases/3|3]]، [[نقاش الوحدة:ar-verb/testcases/4|4]]، [[نقاش الوحدة:ar-verb/testcases/5|5]]، [[نقاش الوحدة:ar-verb/testcases/6|6]]، [[نقاش الوحدة:ar-verb/testcases/7|7]]، [[نقاش الوحدة:ar-verb/testcases/8|8]]، [[نقاش الوحدة:ar-verb/testcases/9|9]]، [[نقاش الوحدة:ar-verb/testcases/10|10]]، [[نقاش الوحدة:ar-verb/testcases/11|11]]، [[نقاش الوحدة:ar-verb/testcases/12|12]]، [[نقاش الوحدة:ar-verb/testcases/13|13]]، [[نقاش الوحدة:ar-verb/testcases/14|14]]، 15، [[نقاش الوحدة:ar-verb/testcases/16|16]] — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/15|run_tests}}
lbnw7rkwca86t9twba1hz5kxbldbi2z
جَنْدَرَ
0
243477
1159046
2026-09-10T12:42:30Z
إسلام
12622
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1159046
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1486926}}
=== المعاني ===
'''جَنْدَرَ''' {{فعلل}}
{{معجمية|L1486926|معاني}}
=== النطق ===
* {{أصد-عر|جَنْدَرَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=جندر|وزن=فعلل}}
=== المراجع ===
{{مراجع}}
j03ygyjm6kmrcpqokgm54399lu7rrpx
تَجَوَّخَ
0
243478
1159047
2026-09-10T12:44:12Z
إسلام
12622
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1159047
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1534119}}
=== المعاني ===
'''تَجَوَّخَ''' {{تفعّل}}
{{معجمية|L1534119|معاني}}
=== النطق ===
* {{أصد-عر|تَجَوَّخَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=جوخ|وزن=تفعّل}}
=== المراجع ===
{{مراجع}}
d96xmas7bn5hl5fu93ssqlgid7jtizv
تَجَوَّقَ
0
243479
1159048
2026-09-10T12:45:31Z
إسلام
12622
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1159048
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1534136}}
=== المعاني ===
'''تَجَوَّقَ''' {{تفعّل}}
{{معجمية|L1534136|معاني}}
=== النطق ===
* {{أصد-عر|تَجَوَّقَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=جوق|وزن=تفعّل}}
=== المراجع ===
{{مراجع}}
9r3xa0lh8j9zgguhiggx967k2otkp2o
اِنْجَابَ
0
243480
1159050
2026-09-10T12:55:00Z
إسلام
12622
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1159050
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1484876}}
=== المعاني ===
'''اِنْجَابَ''' {{انفعل}}
{{معجمية|L1484876|معاني}}
=== النطق ===
* {{أصد-عر|اِنْجَابَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=جوب|وزن=انفعل}}
=== المراجع ===
{{مراجع}}
bk6hyibkx10ayykke9yqzqzwqnumg1u
وحدة:ar-verb/testcases/بيانات/16
828
243481
1159104
2026-09-10T19:34:38Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159104
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 16 من 16.
return {
{
label = "اِنْآدَ (p345)", root = "أيد", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْآدَا"},
{"imp_2fp", "اِنْأَدْنَ"},
{"imp_2fs", "اِنْآدِي"},
{"imp_2mp", "اِنْآدُوا"},
{"imp_2ms", "اِنْأَدْ"},
{"ind_1p", "نَنْآدُ"},
{"ind_1s", "أَنْآدُ"},
{"ind_2d", "تَنْآدَانِ"},
{"ind_2fp", "تَنْأَدْنَ"},
{"ind_2fs", "تَنْآدِينَ"},
{"ind_2mp", "تَنْآدُونَ"},
{"ind_2ms", "تَنْآدُ"},
{"ind_3fd", "تَنْآدَانِ"},
{"ind_3fs", "تَنْآدُ"},
{"ind_3md", "يَنْآدَانِ"},
{"ind_3mp", "يَنْآدُونَ"},
{"ind_3ms", "يَنْآدُ"},
{"past_1s", "اِنْأَدْتُ"},
{"past_2d", "اِنْأَدْتُمَا"},
{"past_2fp", "اِنْأَدْتُنَّ"},
{"past_2fs", "اِنْأَدْتِ"},
{"past_2mp", "اِنْأَدْتُمْ"},
{"past_2ms", "اِنْأَدْتَ"},
{"past_3fd", "اِنْآدَتَا"},
{"past_3fp", "اِنْأَدْنَ"},
{"past_3fs", "اِنْآدَتْ"},
{"past_3md", "اِنْآدَا"},
{"past_3mp", "اِنْآدُوا"},
{"past_3ms", "اِنْآدَ"},
},
},
{
label = "اِرْتَأَسَ (p360)", root = "رأس", wazn = "افتعل",
forms = {
{"imp_2d", "اِرْتَئِسَا"},
{"imp_2fp", "اِرْتَئِسْنَ"},
{"imp_2fs", "اِرْتَئِسِي"},
{"imp_2mp", "اِرْتَئِسُوا"},
{"imp_2ms", "اِرْتَئِسْ"},
{"ind_1p", "نَرْتَئِسُ"},
{"ind_1s", "أَرْتَئِسُ"},
{"ind_2d", "تَرْتَئِسَانِ"},
{"ind_2fp", "تَرْتَئِسْنَ"},
{"ind_2fs", "تَرْتَئِسِينَ"},
{"ind_2mp", "تَرْتَئِسُونَ"},
{"ind_2ms", "تَرْتَئِسُ"},
{"ind_3fd", "تَرْتَئِسَانِ"},
{"ind_3fp", "يَرْتَئِسْنَ"},
{"ind_3fs", "تَرْتَئِسُ"},
{"ind_3md", "يَرْتَئِسَانِ"},
{"ind_3mp", "يَرْتَئِسُونَ"},
{"ind_3ms", "يَرْتَئِسُ"},
{"past_1p", "اِرْتَأَسْنَا"},
{"past_1s", "اِرْتَأَسْتُ"},
{"past_2d", "اِرْتَأَسْتُمَا"},
{"past_2fp", "اِرْتَأَسْتُنَّ"},
{"past_2fs", "اِرْتَأَسْتِ"},
{"past_2mp", "اِرْتَأَسْتُمْ"},
{"past_2ms", "اِرْتَأَسْتَ"},
{"past_3fd", "اِرْتَأَسَتَا"},
{"past_3fp", "اِرْتَأَسْنَ"},
{"past_3fs", "اِرْتَأَسَتْ"},
{"past_3md", "اِرْتَأَسَا"},
{"past_3mp", "اِرْتَأَسُوا"},
{"past_3ms", "اِرْتَأَسَ"},
},
},
{
label = "اِظَّأَرَ (p361)", root = "ظأر", wazn = "افتعل",
forms = {
{"imp_2d", "اِظَّئِرَا"},
{"imp_2fp", "اِظَّئِرْنَ"},
{"imp_2fs", "اِظَّئِرِي"},
{"imp_2mp", "اِظَّئِرُوا"},
{"imp_2ms", "اِظَّئِرْ"},
{"ind_1p", "نَظَّئِرُ"},
{"ind_1s", "أَظَّئِرُ"},
{"ind_2d", "تَظَّئِرَانِ"},
{"ind_2fp", "تَظَّئِرْنَ"},
{"ind_2fs", "تَظَّئِرِينَ"},
{"ind_2mp", "تَظَّئِرُونَ"},
{"ind_2ms", "تَظَّئِرُ"},
{"ind_3fd", "تَظَّئِرَانِ"},
{"ind_3fp", "يَظَّئِرْنَ"},
{"ind_3fs", "تَظَّئِرُ"},
{"ind_3md", "يَظَّئِرَانِ"},
{"ind_3mp", "يَظَّئِرُونَ"},
{"ind_3ms", "يَظَّئِرُ"},
{"past_1p", "اِظَّأَرْنَا"},
{"past_1s", "اِظَّأَرْتُ"},
{"past_2d", "اِظَّأَرْتُمَا"},
{"past_2fp", "اِظَّأَرْتُنَّ"},
{"past_2fs", "اِظَّأَرْتِ"},
{"past_2mp", "اِظَّأَرْتُمْ"},
{"past_2ms", "اِظَّأَرْتَ"},
{"past_3fd", "اِظَّأَرَتَا"},
{"past_3fp", "اِظَّأَرْنَ"},
{"past_3fs", "اِظَّأَرَتْ"},
{"past_3md", "اِظَّأَرَا"},
{"past_3mp", "اِظَّأَرُوا"},
{"past_3ms", "اِظَّأَرَ"},
},
},
{
label = "اِدَّعَى (p367)", root = "دعو", wazn = "افتعل",
forms = {
{"imp_2d", "اِدَّعِيَا"},
{"imp_2fp", "اِدَّعِينَ"},
{"imp_2fs", "اِدَّعِي"},
{"imp_2mp", "اِدَّعُوا"},
{"imp_2ms", "اِدَّعِ"},
{"ind_1p", "نَدَّعِي"},
{"ind_1s", "أَدَّعِي"},
{"ind_2d", "تَدَّعِيَانِ"},
{"ind_2fp", "تَدَّعِينَ"},
{"ind_2fs", "تَدَّعِينَ"},
{"ind_2mp", "تَدَّعُونَ"},
{"ind_2ms", "تَدَّعِي"},
{"ind_3fd", "تَدَّعِيَانِ"},
{"ind_3fp", "يَدَّعِينَ"},
{"ind_3fs", "تَدَّعِي"},
{"ind_3md", "يَدَّعِيَانِ"},
{"ind_3mp", "يَدَّعُونَ"},
{"ind_3ms", "يَدَّعِي"},
{"past_1p", "اِدَّعَيْنَا"},
{"past_1s", "اِدَّعَيْتُ"},
{"past_2d", "اِدَّعَيْتُمَا"},
{"past_2fp", "اِدَّعَيْتُنَّ"},
{"past_2fs", "اِدَّعَيْتِ"},
{"past_2mp", "اِدَّعَيْتُمْ"},
{"past_2ms", "اِدَّعَيْتَ"},
{"past_3fd", "اِدَّعَتَا"},
{"past_3fp", "اِدَّعَيْنَ"},
{"past_3fs", "اِدَّعَتْ"},
{"past_3md", "اِدَّعَيَا"},
{"past_3mp", "اِدَّعَوْا"},
{"past_3ms", "اِدَّعَى"},
},
},
{
label = "اِطَّلَى (p367)", root = "طلو", wazn = "افتعل",
forms = {
{"imp_2d", "اِطَّلِيَا"},
{"imp_2fp", "اِطَّلِينَ"},
{"imp_2fs", "اِطَّلِي"},
{"imp_2mp", "اِطَّلُوا"},
{"imp_2ms", "اِطَّلِ"},
{"ind_1p", "نَطَّلِي"},
{"ind_1s", "أَطَّلِي"},
{"ind_2d", "تَطَّلِيَانِ"},
{"ind_2fp", "تَطَّلِينَ"},
{"ind_2fs", "تَطَّلِينَ"},
{"ind_2mp", "تَطَّلُونَ"},
{"ind_2ms", "تَطَّلِي"},
{"ind_3fd", "تَطَّلِيَانِ"},
{"ind_3fp", "يَطَّلِينَ"},
{"ind_3fs", "تَطَّلِي"},
{"ind_3md", "يَطَّلِيَانِ"},
{"ind_3mp", "يَطَّلُونَ"},
{"ind_3ms", "يَطَّلِي"},
{"past_1p", "اِطَّلَيْنَا"},
{"past_1s", "اِطَّلَيْتُ"},
{"past_2d", "اِطَّلَيْتُمَا"},
{"past_2fp", "اِطَّلَيْتُنَّ"},
{"past_2fs", "اِطَّلَيْتِ"},
{"past_2mp", "اِطَّلَيْتُمْ"},
{"past_2ms", "اِطَّلَيْتَ"},
{"past_3fd", "اِطَّلَتَا"},
{"past_3fp", "اِطَّلَيْنَ"},
{"past_3fs", "اِطَّلَتْ"},
{"past_3md", "اِطَّلَيَا"},
{"past_3mp", "اِطَّلَوْا"},
{"past_3ms", "اِطَّلَى"},
},
},
{
label = "اِتَّدَى (p369)", root = "ودي", wazn = "افتعل",
forms = {
{"imp_2d", "اِتَّدِيَا"},
{"imp_2fp", "اِتَّدِينَ"},
{"imp_2fs", "اِتَّدِي"},
{"imp_2mp", "اِتَّدُوا"},
{"imp_2ms", "اِتَّدِ"},
{"ind_1p", "نَتَّدِي"},
{"ind_1s", "أَتَّدِي"},
{"ind_2d", "تَتَّدِيَانِ"},
{"ind_2fp", "تَتَّدِينَ"},
{"ind_2fs", "تَتَّدِينَ"},
{"ind_2mp", "تَتَّدُونَ"},
{"ind_2ms", "تَتَّدِي"},
{"ind_3fd", "تَتَّدِيَانِ"},
{"ind_3fs", "تَتَّدِي"},
{"ind_3md", "يَتَّدِيَانِ"},
{"ind_3mp", "يَتَّدُونَ"},
{"ind_3ms", "يَتَّدِي"},
{"past_1p", "اِتَّدَيْنَا"},
{"past_1s", "اِتَّدَيْتُ"},
{"past_2d", "اِتَّدَيْتُمَا"},
{"past_2fp", "اِتَّدَيْتُنَّ"},
{"past_2fs", "اِتَّدَيْتِ"},
{"past_2mp", "اِتَّدَيْتُمْ"},
{"past_2ms", "اِتَّدَيْتَ"},
{"past_3fd", "اِتَّدَتَا"},
{"past_3fp", "اِتَّدَيْنَ"},
{"past_3fs", "اِتَّدَتْ"},
{"past_3md", "اِتَّدَيَا"},
{"past_3mp", "اِتَّدَوْا"},
{"past_3ms", "اِتَّدَى"},
},
},
{
label = "اِعْمايَّ (p399)", root = "عمي", wazn = "افعالّ",
forms = {
{"imp_2d", "اِعْمَايَّا"},
{"imp_2fp", "اِعْمَايِينَ"},
{"imp_2fs", "اِعْمَايِّي"},
{"imp_2mp", "اِعْمَايُّوا"},
{"imp_2ms", "اِعْمَايَّ"},
{"ind_1p", "نَعْمَايُّ"},
{"ind_1s", "أَعْمَايُّ"},
{"ind_2d", "تَعْمَايَّانِ"},
{"ind_2fp", "تَعْمَايِينَ"},
{"ind_2fs", "تَعْمَايِّينَ"},
{"ind_2mp", "تَعْمَايُّونَ"},
{"ind_2ms", "تَعْمَايُّ"},
{"ind_3fd", "تَعْمَايَّانِ"},
{"ind_3fp", "يَعْمَايِينَ"},
{"ind_3fs", "تَعْمَايُّ"},
{"ind_3md", "يَعْمَايَّانِ"},
{"ind_3mp", "يَعْمَايُّونَ"},
{"ind_3ms", "يَعْمَايُّ"},
{"past_1p", "اِعْمَايَيْنَا"},
{"past_1s", "اِعْمَايَيْتُ"},
{"past_2d", "اِعْمَايَيْتُمَا"},
{"past_2fp", "اِعْمَايَيْتُنَّ"},
{"past_2fs", "اِعْمَايَيْتِ"},
{"past_2mp", "اِعْمَايَيْتُمْ"},
{"past_2ms", "اِعْمَايَيْتَ"},
{"past_3fd", "اِعْمَايَّتَا"},
{"past_3fp", "اِعْمَايَيْنَ"},
{"past_3fs", "اِعْمَايَّتْ"},
{"past_3md", "اِعْمَايَّا"},
{"past_3mp", "اِعْمَايُّوا"},
{"past_3ms", "اِعْمَايَّ"},
},
},
{
label = "زَأْزَأَ (p404)", root = "زأزأ", wazn = "فعلل",
forms = {
{"imp_2d", "زَأْزِئَا"},
{"imp_2fp", "زَأْزِئْنَ"},
{"imp_2fs", "زَأْزِئِي"},
{"imp_2mp", "زَأْزِئُوا"},
{"imp_2ms", "زَأْزِئْ"},
{"ind_1p", "نُزَأْزِئُ"},
{"ind_1s", "أُزَأْزِئُ"},
{"ind_2d", "تُزَأْزِئَانِ"},
{"ind_2fp", "تُزَأْزِئْنَ"},
{"ind_2fs", "تُزَأْزِئِينَ"},
{"ind_2mp", "تُزَأْزِئُونَ"},
{"ind_2ms", "تُزَأْزِئُ"},
{"ind_3fd", "تُزَأْزِئَانِ"},
{"ind_3fp", "يُزَأْزِئْنَ"},
{"ind_3fs", "تُزَأْزِئُ"},
{"ind_3md", "يُزَأْزِئَانِ"},
{"ind_3mp", "يُزَأْزِئُونَ"},
{"ind_3ms", "يُزَأْزِئُ"},
{"past_1p", "زَأْزَأْنَا"},
{"past_1s", "زَأْزَأْتُ"},
{"past_2d", "زَأْزَأْتُمَا"},
{"past_2fp", "زَأْزَأْتُنَّ"},
{"past_2fs", "زَأْزَأْتِ"},
{"past_2mp", "زَأْزَأْتُمْ"},
{"past_2ms", "زَأْزَأْتَ"},
{"past_3fd", "زَأْزَأَتَا"},
{"past_3fp", "زَأْزَأْنَ"},
{"past_3fs", "زَأْزَأَتْ"},
{"past_3md", "زَأْزَآ"},
{"past_3mp", "زَأْزَؤُوا"},
{"past_3ms", "زَأْزَأَ"},
},
},
{
label = "ثَأْلَلَ (p405)", root = "ثألل", wazn = "فعلل",
forms = {
{"imp_2d", "ثَأْلِلَا"},
{"imp_2fp", "ثَأْلِلْنَ"},
{"imp_2fs", "ثَأْلِلِي"},
{"imp_2mp", "ثَأْلِلُوا"},
{"imp_2ms", "ثَأْلِلْ"},
{"ind_1p", "نُثَأْلِلُ"},
{"ind_1s", "أُثَأْلِلُ"},
{"ind_2d", "تُثَأْلِلَانِ"},
{"ind_2fp", "تُثَأْلِلْنَ"},
{"ind_2fs", "تُثَأْلِلِينَ"},
{"ind_2mp", "تُثَأْلِلُونَ"},
{"ind_2ms", "تُثَأْلِلُ"},
{"ind_3fd", "تُثَأْلِلَانِ"},
{"ind_3fp", "يُثَأْلِلْنَ"},
{"ind_3fs", "تُثَأْلِلُ"},
{"ind_3md", "يُثَأْلِلَانِ"},
{"ind_3mp", "يُثَأْلِلُونَ"},
{"ind_3ms", "يُثَأْلِلُ"},
{"past_1p", "ثَأْلَلْنَا"},
{"past_1s", "ثَأْلَلْتُ"},
{"past_2d", "ثَأْلَلْتُمَا"},
{"past_2fp", "ثَأْلَلْتُنَّ"},
{"past_2fs", "ثَأْلَلْتِ"},
{"past_2mp", "ثَأْلَلْتُمْ"},
{"past_2ms", "ثَأْلَلْتَ"},
{"past_3fd", "ثَأْلَلَتَا"},
{"past_3fp", "ثَأْلَلْنَ"},
{"past_3fs", "ثَأْلَلَتْ"},
{"past_3md", "ثَأْلَلَا"},
{"past_3mp", "ثَأْلَلُوا"},
{"past_3ms", "ثَأْلَلَ"},
},
},
{
label = "اِزْلَحَفَّ (p431)", root = "زلحف", wazn = "افعللّ",
forms = {
{"imp_2d", "اِزْلَحِفَّا"},
{"imp_2fp", "اِزْلَحْفِفْنَ"},
{"imp_2fs", "اِزْلَحِفِّي"},
{"imp_2mp", "اِزْلَحِفُّوا"},
{"imp_2ms", "اِزْلَحْفِفْ"},
{"ind_1p", "نَزْلَحِفُّ"},
{"ind_1s", "أَزْلَحِفُّ"},
{"ind_2d", "تَزْلَحِفَّانِ"},
{"ind_2fp", "تَزْلَحْفِفْنَ"},
{"ind_2fs", "تَزْلَحِفِّينَ"},
{"ind_2mp", "تَزْلَحِفُّونَ"},
{"ind_2ms", "تَزْلَحِفُّ"},
{"ind_3fd", "تَزْلَحِفَّانِ"},
{"ind_3fp", "يَزْلَحْفِفْنَ"},
{"ind_3fs", "تَزْلَحِفُّ"},
{"ind_3md", "يَزْلَحِفَّانِ"},
{"ind_3mp", "يَزْلَحِفُّونَ"},
{"ind_3ms", "يَزْلَحِفُّ"},
{"past_1p", "اِزْلَحْفَفْنَا"},
{"past_1s", "اِزْلَحْفَفْتُ"},
{"past_2d", "اِزْلَحْفَفْتُمَا"},
{"past_2fp", "اِزْلَحْفَفْتُنَّ"},
{"past_2fs", "اِزْلَحْفَفْتِ"},
{"past_2mp", "اِزْلَحْفَفْتُمْ"},
{"past_2ms", "اِزْلَحْفَفْتَ"},
{"past_3fd", "اِزْلَحَفَّتَا"},
{"past_3fp", "اِزْلَحْفَفْنَ"},
{"past_3fs", "اِزْلَحَفَّتْ"},
{"past_3md", "اِزْلَحَفَّا"},
{"past_3mp", "اِزْلَحَفُّوا"},
{"past_3ms", "اِزْلَحَفَّ"},
},
},
}
0v2fxiemrcl2q8qmd83wakai3g5qwwh
1159135
1159104
2026-09-11T08:04:21Z
ForzaGreen
28665
corpus 462 paradigms: p204 رأى و p254 يبس، وتدقيق ملاحظات المرجع
1159135
Scribunto
text/plain
-- بيانات اختبار [[وحدة:ar-verb]] — مولَّدة آليًّا، لا تُحرَّر يدويًّا.
-- Auto-generated from the fixtures in github.com/forzagreen/ar-wiktionary-modules.
-- Regenerate with tools/make_wiki_testcases.py; edits here are overwritten.
--
-- المصدر: أنطوان الدحداح، معجم تصريف الأفعال العربية، مكتبة لبنان ناشرون.
-- الصيغ حقائق لغوية مُقابَلة على ذلك المرجع؛ لا يُعاد هنا نصُّ الكتاب ولا ترتيبه.
--
-- القيم المنتظرة مكتوبة بإملاء الوحدة لا بإملاء الكتاب حيث اختلفا اختلافًا
-- إملائيًّا مقبولًا في الوجهين (ألف التثنية، همزة الوصل، السكون الاختياري).
-- الجزء 16 من 16.
return {
{
label = "اِنْآدَ (p345)", root = "أيد", wazn = "انفعل",
forms = {
{"imp_2d", "اِنْآدَا"},
{"imp_2fp", "اِنْأَدْنَ"},
{"imp_2fs", "اِنْآدِي"},
{"imp_2mp", "اِنْآدُوا"},
{"imp_2ms", "اِنْأَدْ"},
{"ind_1p", "نَنْآدُ"},
{"ind_1s", "أَنْآدُ"},
{"ind_2d", "تَنْآدَانِ"},
{"ind_2fp", "تَنْأَدْنَ"},
{"ind_2fs", "تَنْآدِينَ"},
{"ind_2mp", "تَنْآدُونَ"},
{"ind_2ms", "تَنْآدُ"},
{"ind_3fd", "تَنْآدَانِ"},
{"ind_3fs", "تَنْآدُ"},
{"ind_3md", "يَنْآدَانِ"},
{"ind_3mp", "يَنْآدُونَ"},
{"ind_3ms", "يَنْآدُ"},
{"past_1s", "اِنْأَدْتُ"},
{"past_2d", "اِنْأَدْتُمَا"},
{"past_2fp", "اِنْأَدْتُنَّ"},
{"past_2fs", "اِنْأَدْتِ"},
{"past_2mp", "اِنْأَدْتُمْ"},
{"past_2ms", "اِنْأَدْتَ"},
{"past_3fd", "اِنْآدَتَا"},
{"past_3fp", "اِنْأَدْنَ"},
{"past_3fs", "اِنْآدَتْ"},
{"past_3md", "اِنْآدَا"},
{"past_3mp", "اِنْآدُوا"},
{"past_3ms", "اِنْآدَ"},
},
},
{
label = "اِرْتَأَسَ (p360)", root = "رأس", wazn = "افتعل",
forms = {
{"imp_2d", "اِرْتَئِسَا"},
{"imp_2fp", "اِرْتَئِسْنَ"},
{"imp_2fs", "اِرْتَئِسِي"},
{"imp_2mp", "اِرْتَئِسُوا"},
{"imp_2ms", "اِرْتَئِسْ"},
{"ind_1p", "نَرْتَئِسُ"},
{"ind_1s", "أَرْتَئِسُ"},
{"ind_2d", "تَرْتَئِسَانِ"},
{"ind_2fp", "تَرْتَئِسْنَ"},
{"ind_2fs", "تَرْتَئِسِينَ"},
{"ind_2mp", "تَرْتَئِسُونَ"},
{"ind_2ms", "تَرْتَئِسُ"},
{"ind_3fd", "تَرْتَئِسَانِ"},
{"ind_3fp", "يَرْتَئِسْنَ"},
{"ind_3fs", "تَرْتَئِسُ"},
{"ind_3md", "يَرْتَئِسَانِ"},
{"ind_3mp", "يَرْتَئِسُونَ"},
{"ind_3ms", "يَرْتَئِسُ"},
{"past_1p", "اِرْتَأَسْنَا"},
{"past_1s", "اِرْتَأَسْتُ"},
{"past_2d", "اِرْتَأَسْتُمَا"},
{"past_2fp", "اِرْتَأَسْتُنَّ"},
{"past_2fs", "اِرْتَأَسْتِ"},
{"past_2mp", "اِرْتَأَسْتُمْ"},
{"past_2ms", "اِرْتَأَسْتَ"},
{"past_3fd", "اِرْتَأَسَتَا"},
{"past_3fp", "اِرْتَأَسْنَ"},
{"past_3fs", "اِرْتَأَسَتْ"},
{"past_3md", "اِرْتَأَسَا"},
{"past_3mp", "اِرْتَأَسُوا"},
{"past_3ms", "اِرْتَأَسَ"},
},
},
{
label = "اِظَّأَرَ (p361)", root = "ظأر", wazn = "افتعل",
forms = {
{"imp_2d", "اِظَّئِرَا"},
{"imp_2fp", "اِظَّئِرْنَ"},
{"imp_2fs", "اِظَّئِرِي"},
{"imp_2mp", "اِظَّئِرُوا"},
{"imp_2ms", "اِظَّئِرْ"},
{"ind_1p", "نَظَّئِرُ"},
{"ind_1s", "أَظَّئِرُ"},
{"ind_2d", "تَظَّئِرَانِ"},
{"ind_2fp", "تَظَّئِرْنَ"},
{"ind_2fs", "تَظَّئِرِينَ"},
{"ind_2mp", "تَظَّئِرُونَ"},
{"ind_2ms", "تَظَّئِرُ"},
{"ind_3fd", "تَظَّئِرَانِ"},
{"ind_3fp", "يَظَّئِرْنَ"},
{"ind_3fs", "تَظَّئِرُ"},
{"ind_3md", "يَظَّئِرَانِ"},
{"ind_3mp", "يَظَّئِرُونَ"},
{"ind_3ms", "يَظَّئِرُ"},
{"past_1p", "اِظَّأَرْنَا"},
{"past_1s", "اِظَّأَرْتُ"},
{"past_2d", "اِظَّأَرْتُمَا"},
{"past_2fp", "اِظَّأَرْتُنَّ"},
{"past_2fs", "اِظَّأَرْتِ"},
{"past_2mp", "اِظَّأَرْتُمْ"},
{"past_2ms", "اِظَّأَرْتَ"},
{"past_3fd", "اِظَّأَرَتَا"},
{"past_3fp", "اِظَّأَرْنَ"},
{"past_3fs", "اِظَّأَرَتْ"},
{"past_3md", "اِظَّأَرَا"},
{"past_3mp", "اِظَّأَرُوا"},
{"past_3ms", "اِظَّأَرَ"},
},
},
{
label = "اِدَّعَى (p367)", root = "دعو", wazn = "افتعل",
forms = {
{"imp_2d", "اِدَّعِيَا"},
{"imp_2fp", "اِدَّعِينَ"},
{"imp_2fs", "اِدَّعِي"},
{"imp_2mp", "اِدَّعُوا"},
{"imp_2ms", "اِدَّعِ"},
{"ind_1p", "نَدَّعِي"},
{"ind_1s", "أَدَّعِي"},
{"ind_2d", "تَدَّعِيَانِ"},
{"ind_2fp", "تَدَّعِينَ"},
{"ind_2fs", "تَدَّعِينَ"},
{"ind_2mp", "تَدَّعُونَ"},
{"ind_2ms", "تَدَّعِي"},
{"ind_3fd", "تَدَّعِيَانِ"},
{"ind_3fp", "يَدَّعِينَ"},
{"ind_3fs", "تَدَّعِي"},
{"ind_3md", "يَدَّعِيَانِ"},
{"ind_3mp", "يَدَّعُونَ"},
{"ind_3ms", "يَدَّعِي"},
{"past_1p", "اِدَّعَيْنَا"},
{"past_1s", "اِدَّعَيْتُ"},
{"past_2d", "اِدَّعَيْتُمَا"},
{"past_2fp", "اِدَّعَيْتُنَّ"},
{"past_2fs", "اِدَّعَيْتِ"},
{"past_2mp", "اِدَّعَيْتُمْ"},
{"past_2ms", "اِدَّعَيْتَ"},
{"past_3fd", "اِدَّعَتَا"},
{"past_3fp", "اِدَّعَيْنَ"},
{"past_3fs", "اِدَّعَتْ"},
{"past_3md", "اِدَّعَيَا"},
{"past_3mp", "اِدَّعَوْا"},
{"past_3ms", "اِدَّعَى"},
},
},
{
label = "اِطَّلَى (p367)", root = "طلو", wazn = "افتعل",
forms = {
{"imp_2d", "اِطَّلِيَا"},
{"imp_2fp", "اِطَّلِينَ"},
{"imp_2fs", "اِطَّلِي"},
{"imp_2mp", "اِطَّلُوا"},
{"imp_2ms", "اِطَّلِ"},
{"ind_1p", "نَطَّلِي"},
{"ind_1s", "أَطَّلِي"},
{"ind_2d", "تَطَّلِيَانِ"},
{"ind_2fp", "تَطَّلِينَ"},
{"ind_2fs", "تَطَّلِينَ"},
{"ind_2mp", "تَطَّلُونَ"},
{"ind_2ms", "تَطَّلِي"},
{"ind_3fd", "تَطَّلِيَانِ"},
{"ind_3fp", "يَطَّلِينَ"},
{"ind_3fs", "تَطَّلِي"},
{"ind_3md", "يَطَّلِيَانِ"},
{"ind_3mp", "يَطَّلُونَ"},
{"ind_3ms", "يَطَّلِي"},
{"past_1p", "اِطَّلَيْنَا"},
{"past_1s", "اِطَّلَيْتُ"},
{"past_2d", "اِطَّلَيْتُمَا"},
{"past_2fp", "اِطَّلَيْتُنَّ"},
{"past_2fs", "اِطَّلَيْتِ"},
{"past_2mp", "اِطَّلَيْتُمْ"},
{"past_2ms", "اِطَّلَيْتَ"},
{"past_3fd", "اِطَّلَتَا"},
{"past_3fp", "اِطَّلَيْنَ"},
{"past_3fs", "اِطَّلَتْ"},
{"past_3md", "اِطَّلَيَا"},
{"past_3mp", "اِطَّلَوْا"},
{"past_3ms", "اِطَّلَى"},
},
},
{
label = "اِتَّدَى (p369)", root = "ودي", wazn = "افتعل",
forms = {
{"imp_2d", "اِتَّدِيَا"},
{"imp_2fp", "اِتَّدِينَ"},
{"imp_2fs", "اِتَّدِي"},
{"imp_2mp", "اِتَّدُوا"},
{"imp_2ms", "اِتَّدِ"},
{"ind_1p", "نَتَّدِي"},
{"ind_1s", "أَتَّدِي"},
{"ind_2d", "تَتَّدِيَانِ"},
{"ind_2fp", "تَتَّدِينَ"},
{"ind_2fs", "تَتَّدِينَ"},
{"ind_2mp", "تَتَّدُونَ"},
{"ind_2ms", "تَتَّدِي"},
{"ind_3fd", "تَتَّدِيَانِ"},
{"ind_3fs", "تَتَّدِي"},
{"ind_3md", "يَتَّدِيَانِ"},
{"ind_3mp", "يَتَّدُونَ"},
{"ind_3ms", "يَتَّدِي"},
{"past_1p", "اِتَّدَيْنَا"},
{"past_1s", "اِتَّدَيْتُ"},
{"past_2d", "اِتَّدَيْتُمَا"},
{"past_2fp", "اِتَّدَيْتُنَّ"},
{"past_2fs", "اِتَّدَيْتِ"},
{"past_2mp", "اِتَّدَيْتُمْ"},
{"past_2ms", "اِتَّدَيْتَ"},
{"past_3fd", "اِتَّدَتَا"},
{"past_3fp", "اِتَّدَيْنَ"},
{"past_3fs", "اِتَّدَتْ"},
{"past_3md", "اِتَّدَيَا"},
{"past_3mp", "اِتَّدَوْا"},
{"past_3ms", "اِتَّدَى"},
},
},
{
label = "اِعْمايَّ (p399)", root = "عمي", wazn = "افعالّ",
forms = {
{"imp_2d", "اِعْمَايَّا"},
{"imp_2fp", "اِعْمَايِينَ"},
{"imp_2fs", "اِعْمَايِّي"},
{"imp_2mp", "اِعْمَايُّوا"},
{"imp_2ms", "اِعْمَايَّ"},
{"ind_1p", "نَعْمَايُّ"},
{"ind_1s", "أَعْمَايُّ"},
{"ind_2d", "تَعْمَايَّانِ"},
{"ind_2fp", "تَعْمَايِينَ"},
{"ind_2fs", "تَعْمَايِّينَ"},
{"ind_2mp", "تَعْمَايُّونَ"},
{"ind_2ms", "تَعْمَايُّ"},
{"ind_3fd", "تَعْمَايَّانِ"},
{"ind_3fp", "يَعْمَايِينَ"},
{"ind_3fs", "تَعْمَايُّ"},
{"ind_3md", "يَعْمَايَّانِ"},
{"ind_3mp", "يَعْمَايُّونَ"},
{"ind_3ms", "يَعْمَايُّ"},
{"past_1p", "اِعْمَايَيْنَا"},
{"past_1s", "اِعْمَايَيْتُ"},
{"past_2d", "اِعْمَايَيْتُمَا"},
{"past_2fp", "اِعْمَايَيْتُنَّ"},
{"past_2fs", "اِعْمَايَيْتِ"},
{"past_2mp", "اِعْمَايَيْتُمْ"},
{"past_2ms", "اِعْمَايَيْتَ"},
{"past_3fd", "اِعْمَايَّتَا"},
{"past_3fp", "اِعْمَايَيْنَ"},
{"past_3fs", "اِعْمَايَّتْ"},
{"past_3md", "اِعْمَايَّا"},
{"past_3mp", "اِعْمَايُّوا"},
{"past_3ms", "اِعْمَايَّ"},
},
},
{
label = "زَأْزَأَ (p404)", root = "زأزأ", wazn = "فعلل",
forms = {
{"imp_2d", "زَأْزِئَا"},
{"imp_2fp", "زَأْزِئْنَ"},
{"imp_2fs", "زَأْزِئِي"},
{"imp_2mp", "زَأْزِئُوا"},
{"imp_2ms", "زَأْزِئْ"},
{"ind_1p", "نُزَأْزِئُ"},
{"ind_1s", "أُزَأْزِئُ"},
{"ind_2d", "تُزَأْزِئَانِ"},
{"ind_2fp", "تُزَأْزِئْنَ"},
{"ind_2fs", "تُزَأْزِئِينَ"},
{"ind_2mp", "تُزَأْزِئُونَ"},
{"ind_2ms", "تُزَأْزِئُ"},
{"ind_3fd", "تُزَأْزِئَانِ"},
{"ind_3fp", "يُزَأْزِئْنَ"},
{"ind_3fs", "تُزَأْزِئُ"},
{"ind_3md", "يُزَأْزِئَانِ"},
{"ind_3mp", "يُزَأْزِئُونَ"},
{"ind_3ms", "يُزَأْزِئُ"},
{"past_1p", "زَأْزَأْنَا"},
{"past_1s", "زَأْزَأْتُ"},
{"past_2d", "زَأْزَأْتُمَا"},
{"past_2fp", "زَأْزَأْتُنَّ"},
{"past_2fs", "زَأْزَأْتِ"},
{"past_2mp", "زَأْزَأْتُمْ"},
{"past_2ms", "زَأْزَأْتَ"},
{"past_3fd", "زَأْزَأَتَا"},
{"past_3fp", "زَأْزَأْنَ"},
{"past_3fs", "زَأْزَأَتْ"},
{"past_3md", "زَأْزَآ"},
{"past_3mp", "زَأْزَؤُوا"},
{"past_3ms", "زَأْزَأَ"},
},
},
{
label = "ثَأْلَلَ (p405)", root = "ثألل", wazn = "فعلل",
forms = {
{"imp_2d", "ثَأْلِلَا"},
{"imp_2fp", "ثَأْلِلْنَ"},
{"imp_2fs", "ثَأْلِلِي"},
{"imp_2mp", "ثَأْلِلُوا"},
{"imp_2ms", "ثَأْلِلْ"},
{"ind_1p", "نُثَأْلِلُ"},
{"ind_1s", "أُثَأْلِلُ"},
{"ind_2d", "تُثَأْلِلَانِ"},
{"ind_2fp", "تُثَأْلِلْنَ"},
{"ind_2fs", "تُثَأْلِلِينَ"},
{"ind_2mp", "تُثَأْلِلُونَ"},
{"ind_2ms", "تُثَأْلِلُ"},
{"ind_3fd", "تُثَأْلِلَانِ"},
{"ind_3fp", "يُثَأْلِلْنَ"},
{"ind_3fs", "تُثَأْلِلُ"},
{"ind_3md", "يُثَأْلِلَانِ"},
{"ind_3mp", "يُثَأْلِلُونَ"},
{"ind_3ms", "يُثَأْلِلُ"},
{"past_1p", "ثَأْلَلْنَا"},
{"past_1s", "ثَأْلَلْتُ"},
{"past_2d", "ثَأْلَلْتُمَا"},
{"past_2fp", "ثَأْلَلْتُنَّ"},
{"past_2fs", "ثَأْلَلْتِ"},
{"past_2mp", "ثَأْلَلْتُمْ"},
{"past_2ms", "ثَأْلَلْتَ"},
{"past_3fd", "ثَأْلَلَتَا"},
{"past_3fp", "ثَأْلَلْنَ"},
{"past_3fs", "ثَأْلَلَتْ"},
{"past_3md", "ثَأْلَلَا"},
{"past_3mp", "ثَأْلَلُوا"},
{"past_3ms", "ثَأْلَلَ"},
},
},
{
label = "اِزْلَحَفَّ (p431)", root = "زلحف", wazn = "افعللّ",
forms = {
{"imp_2d", "اِزْلَحِفَّا"},
{"imp_2fp", "اِزْلَحْفِفْنَ"},
{"imp_2fs", "اِزْلَحِفِّي"},
{"imp_2mp", "اِزْلَحِفُّوا"},
{"imp_2ms", "اِزْلَحْفِفْ"},
{"ind_1p", "نَزْلَحِفُّ"},
{"ind_1s", "أَزْلَحِفُّ"},
{"ind_2d", "تَزْلَحِفَّانِ"},
{"ind_2fp", "تَزْلَحْفِفْنَ"},
{"ind_2fs", "تَزْلَحِفِّينَ"},
{"ind_2mp", "تَزْلَحِفُّونَ"},
{"ind_2ms", "تَزْلَحِفُّ"},
{"ind_3fd", "تَزْلَحِفَّانِ"},
{"ind_3fp", "يَزْلَحْفِفْنَ"},
{"ind_3fs", "تَزْلَحِفُّ"},
{"ind_3md", "يَزْلَحِفَّانِ"},
{"ind_3mp", "يَزْلَحِفُّونَ"},
{"ind_3ms", "يَزْلَحِفُّ"},
{"past_1p", "اِزْلَحْفَفْنَا"},
{"past_1s", "اِزْلَحْفَفْتُ"},
{"past_2d", "اِزْلَحْفَفْتُمَا"},
{"past_2fp", "اِزْلَحْفَفْتُنَّ"},
{"past_2fs", "اِزْلَحْفَفْتِ"},
{"past_2mp", "اِزْلَحْفَفْتُمْ"},
{"past_2ms", "اِزْلَحْفَفْتَ"},
{"past_3fd", "اِزْلَحَفَّتَا"},
{"past_3fp", "اِزْلَحْفَفْنَ"},
{"past_3fs", "اِزْلَحَفَّتْ"},
{"past_3md", "اِزْلَحَفَّا"},
{"past_3mp", "اِزْلَحَفُّوا"},
{"past_3ms", "اِزْلَحَفَّ"},
},
},
{
label = "رَأَى (p204)", root = "رأي", wazn = "فعَل يفعَل",
forms = {
{"imp_2d", "رَيَا"},
{"imp_2fp", "رَيْنَ"},
{"imp_2fs", "رَيْ"},
{"imp_2mp", "رَوْا"},
{"imp_2ms", "رَ"},
{"ind_1p", "نَرَى"},
{"ind_1s", "أَرَى"},
{"ind_2d", "تَرَيَانِ"},
{"ind_2fp", "تَرَيْنَ"},
{"ind_2fs", "تَرَيْنَ"},
{"ind_2mp", "تَرَوْنَ"},
{"ind_2ms", "تَرَى"},
{"ind_3fd", "تَرَيَانِ"},
{"ind_3fp", "يَرَيْنَ"},
{"ind_3fs", "تَرَى"},
{"ind_3md", "يَرَيَانِ"},
{"ind_3mp", "يَرَوْنَ"},
{"ind_3ms", "يَرَى"},
{"past_1p", "رَأَيْنَا"},
{"past_1s", "رَأَيْتُ"},
{"past_2d", "رَأَيْتُمَا"},
{"past_2fp", "رَأَيْتُنَّ"},
{"past_2fs", "رَأَيْتِ"},
{"past_2mp", "رَأَيْتُمْ"},
{"past_2ms", "رَأَيْتَ"},
{"past_3fd", "رَأَتَا"},
{"past_3fp", "رَأَيْنَ"},
{"past_3fs", "رَأَتْ"},
{"past_3md", "رَأَيَا"},
{"past_3mp", "رَأَوْا"},
{"past_3ms", "رَأَى"},
},
},
{
label = "يَبِسَ (p254)", root = "يبس", wazn = "فعِل يفعِل",
forms = {
{"imp_2d", "اِيبِسَا"},
{"imp_2fp", "اِيبِسْنَ"},
{"imp_2fs", "اِيبِسِي"},
{"imp_2mp", "اِيبِسُوا"},
{"imp_2ms", "اِيبِسْ"},
{"ind_1p", "نَيْبِسُ"},
{"ind_1s", "أَيْبِسُ"},
{"ind_2d", "تَيْبِسَانِ"},
{"ind_2fp", "تَيْبِسْنَ"},
{"ind_2fs", "تَيْبِسِينَ"},
{"ind_2mp", "تَيْبِسُونَ"},
{"ind_2ms", "تَيْبِسُ"},
{"ind_3fd", "تَيْبِسَانِ"},
{"ind_3fp", "يَيْبِسْنَ"},
{"ind_3fs", "تَيْبِسُ"},
{"ind_3md", "يَيْبِسَانِ"},
{"ind_3mp", "يَيْبِسُونَ"},
{"ind_3ms", "يَيْبِسُ"},
{"past_1p", "يَبِسْنَا"},
{"past_1s", "يَبِسْتُ"},
{"past_2d", "يَبِسْتُمَا"},
{"past_2fp", "يَبِسْتُنَّ"},
{"past_2fs", "يَبِسْتِ"},
{"past_2mp", "يَبِسْتُمْ"},
{"past_2ms", "يَبِسْتَ"},
{"past_3fd", "يَبِسَتَا"},
{"past_3fp", "يَبِسْنَ"},
{"past_3fs", "يَبِسَتْ"},
{"past_3md", "يَبِسَا"},
{"past_3mp", "يَبِسُوا"},
{"past_3ms", "يَبِسَ"},
},
},
}
bt0m8iqa9rx50gt9ix7ixwh2tvlf1rz
وحدة:ar-verb/testcases/16
828
243482
1159105
2026-09-10T19:34:39Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159105
Scribunto
text/plain
-- اختبارات [[وحدة:ar-verb]] — الجزء 16 من 16. مولَّدة آليًّا.
-- Auto-generated by tools/make_wiki_testcases.py. Do not edit by hand.
-- انقر على صفحة النقاش لعرض النتائج.
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
local data = mw.loadData("Module:ar-verb/testcases/بيانات/16")
-- Membership, not equality: a slot legitimately returns a set of variants, and
-- the fixture passes if the expected form is anywhere in it. On failure we hand
-- self:equals() the first variant so the talk page shows a readable diff.
local function check(self, entry)
local args = {["جذر"] = entry.root, ["وزن"] = entry.wazn}
if entry.pass then args["مبني للمجهول"] = true end
if entry.reduced then args["مدغم"] = true end
local result = m_ar_verb.do_generate_forms(args, "ar-conj")
for _, pair in ipairs(entry.forms) do
local slot, expected = pair[1], pair[2]
local got, hit = result.forms[slot], nil
if got then
for _, v in ipairs(got) do
if v.form == expected then hit = expected; break end
end
hit = hit or (got[1] and got[1].form)
end
self:equals(entry.label .. " / " .. slot, hit or "(no form)", expected)
end
end
function tests:test_fixtures_16()
for _, entry in ipairs(data) do check(self, entry) end
end
return tests
eimgzx5viggo325jjrac80vqyh8vt9b
نقاش الوحدة:ar-verb/testcases/16
829
243483
1159106
2026-09-10T19:34:40Z
ForzaGreen
28665
مزامنة من مستودع GitHub: نقطة التحقق ٦ — قراءة ١٠٤ خلية، ٤٦٠ نموذجًا
1159106
wikitext
text/x-wiki
<!-- مولَّدة آليًّا بواسطة tools/make_wiki_testcases.py — لا تُحرَّر يدويًّا. -->
نتائج [[وحدة:ar-verb/testcases/16|الجزء 16 من 16]] من اختبارات [[وحدة:ar-verb]]، مولَّدة من [https://github.com/forzagreen/ar-wiktionary-modules المستودع] ومقابَلة على «معجم تصريف الأفعال العربية» لأنطوان الدحداح. المجموعات: [[نقاش الوحدة:ar-verb/مختبر|0]]، [[نقاش الوحدة:ar-verb/testcases/1|1]]، [[نقاش الوحدة:ar-verb/testcases/2|2]]، [[نقاش الوحدة:ar-verb/testcases/3|3]]، [[نقاش الوحدة:ar-verb/testcases/4|4]]، [[نقاش الوحدة:ar-verb/testcases/5|5]]، [[نقاش الوحدة:ar-verb/testcases/6|6]]، [[نقاش الوحدة:ar-verb/testcases/7|7]]، [[نقاش الوحدة:ar-verb/testcases/8|8]]، [[نقاش الوحدة:ar-verb/testcases/9|9]]، [[نقاش الوحدة:ar-verb/testcases/10|10]]، [[نقاش الوحدة:ar-verb/testcases/11|11]]، [[نقاش الوحدة:ar-verb/testcases/12|12]]، [[نقاش الوحدة:ar-verb/testcases/13|13]]، [[نقاش الوحدة:ar-verb/testcases/14|14]]، [[نقاش الوحدة:ar-verb/testcases/15|15]]، 16 — وقائمتها كاملة في [[وحدة:ar-verb/شرح#الاختبار|شرح الوحدة]].
{{#invoke:ar-verb/testcases/16|run_tests}}
a4wb3rkxf4loaxcujne7f1e5j23b2xt
تَخَطَّرَ
0
243484
1159110
2026-09-11T00:07:49Z
أبو هشام
20788
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1159110
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1489099}}
=== المعاني ===
'''تَخَطَّرَ''' {{تفعّل}}
{{معجمية|L1489099|معاني}}
=== النطق ===
* {{أصد-عر|تَخَطَّرَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=خطر|وزن=تفعّل}}
=== المراجع ===
{{مراجع}}
abv5mkpwy0rsczvrnlp77749us8s894
خَطْخَطَ
0
243485
1159111
2026-09-11T00:10:35Z
أبو هشام
20788
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1159111
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1535074}}
=== المعاني ===
'''خَطْخَطَ''' {{فعلل}}
{{معجمية|L1535074|معاني}}
=== النطق ===
* {{أصد-عر|خَطْخَطَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=خطخط|وزن=فعلل}}
=== المراجع ===
{{مراجع}}
hsa6dsryuwmewhaz7y6wo59dauh5rw7
تَخَطَّفَ
0
243486
1159112
2026-09-11T00:13:30Z
أبو هشام
20788
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1159112
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1486294}}
=== المعاني ===
'''تَخَطَّفَ''' {{تفعّل}}
{{معجمية|L1486294|معاني}}
=== النطق ===
* {{أصد-عر|تَخَطَّفَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=خطف|وزن=تفعّل}}
=== المراجع ===
{{مراجع}}
1cgr99xlcumrwn58g5tnk8srdk9nu4r
خَطَّفَ
0
243487
1159113
2026-09-11T00:16:26Z
أبو هشام
20788
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1159113
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1535079}}
=== المعاني ===
'''خَطَّفَ''' {{فعّل}}
{{معجمية|L1535079|معاني}}
=== النطق ===
* {{أصد-عر|خَطَّفَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=خطف|وزن=فعّل}}
=== المراجع ===
{{مراجع}}
gq3qk55bycrz3nsfo8umwbc84ykhuwc
تَخَطَّلَ
0
243488
1159114
2026-09-11T00:19:05Z
أبو هشام
20788
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1159114
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1535081}}
=== المعاني ===
'''تَخَطَّلَ''' {{تفعّل}}
{{معجمية|L1535081|معاني}}
=== النطق ===
* {{أصد-عر|تَخَطَّلَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=خطل|وزن=تفعّل}}
=== المراجع ===
{{مراجع}}
eb37a8r9d9yaq6zcxc9131a170egz9y
تَخَفَّجَ
0
243489
1159115
2026-09-11T00:22:21Z
أبو هشام
20788
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1159115
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1535090}}
=== المعاني ===
'''تَخَفَّجَ''' {{تفعّل}}
{{معجمية|L1535090|معاني}}
=== النطق ===
* {{أصد-عر|تَخَفَّجَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=خفج|وزن=تفعّل}}
=== المراجع ===
{{مراجع}}
fd0e2krgc7zdn2fobew7odhnz9prji2
أَخْفَجَ
0
243490
1159116
2026-09-11T00:24:08Z
أبو هشام
20788
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1159116
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1535089}}
=== المعاني ===
'''أَخْفَجَ''' {{أفعل}}
{{معجمية|L1535089|معاني}}
=== النطق ===
* {{أصد-عر|أَخْفَجَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=خفج|وزن=أفعل}}
=== المراجع ===
{{مراجع}}
atm0rrv88sm6j9mahnvqfl4lj9bhvgo
خَفِدَ
0
243491
1159117
2026-09-11T00:27:32Z
أبو هشام
20788
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1159117
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1544438}}
=== المعاني ===
'''خَفِدَ''' {{سمع}}
{{معجمية|L1544438|معاني}}
=== النطق ===
* {{أصد-عر|خَفِدَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=خفد|وزن=فعِل يفعَل}}
=== المراجع ===
{{مراجع}}
dwvzoa0sg4hp5k637h5d6jll2idp83z
خَفَّسَ
0
243492
1159121
2026-09-11T00:41:10Z
أبو هشام
20788
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1159121
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1535099}}
=== المعاني ===
'''خَفَّسَ''' {{فعّل}}
{{معجمية|L1535099|معاني}}
=== النطق ===
* {{أصد-عر|خَفَّسَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=خفس|وزن=فعّل}}
=== المراجع ===
{{مراجع}}
s8du6oj7ft2bryxet6yjnmoo50cspjt
اِنْخَفَسَ
0
243493
1159122
2026-09-11T00:45:12Z
أبو هشام
20788
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1159122
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1535097}}
=== المعاني ===
'''اِنْخَفَسَ''' {{انفعل}}
{{معجمية|L1535097|معاني}}
=== النطق ===
* {{أصد-عر|اِنْخَفَسَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=خفس|وزن=انفعل}}
=== المراجع ===
{{مراجع}}
90hw6t2rdf3kcv8picry5m17xq6ns9c
اِخْرَنْمَسَ
0
243494
1159123
2026-09-11T06:41:39Z
أبو هشام
20788
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1159123
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1486483}}
=== المعاني ===
'''اِخْرَنْمَسَ''' {{افعنلل}}
{{معجمية|L1486483|معاني}}
=== النطق ===
* {{أصد-عر|اِخْرَنْمَسَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=خرمس|وزن=افعنلل}}
=== المراجع ===
{{مراجع}}
9cdzv5mwmzhwisbyryqrk3pwyrp2scc
اِخْرَمَسَّ
0
243495
1159124
2026-09-11T06:44:08Z
أبو هشام
20788
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1159124
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1534946}}
=== المعاني ===
'''اِخْرَمَسَّ''' {{افعللّ}}
{{معجمية|L1534946|معاني}}
=== النطق ===
* {{أصد-عر|اِخْرَمَسَّ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=خرمس|وزن=افعللّ}}
=== المراجع ===
{{مراجع}}
tk6t3ifdo7wnglmu6hi1vbn4vrzyje7
خَرْمَشَ
0
243496
1159125
2026-09-11T06:48:37Z
أبو هشام
20788
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1159125
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1534947}}
=== المعاني ===
'''خَرْمَشَ''' {{فعلل}}
{{معجمية|L1534947|معاني}}
=== النطق ===
* {{أصد-عر|خَرْمَشَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=خرمش|وزن=فعلل}}
=== المراجع ===
{{مراجع}}
4pzipxrgf22euwe8kb9l048t7z3rdqp
تَخَرْمَلَ
0
243497
1159126
2026-09-11T06:52:27Z
أبو هشام
20788
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1159126
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1534950}}
=== المعاني ===
'''تَخَرْمَلَ''' {{تفعلل}}
{{معجمية|L1534950|معاني}}
=== النطق ===
* {{أصد-عر|تَخَرْمَلَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=خرمل|وزن=تفعلل}}
=== المراجع ===
{{مراجع}}
jhut59dk2bx3kltg88202qbjksup9dj
اِخْتَزَّ
0
243498
1159127
2026-09-11T07:00:31Z
أبو هشام
20788
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1159127
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1534960}}
=== المعاني ===
'''اِخْتَزَّ''' {{افتعل}}
{{معجمية|L1534960|معاني}}
=== النطق ===
* {{أصد-عر|اِخْتَزَّ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=خزز|وزن=افتعل}}
=== المراجع ===
{{مراجع}}
8sfbyg0uy2h2zapvbzlcvlh3jijrtjd
خَزْرَبَ
0
243499
1159128
2026-09-11T07:04:28Z
أبو هشام
20788
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1159128
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1534957}}
=== المعاني ===
'''خَزْرَبَ''' {{فعلل}}
{{معجمية|L1534957|معاني}}
=== النطق ===
* {{أصد-عر|خَزْرَبَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=خزرب|وزن=فعلل}}
=== المراجع ===
{{مراجع}}
iiu1t34qyimingsdzi7j4zvqcwjesyb
اِسْتَخَسَّ
0
243500
1159129
2026-09-11T07:06:47Z
أبو هشام
20788
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1159129
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1534987}}
=== المعاني ===
'''اِسْتَخَسَّ''' {{استفعل}}
{{معجمية|L1534987|معاني}}
=== النطق ===
* {{أصد-عر|اِسْتَخَسَّ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=خسس|وزن=استفعل}}
=== المراجع ===
{{مراجع}}
ohej7m3zhxilsyjonmc0du0vp3sdfie
اِسْتَخَصَّ
0
243501
1159130
2026-09-11T07:07:47Z
أبو هشام
20788
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1159130
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1535027}}
=== المعاني ===
'''اِسْتَخَصَّ''' {{استفعل}}
{{معجمية|L1535027|معاني}}
=== النطق ===
* {{أصد-عر|اِسْتَخَصَّ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=خصص|وزن=استفعل}}
=== المراجع ===
{{مراجع}}
8ewj0gtnsbfu22nwbhi2ptsw48rpj1i
تَخَصَّصَ
0
243502
1159131
2026-09-11T07:14:15Z
أبو هشام
20788
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1159131
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1480888}}
=== المعاني ===
'''تَخَصَّصَ''' {{تفعّل}}
{{معجمية|L1480888|معاني}}
=== النطق ===
* {{أصد-عر|تَخَصَّصَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=خصص|وزن=تفعّل}}
=== المراجع ===
{{مراجع}}
ibzqb2elmnj9hrjofk7ixh62b5pxt8h
خَالَّ
0
243503
1159132
2026-09-11T07:17:41Z
أبو هشام
20788
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1159132
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1483817}}
=== المعاني ===
'''خَالَّ''' {{فاعل}}
{{معجمية|L1483817|معاني}}
=== النطق ===
* {{أصد-عر|خَالَّ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=خلل|وزن=فاعل}}
=== المراجع ===
{{مراجع}}
9u8m7jjjqdx1g5labxr0qpbxfgpjzgs
نقاش المستخدم:א. א. אינסטלציה
3
243504
1159140
2026-09-11T09:48:36Z
Gerges
33730
نقل Gerges صفحة [[نقاش المستخدم:א. א. אינסטלציה]] إلى [[نقاش المستخدم:ابن إبراهيم القرطبي]]: نُقِلت الصفحة آليا عند إعادة تسمية المستخدم «[[Special:CentralAuth/א. א. אינסטלציה|א. א. אינסטלציה]]» إلى «[[Special:CentralAuth/ابن إبراهيم القرطبي|ابن إبراهيم القرطبي]]».
1159140
wikitext
text/x-wiki
#تحويل [[نقاش المستخدم:ابن إبراهيم القرطبي]]
c4x0tfdbq431chj6l7qiy3kn5v071sj
جَنِئَ
0
243505
1159141
2026-09-11T11:32:17Z
إسلام
12622
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1159141
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1543373}}
=== المعاني ===
'''جَنِئَ''' {{سمع}}
{{معجمية|L1543373|معاني}}
=== النطق ===
* {{أصد-عر|جَنِئَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=جنأ|وزن=فعِل يفعَل}}
=== المراجع ===
{{مراجع}}
6ys5992c2sjjcl19onmee9p9r40upja
جَوَّبَ
0
243506
1159142
2026-09-11T11:35:42Z
إسلام
12622
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1159142
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1534115}}
=== المعاني ===
'''جَوَّبَ''' {{فعّل}}
{{معجمية|L1534115|معاني}}
=== النطق ===
* {{أصد-عر|جَوَّبَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=جوب|وزن=فعّل}}
=== المراجع ===
{{مراجع}}
qkohb0d4yahedpg5r4erh5g7k0sm0em
تَحَارَبَ
0
243507
1159143
2026-09-11T11:37:29Z
إسلام
12622
إنشاء صفحة فعل من بيانات المعاجم (ar-senses tool)
1159143
wikitext
text/x-wiki
== {{اللغة|عربية}} ==
{{صندوق معلومات فعل|L1480733}}
=== المعاني ===
'''تَحَارَبَ''' {{تفاعل}}
{{معجمية|L1480733|معاني}}
=== النطق ===
* {{أصد-عر|تَحَارَبَ}}
{{-}}
=== التصريفات ===
{{تصريف|جذر=حرب|وزن=تفاعل}}
=== المراجع ===
{{مراجع}}
fw7ydpv6bnf18qjlvljkcv1tpof7yjj