Module: wine Branch: master Commit: 75d44fe46d51a03271ba71f1e0d7fd001a56a6d7 URL: http://source.winehq.org/git/wine.git/?a=commit;h=75d44fe46d51a03271ba71f1e0...
Author: Aric Stewart aric@codeweavers.com Date: Tue Jul 22 10:01:49 2008 +0900
mlang: A very basic implementation of the IMLangLineBreakConsole interface and IMLangString interface.
---
dlls/mlang/mlang.c | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++ include/mlang.idl | 88 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 180 insertions(+), 0 deletions(-)
diff --git a/dlls/mlang/mlang.c b/dlls/mlang/mlang.c index 0920178..ad3ae9f 100644 --- a/dlls/mlang/mlang.c +++ b/dlls/mlang/mlang.c @@ -962,6 +962,7 @@ typedef struct tagMLang_impl const IMultiLanguageVtbl *vtbl_IMultiLanguage; const IMultiLanguage3Vtbl *vtbl_IMultiLanguage3; const IMLangFontLink2Vtbl *vtbl_IMLangFontLink2; + const IMLangLineBreakConsoleVtbl *vtbl_IMLangLineBreakConsole; LONG ref; DWORD total_cp, total_scripts; } MLang_impl; @@ -1035,6 +1036,15 @@ static HRESULT WINAPI MLang_QueryInterface( return S_OK; }
+ if (IsEqualGUID(riid, &IID_IMLangLineBreakConsole)) + { + MLang_AddRef(This); + TRACE("Returning IID_IMLangLineBreakConsole %p ref = %d\n", This, This->ref); + *ppvObject = &(This->vtbl_IMLangLineBreakConsole); + return S_OK; + } + + WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject); return E_NOINTERFACE; } @@ -2696,6 +2706,87 @@ static const IMLangFontLink2Vtbl IMLangFontLink2_vtbl = fnIMLangFontLink2_CodePageToScriptID };
+/******************************************************************************/ + +static HRESULT WINAPI fnIMLangLineBreakConsole_QueryInterface( + IMLangLineBreakConsole* iface, + REFIID riid, + void** ppvObject) +{ + ICOM_THIS_MULTI(MLang_impl, vtbl_IMLangLineBreakConsole, iface); + return MLang_QueryInterface( This, riid, ppvObject ); +} + +static ULONG WINAPI fnIMLangLineBreakConsole_AddRef( + IMLangLineBreakConsole* iface ) +{ + ICOM_THIS_MULTI(MLang_impl, vtbl_IMLangLineBreakConsole, iface); + return MLang_AddRef( This ); +} + +static ULONG WINAPI fnIMLangLineBreakConsole_Release( + IMLangLineBreakConsole* iface ) +{ + ICOM_THIS_MULTI(MLang_impl, vtbl_IMLangLineBreakConsole, iface); + return MLang_Release( This ); +} + +static HRESULT WINAPI fnIMLangLineBreakConsole_BreakLineML( + IMLangLineBreakConsole* iface, + IMLangString* pSrcMLStr, + long lSrcPos, + long lSrcLen, + long cMinColumns, + long cMaxColumns, + long* plLineLen, + long* plSkipLen) +{ + FIXME("(%p)->%p %li %li %li %li %p %p\n", iface, pSrcMLStr, lSrcPos, lSrcLen, cMinColumns, cMaxColumns, plLineLen, plSkipLen); + return E_NOTIMPL; +} + +static HRESULT WINAPI fnIMLangLineBreakConsole_BreakLineW( + IMLangLineBreakConsole* iface, + LCID locale, + const WCHAR* pszSrc, + long cchSrc, + long cMaxColumns, + long* pcchLine, + long* pcchSkip ) +{ + FIXME("(%p)->%i %s %li %li %p %p\n", iface, locale, debugstr_wn(pszSrc,cchSrc), cchSrc, cMaxColumns, pcchLine, pcchSkip); + + *pcchLine = cchSrc; + *pcchSkip = 0; + return S_OK; +} + +static HRESULT WINAPI fnIMLangLineBreakConsole_BreakLineA( + IMLangLineBreakConsole* iface, + LCID locale, + UINT uCodePage, + const CHAR* pszSrc, + long cchSrc, + long cMaxColumns, + long* pcchLine, + long* pcchSkip) +{ + FIXME("(%p)->%i %i %s %li %li %p %p\n", iface, locale, uCodePage, debugstr_an(pszSrc,cchSrc), cchSrc, cMaxColumns, pcchLine, pcchSkip); + + *pcchLine = cchSrc; + *pcchSkip = 0; + return S_OK; +} + +static const IMLangLineBreakConsoleVtbl IMLangLineBreakConsole_vtbl = +{ + fnIMLangLineBreakConsole_QueryInterface, + fnIMLangLineBreakConsole_AddRef, + fnIMLangLineBreakConsole_Release, + fnIMLangLineBreakConsole_BreakLineML, + fnIMLangLineBreakConsole_BreakLineW, + fnIMLangLineBreakConsole_BreakLineA +};
static HRESULT MultiLanguage_create(IUnknown *pUnkOuter, LPVOID *ppObj) { @@ -2712,6 +2803,7 @@ static HRESULT MultiLanguage_create(IUnknown *pUnkOuter, LPVOID *ppObj) mlang->vtbl_IMultiLanguage = &IMultiLanguage_vtbl; mlang->vtbl_IMultiLanguage3 = &IMultiLanguage3_vtbl; mlang->vtbl_IMLangFontLink2 = &IMLangFontLink2_vtbl; + mlang->vtbl_IMLangLineBreakConsole = &IMLangLineBreakConsole_vtbl;
mlang->total_cp = 0; for (i = 0; i < sizeof(mlang_data)/sizeof(mlang_data[0]); i++) diff --git a/include/mlang.idl b/include/mlang.idl index fabcc59..2b236c7 100644 --- a/include/mlang.idl +++ b/include/mlang.idl @@ -222,6 +222,94 @@ interface IMLangFontLink2 : IMLangCodePages }
[ + object, + uuid(c04d65ce-b70d-11d0-b188-00aa0038c969), + pointer_default(unique) +] +interface IMLangString : IUnknown +{ +#ifdef NEWMLSTR + HRESULT LockMLStr( + [in] long lPos, + [in] DWORD dwFlags, + [out] DWORD* pdwCookie, + [out] long* plActualPos, + [out] long* plActualLen); + + HRESULT UnlockMLStr( + [in] DWORD dwCookie); +#else + HRESULT Sync( + [in] BOOL fNoAccess); +#endif + HRESULT GetLength( + [out, retval] long* plLen); + HRESULT SetMLStr( + [in] long lDestPos, + [in] long lDestLen, + [in] IUnknown *pSrcMLStr, + [in] long lSrcPos, + [in] long lSrcLen); +#ifdef NEWMLSTR + HRESULT RegisterAttr( + [in] IUnknown *pUnk, + [out] DWORD* pdwCookie); + HRESULT UnregisterAttr( + [in] DWORD dwCookie); + HRESULT EnumAttr( + [out] IEnumUnknown **ppEnumUnk); + HRESULT FindAttr( + [in] REFIID riid, + [in] LPARAM lParam, + [out] IUnknown **ppUnk); +#else + HRESULT GetMLStr( + [in] long lSrcPos, + [in] long lSrcLen, + [in] IUnknown *pUnkOuter, + [in] DWORD dwClsContext, + [in] const IID* piid, + [out] IUnknown** ppDestMLStr, + [out] long* plDestPos, + [out] long* plDestLen); +#endif +} + +[ + object, + uuid(f5be2ee1-bfd7-11d0-b188-00aa0038c969), + pointer_default(unique) +] +interface IMLangLineBreakConsole : IUnknown +{ + HRESULT BreakLineML( + [in] IMLangString* pSrcMLStr, + [in] long lSrcPos, + [in] long lSrcLen, + [in] long cMinColumns, + [in] long cMaxColumns, + [out] long* plLineLen, + [out] long* plSkipLen); + + HRESULT BreakLineW( + [in] LCID locale, + [in, size_is(cchSrc)] const WCHAR* pszSrc, + [in] long cchSrc, + [in] long cMaxColumns, + [out] long* pcchLine, + [out] long* pcchSkip ); + + HRESULT BreakLineA( + [in] LCID locale, + [in] UINT uCodePage, + [in, size_is(cchSrc)] const CHAR* pszSrc, + [in] long cchSrc, + [in] long cMaxColumns, + [out] long* pcchLine, + [out] long* pcchSkip); +} + +[ object, uuid(275c23e3-3747-11d0-9fea-00aa003f8646), pointer_default(unique)