Aric Stewart : mlang: A very basic implementation of the IMLangLineBreakConsole interface and IMLangString interface .

Alexandre Julliard julliard at winehq.org
Tue Jul 22 09:36:04 CDT 2008


Module: wine
Branch: master
Commit: 75d44fe46d51a03271ba71f1e0d7fd001a56a6d7
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=75d44fe46d51a03271ba71f1e0d7fd001a56a6d7

Author: Aric Stewart <aric at 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)




More information about the wine-cvs mailing list